ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmRmNDA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotICA8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTBjMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRkYjIzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNUdWUgQXByIDIyIDE1OjIyOjA1IEdNVC0wNTowMCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MmI4MzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IC4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlO3VzZXM6PSJvcmcub3NnaS5mcmFtZXdvcmssb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbDsKLSAgdXNlczo9Im9yZy5hcGFjaGUueG1sLnV0aWxzLAotICAgb3JnLnczYy5kb20udHJhdmVyc2FsLAotICAgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLAotICAgb3JnLnczYy5kb20sCi0gICBvcmcuYXBhY2hlLnhwYXRoLmNvbXBpbGVyIgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb21wYXRpYmlsaXR5O2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLnhhbGFuO2J1bmRsZS12ZXJzaW9uPSJbMi43LjEsMi44LjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZTtidW5kbGUtdmVyc2lvbj0iMS4xLjAiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSIzLjUuMCIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5ZjZjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyAgQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jICBDb250cmlidXRvcnM6Ci0jICAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jCi0jICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuOCAyMDA5LzEyLzI1IDIwOjQ2OjUwIGRhY2FydmVyIEV4cCAkCi0KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGJpbi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sCi1qYXJzLmNvbXBpbGUub3JkZXIgPSAuCi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotc3JjLmluY2x1ZGVzID0gc3JjLyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYnVpbGQucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTI5MjY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyAgQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jICBDb250cmlidXRvcnM6Ci0jICAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jCi0jICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjMgMjAwOS8wNC8yNCAwMzozMzo1MyBkYWNhcnZlciBFeHAgJAotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIFRvIGNvZGUgZGV2ZWxvcGVyOgotIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQotIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCi0jICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCi0jICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXBsdWdpbk5hbWUgPSBYUGF0aCBDb3JlCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNjQzYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Ci08cGx1Z2luPgotICA8ZXh0ZW5zaW9uCi0gICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMiPgotICAgICA8aW5pdGlhbGl6ZXIKLSAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiPgotICAgICA8L2luaXRpYWxpemVyPgotICA8L2V4dGVuc2lvbj4JCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvWFBhdGhDb3JlUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL1hQYXRoQ29yZVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjI5MDc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvWFBhdGhDb3JlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5Qcm9qZWN0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aENvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBYUGF0aENvcmVQbHVnaW4gcGx1Z2luOwotCQotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIFhQYXRoQ29yZVBsdWdpbigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFBhdGhDb3JlUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS9YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL1hQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY4NWJlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL1hQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlOwotCi0vKioKLSAqIFhQYXRoIFByb2Nlc3NvciBwcmVmZXJlbmNlcwotICogQGF1dGhvciBkY2FydmVyCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIXzFfMF9QUk9DRVNTT1IgPSAiWFBBVEgxLjAiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIXzJfMF9QUk9DRVNTT1IgPSAiWFBBVEgyLjAiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIX09USEVSID0gIk9USEVSIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL2ludGVybmFsL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmU1MGMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlczsKLQotLyoqCi0gKiBQcmVmZXJlbmNlcyBpbml0aWFsaXplciBmb3IgWFNMIGNvcmUgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgQ2FydmVyCi0gKi8KLXB1YmxpYyBjbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcgotewotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQotCXsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoWFBhdGhDb3JlUGx1Z2luLlBMVUdJTl9JRCk7Ci0JCW5vZGUucHV0Qm9vbGVhbihYUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLlhQQVRIXzFfMF9QUk9DRVNTT1IsIHRydWUpOwotCQlub2RlLnB1dEJvb2xlYW4oWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5YUEFUSF8yXzBfUFJPQ0VTU09SLCBmYWxzZSk7Ci0JCW5vZGUucHV0Qm9vbGVhbihYUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLlhQQVRIX09USEVSLCBmYWxzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL05vZGVMaXN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL05vZGVMaXN0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjQ3ZWFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvdXRpbC9Ob2RlTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQHNpbmNlIDEuMQotICovCi1wdWJsaWMgY2xhc3MgTm9kZUxpc3RJbXBsIGltcGxlbWVudHMgTm9kZUxpc3QgewotCi0JUmVzdWx0U2VxdWVuY2UgcnM7Ci0JCi0JcHVibGljIE5vZGVMaXN0SW1wbChSZXN1bHRTZXF1ZW5jZSByZXN1bHQpIHsKLQkJcnMgPSByZXN1bHQ7Ci0JfQotCQotCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgewotCQlyZXR1cm4gcnMuc2l6ZSgpOwotCX0KLQotCXB1YmxpYyBOb2RlIGl0ZW0oaW50IGFyZzApIHsKLQkJQW55VHlwZSB0eXBlID0gcnMuZ2V0KGFyZzApOwotCQlpZiAodHlwZSBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQlOb2RlVHlwZSBub2RlVHlwZSA9IChOb2RlVHlwZSkgdHlwZTsKLQkJCXJldHVybiBub2RlVHlwZS5ub2RlX3ZhbHVlKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL1hQYXRoMjBIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvdXRpbC9YUGF0aDIwSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwOTk4MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL1hQYXRoMjBIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyMjYyNDUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuSkZsZXhDdXBQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlckV4Y2VwdGlvbjsKLQotLyoqCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aDIwSGVscGVyIHsKLQotCXB1YmxpYyBYUGF0aDIwSGVscGVyKCkgewotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgY29tcGlsZShTdHJpbmcgeHBhdGhFeHApIHRocm93cyBYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24gewotCQl0cnkgewotCQkJWFBhdGhQYXJzZXIgeHBhdGhQYXJzZXIgPSBuZXcgSkZsZXhDdXBQYXJzZXIoKTsKLQkJCXhwYXRoUGFyc2VyLnBhcnNlKHhwYXRoRXhwKTsKLQkJfSBjYXRjaCAoWFBhdGhQYXJzZXJFeGNlcHRpb24gZXgpIHsKLQkJCXRocm93IG5ldyBYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL1hQYXRoQ29yZUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL1hQYXRoQ29yZUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDJlZjlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvdXRpbC9YUGF0aENvcmVIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLlByZWZlcmVuY2VzOwotCi1wdWJsaWMgY2xhc3MgWFBhdGhDb3JlSGVscGVyIHsKLQotCXB1YmxpYyBzdGF0aWMgUHJlZmVyZW5jZXMgZ2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZnMgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRSb290Tm9kZSgpOwotCQlyZXR1cm4gcHJlZnMubm9kZShEZWZhdWx0U2NvcGUuU0NPUEUpLm5vZGUoWFBhdGhDb3JlUGx1Z2luLlBMVUdJTl9JRCk7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvdXRpbC9YU0xUWFBhdGhIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvdXRpbC9YU0xUWFBhdGhIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJlMzVlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL3V0aWwvWFNMVFhQYXRoSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbC51dGlscy5QcmVmaXhSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbC51dGlscy5QcmVmaXhSZXNvbHZlckRlZmF1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5YUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLmNvbXBpbGVyLkZ1bmN0aW9uVGFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5qYXhwLkpBWFBQcmVmaXhSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20udHJhdmVyc2FsLk5vZGVJdGVyYXRvcjsKLQotcHVibGljIGNsYXNzIFhTTFRYUGF0aEhlbHBlciB7Ci0KLQkvKioKLQkgKiBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIHNpbmdsZSBub2RlLiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0JICogcmVzb2x2ZWQgZnJvbSB0aGUgY29udGV4dCBub2RlLCB3aGljaCBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQgKHNlZSB0aGUKLQkgKiBuZXh0IG1ldGhvZCkuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHROb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS4KLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBBIHZhbGlkIFhQYXRoIHN0cmluZy4KLQkgKiBAcmV0dXJuIFRoZSBmaXJzdCBub2RlIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgWFBhdGgsIG9yIG51bGwuCi0JICogCi0JICogQHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBzdGF0aWMgTm9kZSBzZWxlY3RTaW5nbGVOb2RlKE5vZGUgY29udGV4dE5vZGUsIFN0cmluZyBzdHIpCi0JCQl0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24gewotCQlyZXR1cm4gc2VsZWN0U2luZ2xlTm9kZShjb250ZXh0Tm9kZSwgc3RyLCBjb250ZXh0Tm9kZSk7Ci0JfQotCi0JLyoqCi0JICogVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBzaW5nbGUgbm9kZS4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotCSAqIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHROb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS4KLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBBIHZhbGlkIFhQYXRoIHN0cmluZy4KLQkgKiBAcGFyYW0gbmFtZXNwYWNlTm9kZQotCSAqICAgICAgICAgICAgVGhlIG5vZGUgZnJvbSB3aGljaCBwcmVmaXhlcyBpbiB0aGUgWFBhdGggd2lsbCBiZSByZXNvbHZlZCB0bwotCSAqICAgICAgICAgICAgbmFtZXNwYWNlcy4KLQkgKiBAcmV0dXJuIFRoZSBmaXJzdCBub2RlIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgWFBhdGgsIG9yIG51bGwuCi0JICogCi0JICogQHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBzdGF0aWMgTm9kZSBzZWxlY3RTaW5nbGVOb2RlKE5vZGUgY29udGV4dE5vZGUsIFN0cmluZyBzdHIsCi0JCQlOb2RlIG5hbWVzcGFjZU5vZGUpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiB7Ci0KLQkJLy8gSGF2ZSB0aGUgWE9iamVjdCByZXR1cm4gaXRzIHJlc3VsdCBhcyBhIE5vZGVTZXREVE0uCi0JCU5vZGVJdGVyYXRvciBubCA9IHNlbGVjdE5vZGVJdGVyYXRvcihjb250ZXh0Tm9kZSwgc3RyLCBuYW1lc3BhY2VOb2RlKTsKLQotCQkvLyBSZXR1cm4gdGhlIGZpcnN0IG5vZGUsIG9yIG51bGwKLQkJcmV0dXJuIG5sLm5leHROb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotCSAqIHJlc29sdmVkIGZyb20gdGhlIGNvbnRleHROb2RlLgotCSAqIAotCSAqIEBwYXJhbSBjb250ZXh0Tm9kZQotCSAqICAgICAgICAgICAgVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgQSB2YWxpZCBYUGF0aCBzdHJpbmcuCi0JICogQHJldHVybiBBIE5vZGVJdGVyYXRvciwgc2hvdWxkIG5ldmVyIGJlIG51bGwuCi0JICogCi0JICogQHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBzdGF0aWMgTm9kZUl0ZXJhdG9yIHNlbGVjdE5vZGVJdGVyYXRvcihOb2RlIGNvbnRleHROb2RlLCBTdHJpbmcgc3RyKQotCQkJdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHNlbGVjdE5vZGVJdGVyYXRvcihjb250ZXh0Tm9kZSwgc3RyLCBjb250ZXh0Tm9kZSk7Ci0JfQotCi0JLyoqCi0JICogVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotCSAqIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHROb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS4KLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBBIHZhbGlkIFhQYXRoIHN0cmluZy4KLQkgKiBAcGFyYW0gbmFtZXNwYWNlTm9kZQotCSAqICAgICAgICAgICAgVGhlIG5vZGUgZnJvbSB3aGljaCBwcmVmaXhlcyBpbiB0aGUgWFBhdGggd2lsbCBiZSByZXNvbHZlZCB0bwotCSAqICAgICAgICAgICAgbmFtZXNwYWNlcy4KLQkgKiBAcmV0dXJuIEEgTm9kZUl0ZXJhdG9yLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC4KLQkgKiAKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyBOb2RlSXRlcmF0b3Igc2VsZWN0Tm9kZUl0ZXJhdG9yKE5vZGUgY29udGV4dE5vZGUsIFN0cmluZyBzdHIsCi0JCQlOb2RlIG5hbWVzcGFjZU5vZGUpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiB7Ci0KLQkJLy8gRXhlY3V0ZSB0aGUgWFBhdGgsIGFuZCBoYXZlIGl0IHJldHVybiB0aGUgcmVzdWx0Ci0JCVhPYmplY3QgbGlzdCA9IGV2YWwoY29udGV4dE5vZGUsIHN0ciwgbmFtZXNwYWNlTm9kZSk7Ci0KLQkJLy8gSGF2ZSB0aGUgWE9iamVjdCByZXR1cm4gaXRzIHJlc3VsdCBhcyBhIE5vZGVTZXREVE0uCi0JCXJldHVybiBsaXN0Lm5vZGVzZXQoKTsKLQl9Ci0KLQkvKioKLQkgKiBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0JICogcmVzb2x2ZWQgZnJvbSB0aGUgY29udGV4dE5vZGUuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHROb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS4KLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBBIHZhbGlkIFhQYXRoIHN0cmluZy4KLQkgKiBAcmV0dXJuIEEgTm9kZUl0ZXJhdG9yLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC4KLQkgKiAKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyBOb2RlTGlzdCBzZWxlY3ROb2RlTGlzdChOb2RlIGNvbnRleHROb2RlLCBTdHJpbmcgc3RyKQotCQkJdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHNlbGVjdE5vZGVMaXN0KGNvbnRleHROb2RlLCBzdHIsIGNvbnRleHROb2RlKTsKLQl9Ci0KLQkvKioKLQkgKiBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0JICogcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dE5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLgotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIEEgdmFsaWQgWFBhdGggc3RyaW5nLgotCSAqIEBwYXJhbSBuYW1lc3BhY2VOb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSBmcm9tIHdoaWNoIHByZWZpeGVzIGluIHRoZSBYUGF0aCB3aWxsIGJlIHJlc29sdmVkIHRvCi0JICogICAgICAgICAgICBuYW1lc3BhY2VzLgotCSAqIEByZXR1cm4gQSBOb2RlSXRlcmF0b3IsIHNob3VsZCBuZXZlciBiZSBudWxsLgotCSAqIAotCSAqIEB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIE5vZGVMaXN0IHNlbGVjdE5vZGVMaXN0KE5vZGUgY29udGV4dE5vZGUsIFN0cmluZyBzdHIsCi0JCQlOb2RlIG5hbWVzcGFjZU5vZGUpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiB7Ci0KLQkJLy8gRXhlY3V0ZSB0aGUgWFBhdGgsIGFuZCBoYXZlIGl0IHJldHVybiB0aGUgcmVzdWx0Ci0JCVhPYmplY3QgbGlzdCA9IGV2YWwoY29udGV4dE5vZGUsIHN0ciwgbmFtZXNwYWNlTm9kZSk7Ci0KLQkJLy8gUmV0dXJuIGEgTm9kZUxpc3QuCi0JCXJldHVybiBsaXN0Lm5vZGVsaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgWFBhdGggc3RyaW5nIHRvIGFuIFhPYmplY3QuIFVzaW5nIHRoaXMgbWV0aG9kLCBYUGF0aCBuYW1lc3BhY2UKLQkgKiBwcmVmaXhlcyB3aWxsIGJlIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHROb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS4KLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBBIHZhbGlkIFhQYXRoIHN0cmluZy4KLQkgKiBAcmV0dXJuIEFuIFhPYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN0cmluZywgbnVtYmVyLAotCSAqICAgICAgICAgbm9kZWxpc3QsIGV0Yywgc2hvdWxkIG5ldmVyIGJlIG51bGwuCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdAotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhOdWxsCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWEJvb2xlYW4KLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YTnVtYmVyCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWFN0cmluZwotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhSVHJlZUZyYWcKLQkgKiAKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyBYT2JqZWN0IGV2YWwoTm9kZSBjb250ZXh0Tm9kZSwgU3RyaW5nIHN0cikKLQkJCXRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiB7Ci0JCXJldHVybiBldmFsKGNvbnRleHROb2RlLCBzdHIsIGNvbnRleHROb2RlKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBYUGF0aCBzdHJpbmcgdG8gYW4gWE9iamVjdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotCSAqIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGlzIGEgbGl0dGxlCi0JICogc2xvdywgc2luY2UgaXQgY3JlYXRlcyBhIG51bWJlciBvZiBvYmplY3RzIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuIFRoaXMKLQkgKiBjb3VsZCBiZSBvcHRpbWl6ZWQgdG8ga2VlcCB0aGUgc2FtZSBvYmplY3RzIGFyb3VuZCwgYnV0IHRoZW4KLQkgKiB0aHJlYWQtc2FmZXR5IGlzc3VlcyB3b3VsZCBhcmlzZS4KLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dE5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLgotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIEEgdmFsaWQgWFBhdGggc3RyaW5nLgotCSAqIEBwYXJhbSBuYW1lc3BhY2VOb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSBmcm9tIHdoaWNoIHByZWZpeGVzIGluIHRoZSBYUGF0aCB3aWxsIGJlIHJlc29sdmVkIHRvCi0JICogICAgICAgICAgICBuYW1lc3BhY2VzLgotCSAqIEByZXR1cm4gQW4gWE9iamVjdCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEgc3RyaW5nLCBudW1iZXIsCi0JICogICAgICAgICBub2RlbGlzdCwgZXRjLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC4KLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0Ci0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE51bGwKLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YQm9vbGVhbgotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhOdW1iZXIKLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YU3RyaW5nCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWFJUcmVlRnJhZwotCSAqIAotCSAqIEB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhPYmplY3QgZXZhbChOb2RlIGNvbnRleHROb2RlLCBTdHJpbmcgc3RyLCBOb2RlIG5hbWVzcGFjZU5vZGUpCi0JCQl0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24gewotCi0JCS8vIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBYTUwgUGFyc2VyIGludm9sdmVkIGhlcmUsIGluc3RhbGwgc29tZSBkZWZhdWx0Ci0JCS8vIHN1cHBvcnQKLQkJLy8gZm9yIHRoaW5ncyBsaWtlIG5hbWVzcGFjZXMsIGV0Yy4KLQkJLy8gKENoYW5nZWQgZnJvbTogWFBhdGhDb250ZXh0IHhwYXRoU3VwcG9ydCA9IG5ldyBYUGF0aENvbnRleHQoKTsKLQkJLy8gYmVjYXVzZSBYUGF0aENvbnRleHQgaXMgd2VhayBpbiBhIG51bWJlciBvZiBhcmVhcy4uLiBwZXJoYXBzCi0JCS8vIFhQYXRoQ29udGV4dCBzaG91bGQgYmUgZG9uZSBhd2F5IHdpdGguKQotCQlYUGF0aENvbnRleHQgeHBhdGhTdXBwb3J0ID0gbmV3IFhQYXRoQ29udGV4dCgpOwotCi0JCS8vIENyZWF0ZSBhbiBvYmplY3QgdG8gcmVzb2x2ZSBuYW1lc3BhY2UgcHJlZml4ZXMuCi0JCS8vIFhQYXRoIG5hbWVzcGFjZXMgYXJlIHJlc29sdmVkIGZyb20gdGhlIGlucHV0IGNvbnRleHQgbm9kZSdzIGRvY3VtZW50Ci0JCS8vIGVsZW1lbnQKLQkJLy8gaWYgaXQgaXMgYSByb290IG5vZGUsIG9yIGVsc2UgdGhlIGN1cnJlbnQgY29udGV4dCBub2RlIChmb3IgbGFjayBvZiBhCi0JCS8vIGJldHRlcgotCQkvLyByZXNvbHV0aW9uIHNwYWNlLCBnaXZlbiB0aGUgc2ltcGxpY2l0eSBvZiB0aGlzIHNhbXBsZSBjb2RlKS4JCQotCQlQcmVmaXhSZXNvbHZlckRlZmF1bHQgcHJlZml4UmVzb2x2ZXIgPSBuZXcgUHJlZml4UmVzb2x2ZXJEZWZhdWx0KAotCQkJCShuYW1lc3BhY2VOb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5ET0NVTUVOVF9OT0RFKSA/ICgoRG9jdW1lbnQpIG5hbWVzcGFjZU5vZGUpCi0JCQkJCQkuZ2V0RG9jdW1lbnRFbGVtZW50KCkKLQkJCQkJCTogbmFtZXNwYWNlTm9kZSk7Ci0KLQkJLy8gQ3JlYXRlIHRoZSBYUGF0aCBvYmplY3QuCi0JCVhQYXRoIHhwYXRoID0gbmV3IFhQYXRoKHN0ciwgbnVsbCwgcHJlZml4UmVzb2x2ZXIsIFhQYXRoLlNFTEVDVCwgbnVsbCwKLQkJCQlnZXRGdW5jdGlvblRhYmxlKCkpOwotCi0JCS8vIEV4ZWN1dGUgdGhlIFhQYXRoLCBhbmQgaGF2ZSBpdCByZXR1cm4gdGhlIHJlc3VsdAotCQkvLyByZXR1cm4geHBhdGguZXhlY3V0ZSh4cGF0aFN1cHBvcnQsIGNvbnRleHROb2RlLCBwcmVmaXhSZXNvbHZlcik7Ci0JCWludCBjdHh0Tm9kZSA9IHhwYXRoU3VwcG9ydC5nZXREVE1IYW5kbGVGcm9tTm9kZShjb250ZXh0Tm9kZSk7Ci0KLQkJcmV0dXJuIHhwYXRoLmV4ZWN1dGUoeHBhdGhTdXBwb3J0LCBjdHh0Tm9kZSwgcHJlZml4UmVzb2x2ZXIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIFhQYXRoIHN0cmluZyB0byBhbiBYT2JqZWN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0JICogcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaXMgYSBsaXR0bGUKLQkgKiBzbG93LCBzaW5jZSBpdCBjcmVhdGVzIGEgbnVtYmVyIG9mIG9iamVjdHMgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhpcwotCSAqIGNvdWxkIGJlIG9wdGltaXplZCB0byBrZWVwIHRoZSBzYW1lIG9iamVjdHMgYXJvdW5kLCBidXQgdGhlbgotCSAqIHRocmVhZC1zYWZldHkgaXNzdWVzIHdvdWxkIGFyaXNlLgotCSAqIAotCSAqIEBwYXJhbSBjb250ZXh0Tm9kZQotCSAqICAgICAgICAgICAgVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgQSB2YWxpZCBYUGF0aCBzdHJpbmcuCi0JICogQHBhcmFtIHByZWZpeFJlc29sdmVyCi0JICogICAgICAgICAgICBXaWxsIGJlIGNhbGxlZCBpZiB0aGUgcGFyc2VyIGVuY291bnRlcnMgbmFtZXNwYWNlIHByZWZpeGVzLCB0bwotCSAqICAgICAgICAgICAgcmVzb2x2ZSB0aGUgcHJlZml4ZXMgdG8gVVJMcy4KLQkgKiBAcmV0dXJuIEFuIFhPYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN0cmluZywgbnVtYmVyLAotCSAqICAgICAgICAgbm9kZWxpc3QsIGV0Yywgc2hvdWxkIG5ldmVyIGJlIG51bGwuCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdAotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhOdWxsCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWEJvb2xlYW4KLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YTnVtYmVyCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWFN0cmluZwotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhSVHJlZUZyYWcKLQkgKiAKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyBYT2JqZWN0IGV2YWwoTm9kZSBjb250ZXh0Tm9kZSwgU3RyaW5nIHN0ciwKLQkJCVByZWZpeFJlc29sdmVyIHByZWZpeFJlc29sdmVyKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24gewotCi0JCS8vIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBYTUwgUGFyc2VyIGludm9sdmVkIGhlcmUsIGluc3RhbGwgc29tZSBkZWZhdWx0Ci0JCS8vIHN1cHBvcnQKLQkJLy8gZm9yIHRoaW5ncyBsaWtlIG5hbWVzcGFjZXMsIGV0Yy4KLQkJLy8gKENoYW5nZWQgZnJvbTogWFBhdGhDb250ZXh0IHhwYXRoU3VwcG9ydCA9IG5ldyBYUGF0aENvbnRleHQoKTsKLQkJLy8gYmVjYXVzZSBYUGF0aENvbnRleHQgaXMgd2VhayBpbiBhIG51bWJlciBvZiBhcmVhcy4uLiBwZXJoYXBzCi0JCS8vIFhQYXRoQ29udGV4dCBzaG91bGQgYmUgZG9uZSBhd2F5IHdpdGguKQotCQkvLyBDcmVhdGUgdGhlIFhQYXRoIG9iamVjdC4KLQkJWFBhdGggeHBhdGggPSBuZXcgWFBhdGgoc3RyLCBudWxsLCBwcmVmaXhSZXNvbHZlciwgWFBhdGguU0VMRUNULCBudWxsLAotCQkJCWdldEZ1bmN0aW9uVGFibGUoKSk7Ci0KLQkJLy8gRXhlY3V0ZSB0aGUgWFBhdGgsIGFuZCBoYXZlIGl0IHJldHVybiB0aGUgcmVzdWx0Ci0JCVhQYXRoQ29udGV4dCB4cGF0aFN1cHBvcnQgPSBuZXcgWFBhdGhDb250ZXh0KCk7Ci0JCWludCBjdHh0Tm9kZSA9IHhwYXRoU3VwcG9ydC5nZXREVE1IYW5kbGVGcm9tTm9kZShjb250ZXh0Tm9kZSk7Ci0KLQkJcmV0dXJuIHhwYXRoLmV4ZWN1dGUoeHBhdGhTdXBwb3J0LCBjdHh0Tm9kZSwgcHJlZml4UmVzb2x2ZXIpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb21waWxlKFN0cmluZyBleHByZXNzaW9uKQotCQkJdGhyb3dzIFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQluZXcgWFBhdGgoZXhwcmVzc2lvbiwgbnVsbCwgbnVsbCwgb3JnLmFwYWNoZS54cGF0aC5YUGF0aC5TRUxFQ1QsCi0JCQkJCW51bGwsIGdldEZ1bmN0aW9uVGFibGUoKSk7Ci0JCX0gY2F0Y2ggKGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb24gdGUpIHsKLQkJCXRocm93IG5ldyBYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24odGUpOwotCQl9Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIEZ1bmN0aW9uVGFibGUgZ2V0RnVuY3Rpb25UYWJsZSgpIHsKLQkJRnVuY3Rpb25UYWJsZSBmdW5jdGlvblRhYmxlID0gbmV3IEZ1bmN0aW9uVGFibGUoKTsKLQkJZnVuY3Rpb25UYWJsZS5pbnN0YWxsRnVuY3Rpb24oImtleSIsCi0JCQkJb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRnVuY0tleS5jbGFzcyk7Ci0JCWZ1bmN0aW9uVGFibGUuaW5zdGFsbEZ1bmN0aW9uKCJmb3JtYXQtbnVtYmVyIiwKLQkJCQlvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5GdW5jRm9ybWF0TnVtYi5jbGFzcyk7Ci0JCWZ1bmN0aW9uVGFibGUuaW5zdGFsbEZ1bmN0aW9uKCJkb2N1bWVudCIsCi0JCQkJb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRnVuY0RvY3VtZW50LmNsYXNzKTsKLQkJZnVuY3Rpb25UYWJsZS5pbnN0YWxsRnVuY3Rpb24oImVsZW1lbnQtYXZhaWxhYmxlIiwKLQkJCQlvcmcuYXBhY2hlLnhwYXRoLmZ1bmN0aW9ucy5GdW5jRXh0RWxlbWVudEF2YWlsYWJsZS5jbGFzcyk7Ci0JCWZ1bmN0aW9uVGFibGUuaW5zdGFsbEZ1bmN0aW9uKCJmdW5jdGlvbi1hdmFpbGFibGUiLAotCQkJCW9yZy5hcGFjaGUueHBhdGguZnVuY3Rpb25zLkZ1bmNFeHRGdW5jdGlvbkF2YWlsYWJsZS5jbGFzcyk7Ci0JCWZ1bmN0aW9uVGFibGUuaW5zdGFsbEZ1bmN0aW9uKCJjdXJyZW50IiwKLQkJCQlvcmcuYXBhY2hlLnhwYXRoLmZ1bmN0aW9ucy5GdW5jQ3VycmVudC5jbGFzcyk7Ci0JCWZ1bmN0aW9uVGFibGUuaW5zdGFsbEZ1bmN0aW9uKCJ1bnBhcnNlZC1lbnRpdHktc3RyaW5nIiwKLQkJCQlvcmcuYXBhY2hlLnhwYXRoLmZ1bmN0aW9ucy5GdW5jVW5wYXJzZWRFbnRpdHlVUkkuY2xhc3MpOwotCQlmdW5jdGlvblRhYmxlLmluc3RhbGxGdW5jdGlvbigiZ2VuZXJhdGUtaWQiLAotCQkJCW9yZy5hcGFjaGUueHBhdGguZnVuY3Rpb25zLkZ1bmNHZW5lcmF0ZUlkLmNsYXNzKTsKLQkJZnVuY3Rpb25UYWJsZS5pbnN0YWxsRnVuY3Rpb24oInN5c3RlbS1wcm9wZXJ0eSIsCi0JCQkJb3JnLmFwYWNoZS54cGF0aC5mdW5jdGlvbnMuRnVuY1N5c3RlbVByb3BlcnR5LmNsYXNzKTsKLQkJcmV0dXJuIGZ1bmN0aW9uVGFibGU7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIFhQYXRoIGV4cHJlc3Npb24gZ2l2ZW4gYSBET00gTm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgVGhlIERPTSBOb2RlIHRvIGNyZWF0ZSB0aGUgWFBhdGggZXhwcmVzc2lvbi4KLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgY2FsY3VsYXRlWFBhdGhUb05vZGUoTm9kZSBub2RlKSB7Ci0JCU5vZGUgeHBhdGhOb2RlID0gbm9kZTsKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQl3aGlsZSAoeHBhdGhOb2RlICE9IG51bGwpIHsKLQkJCXN3aXRjaCAoeHBhdGhOb2RlLmdldE5vZGVUeXBlKCkpIHsKLQkJCWNhc2UgTm9kZS5BVFRSSUJVVEVfTk9ERToKLQkJCQlzYi5pbnNlcnQoMCwgeHBhdGhOb2RlLmdldE5vZGVOYW1lKCkpOwotCQkJCXNiLmluc2VydCgwLCAiL0AiKTsgLy8kTk9OLU5MUy0xJAotCQkJCXhwYXRoTm9kZSA9ICgoQXR0cikgeHBhdGhOb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgTm9kZS5FTEVNRU5UX05PREU6Ci0JCQkJTm9kZSBzaWJsaW5nID0geHBhdGhOb2RlOwotCQkJCWludCBwb3NpdGlvbiA9IDE7Ci0JCQkJd2hpbGUgKChzaWJsaW5nID0gc2libGluZy5nZXRQcmV2aW91c1NpYmxpbmcoKSkgIT0gbnVsbCkgewotCQkJCQlpZiAoc2libGluZy5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFCi0JCQkJCQkJJiYgc2libGluZy5nZXROb2RlTmFtZSgpLmVxdWFscyh4cGF0aE5vZGUuZ2V0Tm9kZU5hbWUoKSkpIHsKLQkJCQkJCSsrcG9zaXRpb247Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKHBvc2l0aW9uID4gMSkgewotCQkJCQlzYi5pbnNlcnQoMCwgIlsiICsgcG9zaXRpb24gKyAiXSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCXNpYmxpbmcgPSB4cGF0aE5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLQkJCQkJYm9vbGVhbiBmb2xsb3dpbmcgPSBmYWxzZTsKLQkJCQkJd2hpbGUgKHNpYmxpbmcgIT0gbnVsbCkgewotCQkJCQkJaWYgKHNpYmxpbmcuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERQotCQkJCQkJCQkmJiBzaWJsaW5nLmdldE5vZGVOYW1lKCkuZXF1YWxzKAotCQkJCQkJCQkJCXhwYXRoTm9kZS5nZXROb2RlTmFtZSgpKSkgewotCQkJCQkJCWZvbGxvd2luZyA9IHRydWU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQlzaWJsaW5nID0gc2libGluZy5nZXROZXh0U2libGluZygpOwotCQkJCQl9Ci0JCQkJCWlmIChmb2xsb3dpbmcpIHsKLQkJCQkJCXNiLmluc2VydCgwLCAiWzFdIik7IC8vJE5PTi1OTFMtMSQKLQkJCQkJfQotCQkJCX0KLQkJCQlzYi5pbnNlcnQoMCwgeHBhdGhOb2RlLmdldE5vZGVOYW1lKCkpOwotCQkJCXNiLmluc2VydCgwLCAiLyIpOyAvLyROT04tTkxTLTEkCi0JCQkJeHBhdGhOb2RlID0geHBhdGhOb2RlLmdldFBhcmVudE5vZGUoKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJeHBhdGhOb2RlID0geHBhdGhOb2RlLmdldFBhcmVudE5vZGUoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzhlNjAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkgZXhjbHVkaW5nPSIqKi8qLmxleHwqKi8qLmN1cCIga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDM3ZGJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWxpYgotLmV4dGVybmFsVG9vbEJ1aWxkZXJzCi0uYnllY3ljbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NjliMjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmM0YTk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSwzODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Ci08Y29tcG9uZW50IGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHZlcnNpb249IjIiPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RlZmF1bHREeW5hbWljQ29udGV4dC5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdER5bmFtaWNDb250ZXh0Ij4KLSAgICAgICAgPGZpbHRlciBpZD0iMzM4NzkyNTQ2Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJub2RlX3Bvc2l0aW9uKE5vZGUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iMzM4NzkyNTQ2Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ0eigpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iMzM4NzkyNTQ2Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRfZG9jKFN0cmluZykiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRHluYW1pY0NvbnRleHQuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ij4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzNzY3MzM2Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkNPREVQT0lOVF9DT0xMQVRJT04iLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0X2NvbGxhdGlvbihTdHJpbmcpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InR6KCkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iY3VycmVudF9kYXRlX3RpbWUoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRfZG9jKFVSSSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZXZhbHVhdGVfZnVuY3Rpb24oUU5hbWUsIENvbGxlY3Rpb24pIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InNldF92YXJpYWJsZShRTmFtZSwgQW55VHlwZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InJlc29sdmVfdXJpKFN0cmluZykiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0X3ZhcmlhYmxlKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRWYXJpYWJsZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0X3ZhcmlhYmxlKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJzZXRfdmFyaWFibGUoUU5hbWUsIEFueVR5cGUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InR6KCkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZXZhbHVhdGVfZnVuY3Rpb24oUU5hbWUsIENvbGxlY3Rpb24pIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im5vZGVfcG9zaXRpb24oTm9kZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0X2RvYyhTdHJpbmcpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0NvbnRleHQuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJkZXJpdmVzX2Zyb20oTm9kZVR5cGUsIFhTVHlwZURlZmluaXRpb24pIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZGVsX3ZhcmlhYmxlKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InZhcmlhYmxlX2luX3Njb3BlKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im1ha2VfYXRvbWljKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb24oUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZWxlbWVudF9kZWNsYXJlZChRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRfY29sbGVjdGlvbnMoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InNldF9jb2xsZWN0aW9ucyhNYXApIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZXhwYW5kX2VsZW1fdHlwZV9xbmFtZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJzZXRfY29sbGVjdGlvbnMoTWFwJmx0O1N0cmluZyxMaXN0Jmx0O0RvY3VtZW50Jmd0OyZndDspIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZGVyaXZlc19mcm9tKE5vZGVUeXBlLCBRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJzZXRfYmFzZV91cmkoU3RyaW5nKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InZhcmlhYmxlX2V4aXN0cyhRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJhZGRfdmFyaWFibGUoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0idHlwZV9kZWZpbmVkKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImF0dHJpYnV0ZV9kZWNsYXJlZChRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJlbGVtZW50X3R5cGVfZGVmaW5pdGlvbihRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJzZXRfY29sbGVjdGlvbnMoTWFwJmx0O1N0cmluZyxMaXN0Jmd0OykiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJleHBhbmRfcW5hbWUoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZXhwYW5kX2Z1bmN0aW9uX3FuYW1lKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImZ1bmN0aW9uX2V4aXN0cyhRTmFtZSwgaW50KSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InZhcmlhYmxlX2V4aXN0cyhRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJkZWxfdmFyaWFibGUoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZXhwYW5kX2VsZW1fdHlwZV9xbmFtZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJhZGRfdmFyaWFibGUoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZnVuY3Rpb25fZXhpc3RzKFFOYW1lLCBpbnQpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZWxlbWVudF90eXBlX2RlZmluaXRpb24oUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZWxlbWVudF9kZWNsYXJlZChRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJleHBhbmRfcW5hbWUoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ibWFrZV9hdG9taWMoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZXhwYW5kX2Z1bmN0aW9uX3FuYW1lKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InZhcmlhYmxlX2luX3Njb3BlKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb24oUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iYXR0cmlidXRlX2RlY2xhcmVkKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImRlcml2ZXNfZnJvbShOb2RlVHlwZSwgWFNUeXBlRGVmaW5pdGlvbikiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJkZXJpdmVzX2Zyb20oTm9kZVR5cGUsIFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InR5cGVfZGVmaW5lZChRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI2NDM4NDYxNjEiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJRTmFtZSIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJTdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImRlbF92YXJpYWJsZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI2NDM4NDYxNjEiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJRTmFtZSIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJTdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InR5cGVfZGVmaW5lZChRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSIxMjExMTA1Mjg0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ic2V0X2NvbGxlY3Rpb25zKE1hcCkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSIxMjExMTA1Mjg0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZXhwYW5kX3FuYW1lKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjEyMTExMDUyODQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJlbGVtZW50X3R5cGVfZGVmaW5pdGlvbihRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvZnVuY3Rpb24vRm5GdW5jdGlvbkxpYnJhcnkuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLkZuRnVuY3Rpb25MaWJyYXJ5Ij4KLSAgICAgICAgPGZpbHRlciBpZD0iMzg4MTk0Mzg4Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLkZuRnVuY3Rpb25MaWJyYXJ5Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IlhQQVRIX0ZVTkNUSU9OU19OUyIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzEwL3hwYXRoLWZ1bmN0aW9ucyIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLTwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGE2OGNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLSNUdWUgRmViIDEwIDA1OjM0OjUxIEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5jb21wYXJpbmdJZGVudGljYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZWFkQ29kZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzE3MmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcgotQnVuZGxlLVZlcnNpb246IDEuMS4wMDEucXVhbGlmaWVyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLnhlcmNlcztidW5kbGUtdmVyc2lvbj0iWzIuOS4wLDMuMC4wKSIsCi0gamF2YV9jdXAucnVudGltZTtidW5kbGUtdmVyc2lvbj0iMC4xMC4wIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDUuMC4wKSI7cmVzb2x1dGlvbjo9b3B0aW9uYWwKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aDJQbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24sCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy51c2VyZGVmaW5lZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczt4LWludGVybmFsOj10cnVlCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL1hQYXRoQ3VwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9YUGF0aEN1cC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTQ2ZGZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL1hQYXRoQ3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NDQzICswLDAgQEAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIGdlbmVyYXRlZCBieSBDVVAgdjAuMTBrCi0vLyBNb24gRGVjIDE0IDAyOjAyOjIyIENFVCAyMDA5Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqIENVUCB2MC4xMGsgZ2VuZXJhdGVkIHBhcnNlci4KLSAgKiBAdmVyc2lvbiBNb24gRGVjIDE0IDAyOjAyOjIyIENFVCAyMDA5Ci0gICovCi1wdWJsaWMgY2xhc3MgWFBhdGhDdXAgZXh0ZW5kcyBqYXZhX2N1cC5ydW50aW1lLmxyX3BhcnNlciB7Ci0KLSAgLyoqIERlZmF1bHQgY29uc3RydWN0b3IuICovCi0gIHB1YmxpYyBYUGF0aEN1cCgpIHtzdXBlcigpO30KLQotICAvKiogQ29uc3RydWN0b3Igd2hpY2ggc2V0cyB0aGUgZGVmYXVsdCBzY2FubmVyLiAqLwotICBwdWJsaWMgWFBhdGhDdXAoamF2YV9jdXAucnVudGltZS5TY2FubmVyIHMpIHtzdXBlcihzKTt9Ci0KLSAgLyoqIFByb2R1Y3Rpb24gdGFibGUuICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgc2hvcnQgX3Byb2R1Y3Rpb25fdGFibGVbXVtdID0gCi0gICAgdW5wYWNrRnJvbVN0cmluZ3MobmV3IFN0cmluZ1tdIHsKLSAgICAiXDAwMFx1MDEwZlwwMDBcMDAyXDExNFwwMDNcMDAwXDAwMlwwMDJcMDA0XDAwMFwwMDJcMDMzIiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMzNcMDA1XDAwMFwwMDJcMDYxXDAwM1wwMDBcMDAyXDA2MVwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDYxXDAwM1wwMDBcMDAyXDA2MVwwMDNcMDAwXDAwMlwxMTVcMDA1XDAwMCIgKwotICAgICJcMDAyXDAzNlwwMDdcMDAwXDAwMlwwMzZcMDEwXDAwMFwwMDJcMTE2XDAwN1wwMDBcMDAyIiArCi0gICAgIlwxMTZcMDA3XDAwMFwwMDJcMDM1XDAwNVwwMDBcMDAyXDAzNVwwMTBcMDAwXDAwMlwxMTciICsKLSAgICAiXDAxMlwwMDBcMDAyXDA2NlwwMDNcMDAwXDAwMlwwNjZcMDA1XDAwMFwwMDJcMDY1XDAwMyIgKwotICAgICJcMDAwXDAwMlwwNjVcMDA1XDAwMFwwMDJcMDcwXDAwM1wwMDBcMDAyXDA3MFwwMDVcMDAwIiArCi0gICAgIlwwMDJcMDcwXDAwNVwwMDBcMDAyXDA3MFwwMDVcMDAwXDAwMlwwNjdcMDAzXDAwMFwwMDIiICsKLSAgICAiXDA2N1wwMDVcMDAwXDAwMlwwNjJcMDAzXDAwMFwwMDJcMDYyXDAwNVwwMDBcMDAyXDA2MiIgKwotICAgICJcMDA1XDAwMFwwMDJcMDU3XDAwM1wwMDBcMDAyXDA1N1wwMDVcMDAwXDAwMlwwNTdcMDA1IiArCi0gICAgIlwwMDBcMDAyXDA1N1wwMDVcMDAwXDAwMlwwNTdcMDA1XDAwMFwwMDJcMDU2XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwNTZcMDA1XDAwMFwwMDJcMDU2XDAwNVwwMDBcMDAyXDA2MFwwMDNcMDAwXDAwMiIgKwotICAgICJcMDYwXDAwNVwwMDBcMDAyXDA2MFwwMDVcMDAwXDAwMlwwNTRcMDAzXDAwMFwwMDJcMDU0IiArCi0gICAgIlwwMDZcMDAwXDAwMlwwNTJcMDAzXDAwMFwwMDJcMDUyXDAwNlwwMDBcMDAyXDA1M1wwMDMiICsKLSAgICAiXDAwMFwwMDJcMDUzXDAwNlwwMDBcMDAyXDA1NVwwMDNcMDAwXDAwMlwwNTVcMDA2XDAwMCIgKwotICAgICJcMDAyXDA0N1wwMDNcMDAwXDAwMlwwNDdcMDA0XDAwMFwwMDJcMDQ3XDAwNFwwMDBcMDAyIiArCi0gICAgIlwxMjFcMDAzXDAwMFwwMDJcMDYzXDAwM1wwMDBcMDAyXDA2M1wwMDNcMDAwXDAwMlwwNjMiICsKLSAgICAiXDAwM1wwMDBcMDAyXDA2M1wwMDNcMDAwXDAwMlwwNjNcMDAzXDAwMFwwMDJcMDYzXDAwMyIgKwotICAgICJcMDAwXDAwMlwwNjRcMDAzXDAwMFwwMDJcMDY0XDAwM1wwMDBcMDAyXDA2NFwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDY0XDAwM1wwMDBcMDAyXDA2NFwwMDNcMDAwXDAwMlwwNjRcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAyN1wwMDNcMDAwXDAwMlwwMjdcMDAzXDAwMFwwMDJcMDI3XDAwM1wwMDBcMDAyXDEyMCIgKwotICAgICJcMDAzXDAwMFwwMDJcMTIwXDAwNFwwMDBcMDAyXDEyMFwwMDRcMDAwXDAwMlwxMjBcMDAzIiArCi0gICAgIlwwMDBcMDAyXDA0NlwwMDNcMDAwXDAwMlwwNDZcMDA1XDAwMFwwMDJcMDQ2XDAwNVwwMDAiICsKLSAgICAiXDAwMlwwNDVcMDAzXDAwMFwwMDJcMDQ1XDAwM1wwMDBcMDAyXDEyMlwwMDRcMDAwXDAwMiIgKwotICAgICJcMTIyXDAwNFwwMDBcMDAyXDA0M1wwMDRcMDAwXDAwMlwwNDNcMDAzXDAwMFwwMDJcMDI2IiArCi0gICAgIlwwMDRcMDAwXDAwMlwwMjZcMDA0XDAwMFwwMDJcMDI2XDAwNFwwMDBcMDAyXDAyNlwwMDQiICsKLSAgICAiXDAwMFwwMDJcMDI2XDAwNFwwMDBcMDAyXDAyNlwwMDRcMDAwXDAwMlwwMjZcMDA0XDAwMCIgKwotICAgICJcMDAyXDAyNlwwMDRcMDAwXDAwMlwwNDRcMDA0XDAwMFwwMDJcMDQ0XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwNDFcMDA0XDAwMFwwMDJcMDQxXDAwM1wwMDBcMDAyXDAyNVwwMDRcMDAwXDAwMlwwMjUiICsKLSAgICAiXDAwNFwwMDBcMDAyXDAyNVwwMDRcMDAwXDAwMlwwMjVcMDA0XDAwMFwwMDJcMDI1XDAwNCIgKwotICAgICJcMDAwXDAwMlwwNDJcMDAzXDAwMFwwMDJcMDQwXDAwM1wwMDBcMDAyXDA0MFwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDcxXDAwM1wwMDBcMDAyXDA3MVwwMDNcMDAwXDAwMlwwMjNcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAyM1wwMDVcMDAwXDAwMlwxMjNcMDA0XDAwMFwwMDJcMDM0XDAwNFwwMDBcMDAyXDAzNCIgKwotICAgICJcMDAyXDAwMFwwMDJcMTI0XDAwNVwwMDBcMDAyXDAzN1wwMDNcMDAwXDAwMlwwMzdcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAzN1wwMDNcMDAwXDAwMlwwMzdcMDAzXDAwMFwwMDJcMDM3XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwNzNcMDAzXDAwMFwwMDJcMDczXDAwM1wwMDBcMDAyXDA3N1wwMDNcMDAwXDAwMiIgKwotICAgICJcMDc3XDAwM1wwMDBcMDAyXDA3N1wwMDNcMDAwXDAwMlwwNzRcMDA0XDAwMFwwMDJcMDMyIiArCi0gICAgIlwwMDRcMDAwXDAwMlwwMzJcMDA1XDAwMFwwMDJcMDc1XDAwM1wwMDBcMDAyXDA3NlwwMDUiICsKLSAgICAiXDAwMFwwMDJcMDc2XDAwNlwwMDBcMDAyXDAzMVwwMDNcMDAwXDAwMlwwMzFcMDA1XDAwMCIgKwotICAgICJcMDAyXDA1MFwwMDNcMDAwXDAwMlwwNTBcMDA0XDAwMFwwMDJcMDUxXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwNTFcMDA0XDAwMFwwMDJcMDUxXDAwNVwwMDBcMDAyXDAyNFwwMDNcMDAwXDAwMlwwMjQiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAyNFwwMDNcMDAwXDAwMlwwMzBcMDAzXDAwMFwwMDJcMDMwXDAwMyIgKwotICAgICJcMDAwXDAwMlwwMzBcMDA1XDAwMFwwMDJcMDIwXDAwM1wwMDBcMDAyXDA3MlwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDcyXDAwM1wwMDBcMDAyXDA3MlwwMDNcMDAwXDAwMlwwNzJcMDAzXDAwMFwwMDIiICsKLSAgICAiXDA3MlwwMDNcMDAwXDAwMlwwNzJcMDAzXDAwMFwwMDJcMDcyXDAwM1wwMDBcMDAyXDA3MiIgKwotICAgICJcMDAzXDAwMFwwMDJcMDcyXDAwM1wwMDBcMDAyXDExMFwwMDVcMDAwXDAwMlwxMDNcMDA1IiArCi0gICAgIlwwMDBcMDAyXDEwM1wwMDZcMDAwXDAwMlwxMDNcMDA2XDAwMFwwMDJcMTA0XDAwNVwwMDAiICsKLSAgICAiXDAwMlwxMDVcMDA1XDAwMFwwMDJcMTA2XDAwNVwwMDBcMDAyXDEwNlwwMDZcMDAwXDAwMiIgKwotICAgICJcMTA2XDAwNlwwMDBcMDAyXDEwN1wwMDVcMDAwXDAwMlwxMDdcMDA2XDAwMFwwMDJcMTA3IiArCi0gICAgIlwwMTBcMDAwXDAwMlwwMTZcMDAzXDAwMFwwMDJcMDE2XDAwM1wwMDBcMDAyXDExMlwwMDYiICsKLSAgICAiXDAwMFwwMDJcMDE1XDAwM1wwMDBcMDAyXDExMVwwMDVcMDAwXDAwMlwxMTFcMDA2XDAwMCIgKwotICAgICJcMDAyXDExMVwwMTBcMDAwXDAwMlwxMTFcMDExXDAwMFwwMDJcMDEyXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMTJcMDAzXDAwMFwwMDJcMTEzXDAwNlwwMDBcMDAyXDAxMVwwMDNcMDAwXDAwMlwwMTciICsKLSAgICAiXDAwM1wwMDBcMDAyXDAxNFwwMDNcMDAwXDAwMlwwMTNcMDAzXDAwMFwwMDJcMTAxXDAwMyIgKwotICAgICJcMDAwXDAwMlwxMDBcMDAzXDAwMFwwMDJcMTAyXDAwM1wwMDBcMDAyXDAxMFwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDIyXDAwM1wwMDBcMDAyXDAyMVwwMDNcMDAwXDAwMlwwMjFcMDA1XDAwMFwwMDIiICsKLSAgICAiXDAwM1wwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA3XDAwM1wwMDBcMDAyXDAwNSIgKwotICAgICJcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMiIgKwotICAgICJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1IiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDUiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNSIgKwotICAgICJcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMiIgKwotICAgICJcMDA1XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2IiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDYiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNiIgKwotICAgICJcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDAiICsKLSAgICAiXDAwMlwxMjVcMDAyXDAwMFwwMDJcMDA2XDAwNSIgfSk7Ci0KLSAgLyoqIEFjY2VzcyB0byBwcm9kdWN0aW9uIHRhYmxlLiAqLwotICBwdWJsaWMgc2hvcnRbXVtdIHByb2R1Y3Rpb25fdGFibGUoKSB7cmV0dXJuIF9wcm9kdWN0aW9uX3RhYmxlO30KLQotICAvKiogUGFyc2UtYWN0aW9uIHRhYmxlLiAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0W11bXSBfYWN0aW9uX3RhYmxlID0gCi0gICAgdW5wYWNrRnJvbVN0cmluZ3MobmV3IFN0cmluZ1tdIHsKLSAgICAiXDAwMFx1MDE5MlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0IiArCi0gICAgIlwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDAiICsKLSAgICAiXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NSIgKwotICAgICJcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExIiArCi0gICAgIlwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzAiICsKLSAgICAiXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwxMDZcMDc3XDE0MiIgKwotICAgICJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDE1N1wxMDRcMDQ2XDEwNVwxNDdcMTA2IiArCi0gICAgIlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjQiICsKLSAgICAiXDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyMyIgKwotICAgICJcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjEyXDAwNFx1ZmYxMlwwMDVcdWZmMTJcMDA2XHVmZjEyXDAwNyIgKwotICAgICJcdWZmMTJcMDEwXHVmZjEyXDAxMVx1ZmYxMlwwMTJcdWZmMTJcMDEzXHVmZjEyXDAxNFx1ZmYxMlwwMTVcdWZmMTIiICsKLSAgICAiXDAxNlx1ZmYxMlwwMTdcdWZmMTJcMDIwXHVmZjEyXDAyMVx1ZmYxMlwwMjJcdWZmMTJcMDIzXHVmZjEyXDAyNCIgKwotICAgICJcdWZmMTJcMDI1XHVmZjEyXDAyNlx1MDE5NFwwMzFcdWZmNDNcMDMyXHVmZjEyXDA1M1x1ZmYxMlwwNTRcdWZmMTIiICsKLSAgICAiXDA1NVx1ZmYxMlwwNTZcdWZmMTJcMDU3XHVmZjEyXDA2MFx1ZmYxMlwwNjFcdWZmMTJcMDYyXHVmZjEyXDA2MyIgKwotICAgICJcdWZmMTJcMDY0XHVmZjEyXDA2NVx1ZmYxMlwwNjZcdWZmMTJcMDY3XHVmZjEyXDA3MVx1ZmYxMlwwNzNcdWZmMTIiICsKLSAgICAiXDA3NFx1ZmYxMlwwNzVcdWZmMTJcMTAwXHVmZjEyXDEwMVx1ZmYxMlwxMDJcdWZmMTJcMTA3XHVmZjEyXDExMCIgKwotICAgICJcdWZmMTJcMTExXHVmZjEyXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOGRcMDA0XHVmZjhkXDAwNVx1ZmY4ZCIgKwotICAgICJcMDA3XHVmZjhkXDAxMFx1ZmY4ZFwwMTFcdWZmOGRcMDEyXHVmZjhkXDAxM1x1ZmY4ZFwwMTRcdWZmOGRcMDE1IiArCi0gICAgIlx1ZmY4ZFwwMTZcdWZmOGRcMDE3XHVmZjhkXDAyMFx1ZmY4ZFwwMjFcdWZmOGRcMDIyXHVmZjhkXDAyM1x1ZmY4ZCIgKwotICAgICJcMDI0XHVmZjhkXDAyNVx1ZmY4ZFwwMzJcdWZmOGRcMDUzXHVmZjhkXDA1NFx1ZmY4ZFwwNTVcdWZmOGRcMDU2IiArCi0gICAgIlx1ZmY4ZFwwNTdcdWZmOGRcMDYwXHVmZjhkXDA2MVx1ZmY4ZFwwNjJcdWZmOGRcMDYzXHVmZjhkXDA2NFx1ZmY4ZCIgKwotICAgICJcMDY1XHVmZjhkXDA2Nlx1ZmY4ZFwwNjdcdWZmOGRcMDcxXHVmZjhkXDA3M1x1ZmY4ZFwwNzRcdWZmOGRcMDc1IiArCi0gICAgIlx1ZmY4ZFwxMDBcdWZmOGRcMTAxXHVmZjhkXDEwMlx1ZmY4ZFwxMDdcdWZmOGRcMTEwXHVmZjhkXDExMVx1ZmY4ZCIgKwotICAgICJcMDAxXDAwMlwwMDBcMTcwXDAwNlwxMDFcMDEyXDEwN1wwMjdcMDcwXDAzMFwxMTdcMDMzIiArCi0gICAgIlwwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDQiICsKLSAgICAiXDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MSIgKwotICAgICJcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1IiArCi0gICAgIlwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzUiICsKLSAgICAiXDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNSIgKwotICAgICJcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyIiArCi0gICAgIlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDEiICsKLSAgICAiXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyNyIgKwotICAgICJcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMjJcMDAyXHVmZmZhXDAwNVx1ZmZmYSIgKwotICAgICJcMDA3XHVmZmZhXDAzMlx1ZmZmYVwxMDBcdWZmZmFcMTAxXHVmZmZhXDEwN1x1ZmZmYVwxMTFcdTAxOTFcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNFwwMDJcdWZmMTBcMDA0XHVmZjEwXDAwNVx1ZmYxMFwwMDZcdWZmMTBcMDA3XHVmZjEwIiArCi0gICAgIlwwMTBcdWZmMTBcMDExXHVmZjEwXDAxMlx1ZmYxMFwwMTNcdWZmMTBcMDE0XHVmZjEwXDAxNVx1ZmYxMFwwMTYiICsKLSAgICAiXHVmZjEwXDAxN1x1ZmYxMFwwMjBcdWZmMTBcMDIxXHVmZjEwXDAyMlx1ZmYxMFwwMjNcdWZmMTBcMDI0XHVmZjEwIiArCi0gICAgIlwwMjVcdWZmMTBcMDI2XHUwMTkwXDAzMVx1ZmY0MVwwMzJcdWZmMTBcMDUzXHVmZjEwXDA1NFx1ZmYxMFwwNTUiICsKLSAgICAiXHVmZjEwXDA1Nlx1ZmYxMFwwNTdcdWZmMTBcMDYwXHVmZjEwXDA2MVx1ZmYxMFwwNjJcdWZmMTBcMDYzXHVmZjEwIiArCi0gICAgIlwwNjRcdWZmMTBcMDY1XHVmZjEwXDA2Nlx1ZmYxMFwwNjdcdWZmMTBcMDcxXHVmZjEwXDA3M1x1ZmYxMFwwNzQiICsKLSAgICAiXHVmZjEwXDA3NVx1ZmYxMFwxMDBcdWZmMTBcMTAxXHVmZjEwXDEwMlx1ZmYxMFwxMDdcdWZmMTBcMTEwXHVmZjEwIiArCi0gICAgIlwxMTFcdWZmMTBcMDAxXDAwMlwwMDBcMTQ2XDAxMlwxMDdcMDM2XDIzMlwwMzdcMjQwXDA0MCIgKwotICAgICJcdTAxMjRcMDQxXDI0MVwwNDJcMjM3XDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDYiICsKLSAgICAiXDA0N1wyNDRcMDUwXDIyNVwwNTFcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2MyIgKwotICAgICJcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzIiArCi0gICAgIlwwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDEiICsKLSAgICAiXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNCIgKwotICAgICJcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2IiArCi0gICAgIlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTMiICsKLSAgICAiXDEzMVwxMjNcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYwZVwwMDRcdWZmMGVcMDA1XHVmZjBlXDAwNiIgKwotICAgICJcdWZmMGVcMDA3XHVmZjBlXDAxMFx1ZmYwZVwwMTFcdWZmMGVcMDEyXHVmZjBlXDAxM1x1ZmYwZVwwMTRcdWZmMGUiICsKLSAgICAiXDAxNVx1ZmYwZVwwMTZcdWZmMGVcMDE3XHVmZjBlXDAyMFx1ZmYwZVwwMjFcdWZmMGVcMDIyXHVmZjBlXDAyMyIgKwotICAgICJcdWZmMGVcMDI0XHVmZjBlXDAyNVx1ZmYwZVwwMjZcdTAxOGVcMDMxXHVmZjNmXDAzMlx1ZmYwZVwwNTNcdWZmMGUiICsKLSAgICAiXDA1NFx1ZmYwZVwwNTVcdWZmMGVcMDU2XHVmZjBlXDA1N1x1ZmYwZVwwNjBcdWZmMGVcMDYxXHVmZjBlXDA2MiIgKwotICAgICJcdWZmMGVcMDYzXHVmZjBlXDA2NFx1ZmYwZVwwNjVcdWZmMGVcMDY2XHVmZjBlXDA2N1x1ZmYwZVwwNzFcdWZmMGUiICsKLSAgICAiXDA3M1x1ZmYwZVwwNzRcdWZmMGVcMDc1XHVmZjBlXDEwMFx1ZmYwZVwxMDFcdWZmMGVcMTAyXHVmZjBlXDEwNyIgKwotICAgICJcdWZmMGVcMTEwXHVmZjBlXDExMVx1ZmYwZVwwMDFcMDAyXDAwMFwwMDRcMDAyXHUwMThkXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMjBcMDAyXHVmZmQzXDAwNVx1ZmZkM1wwMDdcdWZmZDNcMDEwXHVmZmQzXDAxMVx1ZmZkM1wwMTIiICsKLSAgICAiXHVmZmQzXDAxM1x1ZmZkM1wwMTRcdWZmZDNcMDE1XHVmZmQzXDAxNlx1ZmZkM1wwMTdcdWZmZDNcMDIwXHVmZmQzIiArCi0gICAgIlwwMjFcdWZmZDNcMDIyXHVmZmQzXDAyM1x1ZmZkM1wwMzJcdWZmZDNcMDUzXHVmZmQzXDA1NFx1ZmZkM1wwNTUiICsKLSAgICAiXHVmZmQzXDA1Nlx1ZmZkM1wwNTdcdWZmZDNcMDYwXHVmZmQzXDA2MVx1ZmZkM1wwNjJcdWZmZDNcMDYzXHVmZmQzIiArCi0gICAgIlwwNjRcdWZmZDNcMDY1XHVmZmQzXDA2Nlx1ZmZkM1wwNjdcdWZmZDNcMDcxXHVmZmQzXDA3M1x1ZmZkM1wwNzQiICsKLSAgICAiXHUwMThhXDA3NVx1ZmZkM1wxMDBcdWZmZDNcMTAxXHVmZmQzXDEwMlx1ZmZkM1wxMDdcdWZmZDNcMTEwXHVmZmQzIiArCi0gICAgIlwxMTFcdWZmZDNcMDAxXDAwMlwwMDBcMTEyXDAwMlx1ZmZkOVwwMDVcdWZmZDlcMDA3XHVmZmQ5XDAxMCIgKwotICAgICJcdWZmZDlcMDExXHVmZmQ5XDAxMlx1ZmZkOVwwMTNcdWZmZDlcMDE0XHVmZmQ5XDAxNVx1ZmZkOVwwMTZcdWZmZDkiICsKLSAgICAiXDAxN1x1ZmZkOVwwMjBcdWZmZDlcMDIxXHVmZmQ5XDAyMlx1ZmZkOVwwMjNcdWZmZDlcMDMyXHVmZmQ5XDA1MyIgKwotICAgICJcdWZmZDlcMDU0XHVmZmQ5XDA1NVx1ZmZkOVwwNTZcdWZmZDlcMDU3XHVmZmQ5XDA2MFx1ZmZkOVwwNjFcdWZmZDkiICsKLSAgICAiXDA2Mlx1ZmZkOVwwNjNcdWZmZDlcMDY0XHVmZmQ5XDA2NVx1ZmZkOVwwNjZcdWZmZDlcMDY3XHUwMTg3XDA3NSIgKwotICAgICJcdWZmZDlcMTAwXHVmZmQ5XDEwMVx1ZmZkOVwxMDJcdWZmZDlcMTA3XHVmZmQ5XDExMFx1ZmZkOVwxMTFcdWZmZDkiICsKLSAgICAiXDAwMVwwMDJcMDAwXDAwNlwwMDZcdTAxN2ZcMDMxXHVmZjIzXDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZjhjXDAwNFx1ZmY4Y1wwMDVcdWZmOGNcMDA3XHVmZjhjXDAxMFx1ZmY4Y1wwMTFcdWZmOGNcMDEyXHVmZjhjIiArCi0gICAgIlwwMTNcdWZmOGNcMDE0XHVmZjhjXDAxNVx1ZmY4Y1wwMTZcdWZmOGNcMDE3XHVmZjhjXDAyMFx1ZmY4Y1wwMjEiICsKLSAgICAiXHVmZjhjXDAyMlx1ZmY4Y1wwMjNcdWZmOGNcMDI0XHVmZjhjXDAyNVx1ZmY4Y1wwMzJcdWZmOGNcMDUzXHVmZjhjIiArCi0gICAgIlwwNTRcdWZmOGNcMDU1XHVmZjhjXDA1Nlx1ZmY4Y1wwNTdcdWZmOGNcMDYwXHVmZjhjXDA2MVx1ZmY4Y1wwNjIiICsKLSAgICAiXHVmZjhjXDA2M1x1ZmY4Y1wwNjRcdWZmOGNcMDY1XHVmZjhjXDA2Nlx1ZmY4Y1wwNjdcdWZmOGNcMDcxXHVmZjhjIiArCi0gICAgIlwwNzNcdWZmOGNcMDc0XHVmZjhjXDA3NVx1ZmY4Y1wxMDBcdWZmOGNcMTAxXHVmZjhjXDEwMlx1ZmY4Y1wxMDciICsKLSAgICAiXHVmZjhjXDExMFx1ZmY4Y1wxMTFcdWZmOGNcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYwZlwwMDRcdWZmMGYiICsKLSAgICAiXDAwNVx1ZmYwZlwwMDZcdWZmMGZcMDA3XHVmZjBmXDAxMFx1ZmYwZlwwMTFcdWZmMGZcMDEyXHVmZjBmXDAxMyIgKwotICAgICJcdWZmMGZcMDE0XHVmZjBmXDAxNVx1ZmYwZlwwMTZcdWZmMGZcMDE3XHVmZjBmXDAyMFx1ZmYwZlwwMjFcdWZmMGYiICsKLSAgICAiXDAyMlx1ZmYwZlwwMjNcdWZmMGZcMDI0XHVmZjBmXDAyNVx1ZmYwZlwwMjZcdTAxN2VcMDMxXHVmZjQwXDAzMiIgKwotICAgICJcdWZmMGZcMDUzXHVmZjBmXDA1NFx1ZmYwZlwwNTVcdWZmMGZcMDU2XHVmZjBmXDA1N1x1ZmYwZlwwNjBcdWZmMGYiICsKLSAgICAiXDA2MVx1ZmYwZlwwNjJcdWZmMGZcMDYzXHVmZjBmXDA2NFx1ZmYwZlwwNjVcdWZmMGZcMDY2XHVmZjBmXDA2NyIgKwotICAgICJcdWZmMGZcMDcxXHVmZjBmXDA3M1x1ZmYwZlwwNzRcdWZmMGZcMDc1XHVmZjBmXDEwMFx1ZmYwZlwxMDFcdWZmMGYiICsKLSAgICAiXDEwMlx1ZmYwZlwxMDdcdWZmMGZcMTEwXHVmZjBmXDExMVx1ZmYwZlwwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmY5MVwwMDRcdWZmOTFcMDA1XHVmZjkxXDAwN1x1ZmY5MVwwMTBcdWZmOTFcMDExXHVmZjkxXDAxMlx1ZmY5MSIgKwotICAgICJcMDEzXHVmZjkxXDAxNFx1ZmY5MVwwMTVcdWZmOTFcMDE2XHVmZjkxXDAxN1x1ZmY5MVwwMjBcdWZmOTFcMDIxIiArCi0gICAgIlx1ZmY5MVwwMjJcdWZmOTFcMDIzXHVmZjkxXDAyNFx1ZmY5MVwwMjVcdWZmOTFcMDMyXHVmZjkxXDA1M1x1ZmY5MSIgKwotICAgICJcMDU0XHVmZjkxXDA1NVx1ZmY5MVwwNTZcdWZmOTFcMDU3XHVmZjkxXDA2MFx1ZmY5MVwwNjFcdWZmOTFcMDYyIiArCi0gICAgIlx1ZmY5MVwwNjNcdWZmOTFcMDY0XHVmZjkxXDA2NVx1ZmY5MVwwNjZcdWZmOTFcMDY3XHVmZjkxXDA3MVx1ZmY5MSIgKwotICAgICJcMDczXHVmZjkxXDA3NFx1ZmY5MVwwNzVcdWZmOTFcMTAwXHVmZjkxXDEwMVx1ZmY5MVwxMDJcdWZmOTFcMTA3IiArCi0gICAgIlx1ZmY5MVwxMTBcdWZmOTFcMTExXHVmZjkxXDAwMVwwMDJcMDAwXDI0MlwwMDJcdWZmYmVcMDA1XHVmZmJlIiArCi0gICAgIlwwMDZcMTAxXDAwN1x1ZmZiZVwwMTBcdWZmYmVcMDExXHVmZmJlXDAxMlwxMDdcMDEzXHVmZmJlXDAxNCIgKwotICAgICJcdWZmYmVcMDE1XHVmZmJlXDAxNlx1ZmZiZVwwMTdcdWZmYmVcMDIwXHVmZmJlXDAyMVx1ZmZiZVwwMjJcdWZmYmUiICsKLSAgICAiXDAyM1x1ZmZiZVwwMjdcMDcwXDAzMFwxMTdcMDMyXHVmZmJlXDAzM1wwNzFcMDM0XDEyMFwwMzYiICsKLSAgICAiXDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMCIgKwotICAgICJcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDUzIiArCi0gICAgIlx1ZmZiZVwwNTRcdWZmYmVcMDU1XHVmZmJlXDA1Nlx1ZmZiZVwwNTdcdWZmYmVcMDYwXHVmZmJlXDA2MVwxMTEiICsKLSAgICAiXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MCIgKwotICAgICJcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzdcMTQyIiArCi0gICAgIlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNFwxMDYiICsKLSAgICAiXDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNCIgKwotICAgICJcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzIiArCi0gICAgIlwwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjMiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMDRcMDA0XHVmZjA0XDAwNVx1ZmYwNFwwMDZcdWZmMDRcMDA3IiArCi0gICAgIlx1ZmYwNFwwMTBcdWZmMDRcMDExXHVmZjA0XDAxMlx1ZmYwNFwwMTNcdWZmMDRcMDE0XHVmZjA0XDAxNVx1ZmYwNCIgKwotICAgICJcMDE2XHVmZjA0XDAxN1x1ZmYwNFwwMjBcdWZmMDRcMDIxXHVmZjA0XDAyMlx1ZmYwNFwwMjNcdWZmMDRcMDI0IiArCi0gICAgIlx1ZmYwNFwwMjVcdWZmMDRcMDMxXHVmZjM1XDAzMlx1ZmYwNFwwMzVcdWZmMDRcMDUzXHVmZjA0XDA1NFx1ZmYwNCIgKwotICAgICJcMDU1XHVmZjA0XDA1Nlx1ZmYwNFwwNTdcdWZmMDRcMDYwXHVmZjA0XDA2MVx1ZmYwNFwwNjJcdWZmMDRcMDYzIiArCi0gICAgIlx1ZmYwNFwwNjRcdWZmMDRcMDY1XHVmZjA0XDA2Nlx1ZmYwNFwwNjdcdWZmMDRcMDcxXHVmZjA0XDA3M1x1ZmYwNCIgKwotICAgICJcMDc0XHVmZjA0XDA3NVx1ZmYwNFwwNzdcdWZmMDRcMTAwXHVmZjA0XDEwMVx1ZmYwNFwxMDJcdWZmMDRcMTA3IiArCi0gICAgIlx1ZmYwNFwxMTBcdWZmMDRcMTExXHVmZjA0XDAwMVwwMDJcMDAwXDAwNlwwMDZcdTAxN2JcMDMxXHVmZjFmIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjc3XDAwNFx1ZmY3N1wwMDVcdWZmNzdcMDA3XHVmZjc3XDAxMCIgKwotICAgICJcdWZmNzdcMDExXHVmZjc3XDAxMlx1ZmY3N1wwMTNcdWZmNzdcMDE0XHVmZjc3XDAxNVx1ZmY3N1wwMTZcdWZmNzciICsKLSAgICAiXDAxN1x1ZmY3N1wwMjBcdWZmNzdcMDIxXHVmZjc3XDAyMlx1ZmY3N1wwMjNcdWZmNzdcMDI0XHVmZjc3XDAyNSIgKwotICAgICJcdWZmNzdcMDMyXHVmZjc3XDAzNVx1ZmY3N1wwNTNcdWZmNzdcMDU0XHVmZjc3XDA1NVx1ZmY3N1wwNTZcdWZmNzciICsKLSAgICAiXDA1N1x1ZmY3N1wwNjBcdWZmNzdcMDYxXHVmZjc3XDA2Mlx1ZmY3N1wwNjNcdWZmNzdcMDY0XHVmZjc3XDA2NSIgKwotICAgICJcdWZmNzdcMDY2XHVmZjc3XDA2N1x1ZmY3N1wwNzFcdWZmNzdcMDczXHVmZjc3XDA3NFx1ZmY3N1wwNzVcdWZmNzciICsKLSAgICAiXDEwMFx1ZmY3N1wxMDFcdWZmNzdcMTAyXHVmZjc3XDEwN1x1ZmY3N1wxMTBcdWZmNzdcMTExXHVmZjc3XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzBcMDAyXHVmZjcxXDAwNFx1ZmY3MVwwMDVcdWZmNzFcMDA3XHVmZjcxXDAxMFx1ZmY3MSIgKwotICAgICJcMDExXHVmZjcxXDAxMlx1ZmY3MVwwMTNcdWZmNzFcMDE0XHVmZjcxXDAxNVx1ZmY3MVwwMTZcdWZmNzFcMDE3IiArCi0gICAgIlx1ZmY3MVwwMjBcdWZmNzFcMDIxXHVmZjcxXDAyMlx1ZmY3MVwwMjNcdWZmNzFcMDI0XHVmZjcxXDAyNVx1ZmY3MSIgKwotICAgICJcMDMyXHVmZjcxXDAzNVx1ZmY3MVwwNTNcdWZmNzFcMDU0XHVmZjcxXDA1NVx1ZmY3MVwwNTZcdWZmNzFcMDU3IiArCi0gICAgIlx1ZmY3MVwwNjBcdWZmNzFcMDYxXHVmZjcxXDA2Mlx1ZmY3MVwwNjNcdWZmNzFcMDY0XHVmZjcxXDA2NVx1ZmY3MSIgKwotICAgICJcMDY2XHVmZjcxXDA2N1x1ZmY3MVwwNzFcdWZmNzFcMDczXHVmZjcxXDA3NFx1ZmY3MVwwNzVcdWZmNzFcMTAwIiArCi0gICAgIlx1ZmY3MVwxMDFcdWZmNzFcMTAyXHVmZjcxXDEwN1x1ZmY3MVwxMTBcdWZmNzFcMTExXHVmZjcxXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwNzBcMDAyXHVmZmU5XDAwNVx1ZmZlOVwwMDdcdWZmZTlcMDEwXHUwMTc2XDAxMVx1MDE3N1wwMTQiICsKLSAgICAiXHVmZmU5XDAxNVx1ZmZlOVwwMTZcdWZmZTlcMDE3XHVmZmU5XDAyMFx1ZmZlOVwwMjFcdWZmZTlcMDIyXHVmZmU5IiArCi0gICAgIlwwMjNcdWZmZTlcMDMyXHVmZmU5XDA1M1x1ZmZlOVwwNTRcdWZmZTlcMDU1XHVmZmU5XDA1Nlx1ZmZlOVwwNTciICsKLSAgICAiXHVmZmU5XDA2MFx1ZmZlOVwwNzVcdWZmZTlcMTAwXHVmZmU5XDEwMVx1ZmZlOVwxMDJcdTAxNzVcMTA3XHVmZmU5IiArCi0gICAgIlwxMTBcdWZmZTlcMTExXHVmZmU5XDAwMVwwMDJcMDAwXDEyNFwwMDJcdWZmYjdcMDA1XHVmZmI3XDAwNyIgKwotICAgICJcdWZmYjdcMDEwXHVmZmI3XDAxMVx1ZmZiN1wwMTJcdWZmYjdcMDEzXHVmZmI3XDAxNFx1ZmZiN1wwMTVcdWZmYjciICsKLSAgICAiXDAxNlx1ZmZiN1wwMTdcdWZmYjdcMDIwXHVmZmI3XDAyMVx1ZmZiN1wwMjJcdWZmYjdcMDIzXHVmZmI3XDAyNCIgKwotICAgICJcdWZmYjdcMDI1XHVmZmI3XDAzMlx1ZmZiN1wwNTNcdWZmYjdcMDU0XHVmZmI3XDA1NVx1ZmZiN1wwNTZcdWZmYjciICsKLSAgICAiXDA1N1x1ZmZiN1wwNjBcdWZmYjdcMDYxXHVmZmI3XDA2Mlx1ZmZiN1wwNjNcdWZmYjdcMDY0XHVmZmI3XDA2NSIgKwotICAgICJcdWZmYjdcMDY2XHVmZmI3XDA2N1x1ZmZiN1wwNzFcdWZmYjdcMDczXHVmZmI3XDA3NFx1ZmZiN1wwNzVcdWZmYjciICsKLSAgICAiXDEwMFx1ZmZiN1wxMDFcdWZmYjdcMTAyXHVmZmI3XDEwN1x1ZmZiN1wxMTBcdWZmYjdcMTExXHVmZmI3XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzRcMDAyXHVmZjBkXDAwNFx1ZmYwZFwwMDVcdWZmMGRcMDA2XHVmZjBkXDAwN1x1ZmYwZCIgKwotICAgICJcMDEwXHVmZjBkXDAxMVx1ZmYwZFwwMTJcdWZmMGRcMDEzXHVmZjBkXDAxNFx1ZmYwZFwwMTVcdWZmMGRcMDE2IiArCi0gICAgIlx1ZmYwZFwwMTdcdWZmMGRcMDIwXHVmZjBkXDAyMVx1ZmYwZFwwMjJcdWZmMGRcMDIzXHVmZjBkXDAyNFx1ZmYwZCIgKwotICAgICJcMDI1XHVmZjBkXDAyNlx1MDE3NFwwMzFcdWZmM2VcMDMyXHVmZjBkXDA1M1x1ZmYwZFwwNTRcdWZmMGRcMDU1IiArCi0gICAgIlx1ZmYwZFwwNTZcdWZmMGRcMDU3XHVmZjBkXDA2MFx1ZmYwZFwwNjFcdWZmMGRcMDYyXHVmZjBkXDA2M1x1ZmYwZCIgKwotICAgICJcMDY0XHVmZjBkXDA2NVx1ZmYwZFwwNjZcdWZmMGRcMDY3XHVmZjBkXDA3MVx1ZmYwZFwwNzNcdWZmMGRcMDc0IiArCi0gICAgIlx1ZmYwZFwwNzVcdWZmMGRcMTAwXHVmZjBkXDEwMVx1ZmYwZFwxMDJcdWZmMGRcMTA3XHVmZjBkXDExMFx1ZmYwZCIgKwotICAgICJcMTExXHVmZjBkXDAwMVwwMDJcMDAwXDE0NlwwMTJcMTA3XDAzNlwyMzJcMDM3XDI0MFwwNDAiICsKLSAgICAiXHUwMTI0XDA0MVwyNDFcMDQyXDIzN1wwNDNcMjM2XDA0NFwyNTBcMDQ1XDIyNlwwNDZcMjQ2IiArCi0gICAgIlwwNDdcMjQ0XDA1MFwyMjVcMDUxXDI0MlwwNTJcMjQzXDA2MVwxMTFcMDYyXDA3N1wwNjMiICsKLSAgICAiXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyMyIgKwotICAgICJcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxIiArCi0gICAgIlwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTQiICsKLSAgICAiXDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNiIgKwotICAgICJcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzIiArCi0gICAgIlwxMzFcMTIzXDAwMVwwMDJcMDAwXDExNlwwMDJcdWZmZDVcMDA1XHVmZmQ1XDAwN1x1ZmZkNVwwMTAiICsKLSAgICAiXHVmZmQ1XDAxMVx1ZmZkNVwwMTJcdWZmZDVcMDEzXHVmZmQ1XDAxNFx1ZmZkNVwwMTVcdWZmZDVcMDE2XHVmZmQ1IiArCi0gICAgIlwwMTdcdWZmZDVcMDIwXHVmZmQ1XDAyMVx1ZmZkNVwwMjJcdWZmZDVcMDIzXHVmZmQ1XDAzMlx1ZmZkNVwwNTMiICsKLSAgICAiXHVmZmQ1XDA1NFx1ZmZkNVwwNTVcdWZmZDVcMDU2XHVmZmQ1XDA1N1x1ZmZkNVwwNjBcdWZmZDVcMDYxXHVmZmQ1IiArCi0gICAgIlwwNjJcdWZmZDVcMDYzXHVmZmQ1XDA2NFx1ZmZkNVwwNjVcdWZmZDVcMDY2XHVmZmQ1XDA2N1x1ZmZkNVwwNzEiICsKLSAgICAiXHVmZmQ1XDA3M1x1MDE2ZVwwNzVcdWZmZDVcMTAwXHVmZmQ1XDEwMVx1ZmZkNVwxMDJcdWZmZDVcMTA3XHVmZmQ1IiArCi0gICAgIlwxMTBcdWZmZDVcMTExXHVmZmQ1XDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmNTNcMDA0XHVmZjUzXDAwNSIgKwotICAgICJcdWZmNTNcMDA3XHVmZjUzXDAxMFx1ZmY1M1wwMTFcdWZmNTNcMDEyXHVmZjUzXDAxM1x1ZmY1M1wwMTRcdWZmNTMiICsKLSAgICAiXDAxNVx1ZmY1M1wwMTZcdWZmNTNcMDE3XHVmZjUzXDAyMFx1ZmY1M1wwMjFcdWZmNTNcMDIyXHVmZjUzXDAyMyIgKwotICAgICJcdWZmNTNcMDI0XHVmZjUzXDAyNVx1ZmY1M1wwMzJcdWZmNTNcMDUzXHVmZjUzXDA1NFx1ZmY1M1wwNTVcdWZmNTMiICsKLSAgICAiXDA1Nlx1ZmY1M1wwNTdcdWZmNTNcMDYwXHVmZjUzXDA2MVx1ZmY1M1wwNjJcdWZmNTNcMDYzXHVmZjUzXDA2NCIgKwotICAgICJcdWZmNTNcMDY1XHVmZjUzXDA2Nlx1ZmY1M1wwNjdcdWZmNTNcMDcxXHVmZjUzXDA3M1x1ZmY1M1wwNzRcdWZmNTMiICsKLSAgICAiXDA3NVx1ZmY1M1wxMDBcdWZmNTNcMTAxXHVmZjUzXDEwMlx1ZmY1M1wxMDdcdWZmNTNcMTEwXHVmZjUzXDExMSIgKwotICAgICJcdWZmNTNcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY1MVwwMDRcdWZmNTFcMDA1XHVmZjUxXDAwN1x1ZmY1MSIgKwotICAgICJcMDEwXHVmZjUxXDAxMVx1ZmY1MVwwMTJcdWZmNTFcMDEzXHVmZjUxXDAxNFx1ZmY1MVwwMTVcdWZmNTFcMDE2IiArCi0gICAgIlx1ZmY1MVwwMTdcdWZmNTFcMDIwXHVmZjUxXDAyMVx1ZmY1MVwwMjJcdWZmNTFcMDIzXHVmZjUxXDAyNFx1ZmY1MSIgKwotICAgICJcMDI1XHVmZjUxXDAzMlx1ZmY1MVwwNTNcdWZmNTFcMDU0XHVmZjUxXDA1NVx1ZmY1MVwwNTZcdWZmNTFcMDU3IiArCi0gICAgIlx1ZmY1MVwwNjBcdWZmNTFcMDYxXHVmZjUxXDA2Mlx1ZmY1MVwwNjNcdWZmNTFcMDY0XHVmZjUxXDA2NVx1ZmY1MSIgKwotICAgICJcMDY2XHVmZjUxXDA2N1x1ZmY1MVwwNzFcdWZmNTFcMDczXHVmZjUxXDA3NFx1ZmY1MVwwNzVcdWZmNTFcMTAwIiArCi0gICAgIlx1ZmY1MVwxMDFcdWZmNTFcMTAyXHVmZjUxXDEwN1x1ZmY1MVwxMTBcdWZmNTFcMTExXHVmZjUxXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMjBcMDAyXHVmZmZjXDAwNVx1ZmZmY1wwMDdcdWZmZmNcMDMyXHVmZmZjXDEwMFx1ZmZmY1wxMDEiICsKLSAgICAiXHVmZmZjXDEwN1x1ZmZmY1wwMDFcMDAyXDAwMFwwMDZcMDAyXDAwMVwwMzJcMjE2XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzRcMDAyXHVmZjE1XDAwNFx1ZmYxNVwwMDVcdWZmMTVcMDA2XHVmZjE1XDAwN1x1ZmYxNVwwMTAiICsKLSAgICAiXHVmZjE1XDAxMVx1ZmYxNVwwMTJcdWZmMTVcMDEzXHVmZjE1XDAxNFx1ZmYxNVwwMTVcdWZmMTVcMDE2XHVmZjE1IiArCi0gICAgIlwwMTdcdWZmMTVcMDIwXHVmZjE1XDAyMVx1ZmYxNVwwMjJcdWZmMTVcMDIzXHVmZjE1XDAyNFx1ZmYxNVwwMjUiICsKLSAgICAiXHVmZjE1XDAyNlx1MDE2ZFwwMzFcdWZmNDdcMDMyXHVmZjE1XDA1M1x1ZmYxNVwwNTRcdWZmMTVcMDU1XHVmZjE1IiArCi0gICAgIlwwNTZcdWZmMTVcMDU3XHVmZjE1XDA2MFx1ZmYxNVwwNjFcdWZmMTVcMDYyXHVmZjE1XDA2M1x1ZmYxNVwwNjQiICsKLSAgICAiXHVmZjE1XDA2NVx1ZmYxNVwwNjZcdWZmMTVcMDY3XHVmZjE1XDA3MVx1ZmYxNVwwNzNcdWZmMTVcMDc0XHVmZjE1IiArCi0gICAgIlwwNzVcdWZmMTVcMTAwXHVmZjE1XDEwMVx1ZmYxNVwxMDJcdWZmMTVcMTA3XHVmZjE1XDExMFx1ZmYxNVwxMTEiICsKLSAgICAiXHVmZjE1XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMTFcMDA0XHVmZjExXDAwNVx1ZmYxMVwwMDZcdWZmMTEiICsKLSAgICAiXDAwN1x1ZmYxMVwwMTBcdWZmMTFcMDExXHVmZjExXDAxMlx1ZmYxMVwwMTNcdWZmMTFcMDE0XHVmZjExXDAxNSIgKwotICAgICJcdWZmMTFcMDE2XHVmZjExXDAxN1x1ZmYxMVwwMjBcdWZmMTFcMDIxXHVmZjExXDAyMlx1ZmYxMVwwMjNcdWZmMTEiICsKLSAgICAiXDAyNFx1ZmYxMVwwMjVcdWZmMTFcMDI2XHUwMTZjXDAzMVx1ZmY0MlwwMzJcdWZmMTFcMDUzXHVmZjExXDA1NCIgKwotICAgICJcdWZmMTFcMDU1XHVmZjExXDA1Nlx1ZmYxMVwwNTdcdWZmMTFcMDYwXHVmZjExXDA2MVx1ZmYxMVwwNjJcdWZmMTEiICsKLSAgICAiXDA2M1x1ZmYxMVwwNjRcdWZmMTFcMDY1XHVmZjExXDA2Nlx1ZmYxMVwwNjdcdWZmMTFcMDcxXHVmZjExXDA3MyIgKwotICAgICJcdWZmMTFcMDc0XHVmZjExXDA3NVx1ZmYxMVwxMDBcdWZmMTFcMTAxXHVmZjExXDEwMlx1ZmYxMVwxMDdcdWZmMTEiICsKLSAgICAiXDExMFx1ZmYxMVwxMTFcdWZmMTFcMDAxXDAwMlwwMDBcMDA0XDAzMVx1ZmY0Y1wwMDFcMDAyXDAwMCIgKwotICAgICJcMTEwXDAwMlx1ZmZkY1wwMDVcdWZmZGNcMDA3XHVmZmRjXDAxMFx1ZmZkY1wwMTFcdWZmZGNcMDEyXHVmZmRjIiArCi0gICAgIlwwMTNcdWZmZGNcMDE0XHVmZmRjXDAxNVx1ZmZkY1wwMTZcdWZmZGNcMDE3XHVmZmRjXDAyMFx1ZmZkY1wwMjEiICsKLSAgICAiXHVmZmRjXDAyMlx1ZmZkY1wwMjNcdWZmZGNcMDMyXHVmZmRjXDA1M1x1ZmZkY1wwNTRcdWZmZGNcMDU1XHVmZmRjIiArCi0gICAgIlwwNTZcdWZmZGNcMDU3XHVmZmRjXDA2MFx1ZmZkY1wwNjFcdWZmZGNcMDYyXHVmZmRjXDA2M1x1ZmZkY1wwNjQiICsKLSAgICAiXHVmZmRjXDA2NVx1ZmZkY1wwNjZcdWZmZGNcMDc1XHVmZmRjXDEwMFx1ZmZkY1wxMDFcdWZmZGNcMTAyXHVmZmRjIiArCi0gICAgIlwxMDdcdWZmZGNcMTEwXHVmZmRjXDExMVx1ZmZkY1wwMDFcMDAyXDAwMFwxMDRcMDAyXHVmZmU0XDAwNSIgKwotICAgICJcdWZmZTRcMDA3XHVmZmU0XDAxMFx1ZmZlNFwwMTFcdWZmZTRcMDEyXHVmZmU0XDAxM1x1MDEwN1wwMTRcdWZmZTQiICsKLSAgICAiXDAxNVx1ZmZlNFwwMTZcdWZmZTRcMDE3XHVmZmU0XDAyMFx1ZmZlNFwwMjFcdWZmZTRcMDIyXHVmZmU0XDAyMyIgKwotICAgICJcdWZmZTRcMDMyXHVmZmU0XDA1M1x1ZmZlNFwwNTRcdWZmZTRcMDU1XHVmZmU0XDA1Nlx1ZmZlNFwwNTdcdWZmZTQiICsKLSAgICAiXDA2MFx1ZmZlNFwwNjFcdWZmZTRcMDYyXHVmZmU0XDA2M1x1ZmZlNFwwNjRcdTAxMDZcMDc1XHVmZmU0XDEwMCIgKwotICAgICJcdWZmZTRcMTAxXHVmZmU0XDEwMlx1ZmZlNFwxMDdcdWZmZTRcMTEwXHVmZmU0XDExMVx1ZmZlNFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM0XDAwMlx1ZmYxM1wwMDRcdWZmMTNcMDA1XHVmZjEzXDAwNlx1ZmYxM1wwMDdcdWZmMTNcMDEwIiArCi0gICAgIlx1ZmYxM1wwMTFcdWZmMTNcMDEyXHVmZjEzXDAxM1x1ZmYxM1wwMTRcdWZmMTNcMDE1XHVmZjEzXDAxNlx1ZmYxMyIgKwotICAgICJcMDE3XHVmZjEzXDAyMFx1ZmYxM1wwMjFcdWZmMTNcMDIyXHVmZjEzXDAyM1x1ZmYxM1wwMjRcdWZmMTNcMDI1IiArCi0gICAgIlx1ZmYxM1wwMjZcdTAxNmJcMDMxXHVmZjQ0XDAzMlx1ZmYxM1wwNTNcdWZmMTNcMDU0XHVmZjEzXDA1NVx1ZmYxMyIgKwotICAgICJcMDU2XHVmZjEzXDA1N1x1ZmYxM1wwNjBcdWZmMTNcMDYxXHVmZjEzXDA2Mlx1ZmYxM1wwNjNcdWZmMTNcMDY0IiArCi0gICAgIlx1ZmYxM1wwNjVcdWZmMTNcMDY2XHVmZjEzXDA2N1x1ZmYxM1wwNzFcdWZmMTNcMDczXHVmZjEzXDA3NFx1ZmYxMyIgKwotICAgICJcMDc1XHVmZjEzXDEwMFx1ZmYxM1wxMDFcdWZmMTNcMTAyXHVmZjEzXDEwN1x1ZmYxM1wxMTBcdWZmMTNcMTExIiArCi0gICAgIlx1ZmYxM1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZWZiXDAwNFx1ZmVmYlwwMDVcdWZlZmJcMDA2XHVmZWZiIiArCi0gICAgIlwwMDdcdWZlZmJcMDEwXHVmZWZiXDAxMVx1ZmVmYlwwMTJcdWZlZmJcMDEzXHVmZWZiXDAxNFx1ZmVmYlwwMTUiICsKLSAgICAiXHVmZWZiXDAxNlx1ZmVmYlwwMTdcdWZlZmJcMDIwXHVmZWZiXDAyMVx1ZmVmYlwwMjJcdWZlZmJcMDIzXHVmZWZiIiArCi0gICAgIlwwMjRcdWZlZmJcMDI1XHVmZWZiXDAzMVx1ZmYyY1wwMzJcdWZlZmJcMDMzXHUwMTY3XDA1M1x1ZmVmYlwwNTQiICsKLSAgICAiXHVmZWZiXDA1NVx1ZmVmYlwwNTZcdWZlZmJcMDU3XHVmZWZiXDA2MFx1ZmVmYlwwNjFcdWZlZmJcMDYyXHVmZWZiIiArCi0gICAgIlwwNjNcdWZlZmJcMDY0XHVmZWZiXDA2NVx1ZmVmYlwwNjZcdWZlZmJcMDY3XHVmZWZiXDA3MVx1ZmVmYlwwNzMiICsKLSAgICAiXHVmZWZiXDA3NFx1ZmVmYlwwNzVcdWZlZmJcMTAwXHVmZWZiXDEwMVx1ZmVmYlwxMDJcdWZlZmJcMTA3XHVmZWZiIiArCi0gICAgIlwxMTBcdWZlZmJcMTExXHVmZWZiXDAwMVwwMDJcMDAwXDAwNlwwMDZcdTAxNjVcMDMxXHVmZjFiXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzZcMDAyXHVmZjA2XDAwNFx1ZmYwNlwwMDVcdWZmMDZcMDA2XHVmZjA2XDAwN1x1ZmYwNiIgKwotICAgICJcMDEwXHVmZjA2XDAxMVx1ZmYwNlwwMTJcdWZmMDZcMDEzXHVmZjA2XDAxNFx1ZmYwNlwwMTVcdWZmMDZcMDE2IiArCi0gICAgIlx1ZmYwNlwwMTdcdWZmMDZcMDIwXHVmZjA2XDAyMVx1ZmYwNlwwMjJcdWZmMDZcMDIzXHVmZjA2XDAyNFx1ZmYwNiIgKwotICAgICJcMDI1XHVmZjA2XDAzMVx1ZmYzN1wwMzJcdWZmMDZcMDM1XHVmZjA2XDA1M1x1ZmYwNlwwNTRcdWZmMDZcMDU1IiArCi0gICAgIlx1ZmYwNlwwNTZcdWZmMDZcMDU3XHVmZjA2XDA2MFx1ZmYwNlwwNjFcdWZmMDZcMDYyXHVmZjA2XDA2M1x1ZmYwNiIgKwotICAgICJcMDY0XHVmZjA2XDA2NVx1ZmYwNlwwNjZcdWZmMDZcMDY3XHVmZjA2XDA3MVx1ZmYwNlwwNzNcdWZmMDZcMDc0IiArCi0gICAgIlx1ZmYwNlwwNzVcdWZmMDZcMDc3XHVmZjA2XDEwMFx1ZmYwNlwxMDFcdWZmMDZcMTAyXHVmZjA2XDEwN1x1ZmYwNiIgKwotICAgICJcMTEwXHVmZjA2XDExMVx1ZmYwNlwwMDFcMDAyXDAwMFwwMDZcMDA2XHUwMTVhXDAzMVx1ZmYyMlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM2XDAwMlx1ZmVmYVwwMDRcdWZlZmFcMDA1XHVmZWZhXDAwNlx1ZmVmYVwwMDdcdWZlZmEiICsKLSAgICAiXDAxMFx1ZmVmYVwwMTFcdWZlZmFcMDEyXHVmZWZhXDAxM1x1ZmVmYVwwMTRcdWZlZmFcMDE1XHVmZWZhXDAxNiIgKwotICAgICJcdWZlZmFcMDE3XHVmZWZhXDAyMFx1ZmVmYVwwMjFcdWZlZmFcMDIyXHVmZWZhXDAyM1x1ZmVmYVwwMjRcdWZlZmEiICsKLSAgICAiXDAyNVx1ZmVmYVwwMzFcdWZmMmFcMDMyXHVmZWZhXDAzNVx1ZmVmYVwwNTNcdWZlZmFcMDU0XHVmZWZhXDA1NSIgKwotICAgICJcdWZlZmFcMDU2XHVmZWZhXDA1N1x1ZmVmYVwwNjBcdWZlZmFcMDYxXHVmZWZhXDA2Mlx1ZmVmYVwwNjNcdWZlZmEiICsKLSAgICAiXDA2NFx1ZmVmYVwwNjVcdWZlZmFcMDY2XHVmZWZhXDA2N1x1ZmVmYVwwNzFcdWZlZmFcMDczXHVmZWZhXDA3NCIgKwotICAgICJcdWZlZmFcMDc1XHVmZWZhXDA3N1x1ZmVmYVwxMDBcdWZlZmFcMTAxXHVmZWZhXDEwMlx1ZmVmYVwxMDdcdWZlZmEiICsKLSAgICAiXDExMFx1ZmVmYVwxMTFcdWZlZmFcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5MlwwMDRcdWZmOTJcMDA1IiArCi0gICAgIlx1ZmY5MlwwMDdcdWZmOTJcMDEwXHVmZjkyXDAxMVx1ZmY5MlwwMTJcdWZmOTJcMDEzXHVmZjkyXDAxNFx1ZmY5MiIgKwotICAgICJcMDE1XHVmZjkyXDAxNlx1ZmY5MlwwMTdcdWZmOTJcMDIwXHVmZjkyXDAyMVx1ZmY5MlwwMjJcdWZmOTJcMDIzIiArCi0gICAgIlx1ZmY5MlwwMjRcdWZmOTJcMDI1XHVmZjkyXDAzMlx1ZmY5MlwwNTNcdWZmOTJcMDU0XHVmZjkyXDA1NVx1ZmY5MiIgKwotICAgICJcMDU2XHVmZjkyXDA1N1x1ZmY5MlwwNjBcdWZmOTJcMDYxXHVmZjkyXDA2Mlx1ZmY5MlwwNjNcdWZmOTJcMDY0IiArCi0gICAgIlx1ZmY5MlwwNjVcdWZmOTJcMDY2XHVmZjkyXDA2N1x1ZmY5MlwwNzFcdWZmOTJcMDczXHVmZjkyXDA3NFx1ZmY5MiIgKwotICAgICJcMDc1XHVmZjkyXDEwMFx1ZmY5MlwxMDFcdWZmOTJcMTAyXHVmZjkyXDEwN1x1ZmY5MlwxMTBcdWZmOTJcMTExIiArCi0gICAgIlx1ZmY5MlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjk3XDAwNFx1ZmY5N1wwMDVcdWZmOTdcMDA3XHVmZjk3IiArCi0gICAgIlwwMTBcdWZmOTdcMDExXHVmZjk3XDAxMlx1ZmY5N1wwMTNcdWZmOTdcMDE0XHVmZjk3XDAxNVx1ZmY5N1wwMTYiICsKLSAgICAiXHVmZjk3XDAxN1x1ZmY5N1wwMjBcdWZmOTdcMDIxXHVmZjk3XDAyMlx1ZmY5N1wwMjNcdWZmOTdcMDI0XHVmZjk3IiArCi0gICAgIlwwMjVcdWZmOTdcMDMyXHVmZjk3XDA1M1x1ZmY5N1wwNTRcdWZmOTdcMDU1XHVmZjk3XDA1Nlx1ZmY5N1wwNTciICsKLSAgICAiXHVmZjk3XDA2MFx1ZmY5N1wwNjFcdWZmOTdcMDYyXHVmZjk3XDA2M1x1ZmY5N1wwNjRcdWZmOTdcMDY1XHVmZjk3IiArCi0gICAgIlwwNjZcdWZmOTdcMDY3XHVmZjk3XDA3MVx1ZmY5N1wwNzNcdWZmOTdcMDc0XHVmZjk3XDA3NVx1ZmY5N1wxMDAiICsKLSAgICAiXHVmZjk3XDEwMVx1ZmY5N1wxMDJcdWZmOTdcMTA3XHVmZjk3XDExMFx1ZmY5N1wxMTFcdWZmOTdcMDAxXDAwMiIgKwotICAgICJcMDAwXDAwNlwwMDZcdTAxNTRcMDMxXHVmZjFjXDAwMVwwMDJcMDAwXDAwNlwwMDZcdTAxNTBcMDMxIiArCi0gICAgIlx1ZmYxZFwwMDFcMDAyXDAwMFwxMTRcMDAyXHVmZmQ3XDAwNVx1ZmZkN1wwMDdcdWZmZDdcMDEwXHVmZmQ3IiArCi0gICAgIlwwMTFcdWZmZDdcMDEyXHVmZmQ3XDAxM1x1ZmZkN1wwMTRcdWZmZDdcMDE1XHVmZmQ3XDAxNlx1ZmZkN1wwMTciICsKLSAgICAiXHVmZmQ3XDAyMFx1ZmZkN1wwMjFcdWZmZDdcMDIyXHVmZmQ3XDAyM1x1ZmZkN1wwMzJcdWZmZDdcMDUzXHVmZmQ3IiArCi0gICAgIlwwNTRcdWZmZDdcMDU1XHVmZmQ3XDA1Nlx1ZmZkN1wwNTdcdWZmZDdcMDYwXHVmZmQ3XDA2MVx1ZmZkN1wwNjIiICsKLSAgICAiXHVmZmQ3XDA2M1x1ZmZkN1wwNjRcdWZmZDdcMDY1XHVmZmQ3XDA2Nlx1ZmZkN1wwNjdcdWZmZDdcMDcxXHUwMTNmIiArCi0gICAgIlwwNzVcdWZmZDdcMTAwXHVmZmQ3XDEwMVx1ZmZkN1wxMDJcdWZmZDdcMTA3XHVmZmQ3XDExMFx1ZmZkN1wxMTEiICsKLSAgICAiXHVmZmQ3XDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOWZcMDA0XHVmZjlmXDAwNVx1ZmY5ZlwwMDdcdWZmOWYiICsKLSAgICAiXDAxMFx1ZmY5ZlwwMTFcdWZmOWZcMDEyXHVmZjlmXDAxM1x1ZmY5ZlwwMTRcdWZmOWZcMDE1XHVmZjlmXDAxNiIgKwotICAgICJcdWZmOWZcMDE3XHVmZjlmXDAyMFx1ZmY5ZlwwMjFcdWZmOWZcMDIyXHVmZjlmXDAyM1x1ZmY5ZlwwMjRcdWZmOWYiICsKLSAgICAiXDAyNVx1ZmY5ZlwwMzJcdWZmOWZcMDUzXHVmZjlmXDA1NFx1ZmY5ZlwwNTVcdWZmOWZcMDU2XHVmZjlmXDA1NyIgKwotICAgICJcdWZmOWZcMDYwXHVmZjlmXDA2MVx1ZmY5ZlwwNjJcdWZmOWZcMDYzXHVmZjlmXDA2NFx1ZmY5ZlwwNjVcdWZmOWYiICsKLSAgICAiXDA2Nlx1ZmY5ZlwwNjdcdWZmOWZcMDcxXHVmZjlmXDA3M1x1ZmY5ZlwwNzRcdWZmOWZcMDc1XHVmZjlmXDEwMCIgKwotICAgICJcdWZmOWZcMTAxXHVmZjlmXDEwMlx1ZmY5ZlwxMDdcdWZmOWZcMTEwXHVmZjlmXDExMVx1ZmY5ZlwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM0XDAwMlx1ZmYwYVwwMDRcdWZmMGFcMDA1XHVmZjBhXDAwNlx1ZmYwYVwwMDdcdWZmMGFcMDEwIiArCi0gICAgIlx1ZmYwYVwwMTFcdWZmMGFcMDEyXHVmZjBhXDAxM1x1ZmYwYVwwMTRcdWZmMGFcMDE1XHVmZjBhXDAxNlx1ZmYwYSIgKwotICAgICJcMDE3XHVmZjBhXDAyMFx1ZmYwYVwwMjFcdWZmMGFcMDIyXHVmZjBhXDAyM1x1ZmYwYVwwMjRcdWZmMGFcMDI1IiArCi0gICAgIlx1ZmYwYVwwMjZcdTAxM2VcMDMxXHVmZjNiXDAzMlx1ZmYwYVwwNTNcdWZmMGFcMDU0XHVmZjBhXDA1NVx1ZmYwYSIgKwotICAgICJcMDU2XHVmZjBhXDA1N1x1ZmYwYVwwNjBcdWZmMGFcMDYxXHVmZjBhXDA2Mlx1ZmYwYVwwNjNcdWZmMGFcMDY0IiArCi0gICAgIlx1ZmYwYVwwNjVcdWZmMGFcMDY2XHVmZjBhXDA2N1x1ZmYwYVwwNzFcdWZmMGFcMDczXHVmZjBhXDA3NFx1ZmYwYSIgKwotICAgICJcMDc1XHVmZjBhXDEwMFx1ZmYwYVwxMDFcdWZmMGFcMTAyXHVmZjBhXDEwN1x1ZmYwYVwxMTBcdWZmMGFcMTExIiArCi0gICAgIlx1ZmYwYVwwMDFcMDAyXDAwMFwwMjRcMDAyXHVmZmVmXDAwNVx1ZmZlZlwwMDdcdWZmZWZcMDMyXHVmZmVmIiArCi0gICAgIlwxMDBcdWZmZWZcMTAxXHVmZmVmXDEwN1x1ZmZlZlwxMTBcdWZmZWZcMTExXHVmZmVmXDAwMVwwMDJcMDAwIiArCi0gICAgIlwwNjJcMDAyXHVmZmVkXDAwNVx1ZmZlZFwwMDdcdWZmZWRcMDE0XHUwMTMxXDAxNVx1MDEzMlwwMTZcdTAxMzMiICsKLSAgICAiXDAxN1x1MDEyZlwwMjBcdTAxMmRcMDIxXHUwMTNhXDAyMlx1MDEzN1wwMjNcdTAxMmNcMDMyXHVmZmVkXDA1MyIgKwotICAgICJcdTAxMzZcMDU0XHUwMTJiXDA1NVx1MDEyYVwwNTZcdTAxMzBcMDU3XHUwMTJlXDA2MFx1MDEzNVwwNzVcdTAxMjkiICsKLSAgICAiXDEwMFx1ZmZlZFwxMDFcdWZmZWRcMTA3XHVmZmVkXDExMFx1ZmZlZFwxMTFcdWZmZWRcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEyNlwwMDJcdWZmOWNcMDA0XHVmZjljXDAwNVx1ZmY5Y1wwMDdcdWZmOWNcMDEwXHVmZjljXDAxMVx1ZmY5YyIgKwotICAgICJcMDEyXHVmZjljXDAxM1x1ZmY5Y1wwMTRcdWZmOWNcMDE1XHVmZjljXDAxNlx1ZmY5Y1wwMTdcdWZmOWNcMDIwIiArCi0gICAgIlx1ZmY5Y1wwMjFcdWZmOWNcMDIyXHVmZjljXDAyM1x1ZmY5Y1wwMjRcdWZmOWNcMDI1XHVmZjljXDAzMlx1ZmY5YyIgKwotICAgICJcMDUzXHVmZjljXDA1NFx1ZmY5Y1wwNTVcdWZmOWNcMDU2XHVmZjljXDA1N1x1ZmY5Y1wwNjBcdWZmOWNcMDYxIiArCi0gICAgIlx1ZmY5Y1wwNjJcdWZmOWNcMDYzXHVmZjljXDA2NFx1ZmY5Y1wwNjVcdWZmOWNcMDY2XHVmZjljXDA2N1x1ZmY5YyIgKwotICAgICJcMDcxXHVmZjljXDA3M1x1ZmY5Y1wwNzRcdWZmOWNcMDc1XHVmZjljXDEwMFx1ZmY5Y1wxMDFcdWZmOWNcMTAyIiArCi0gICAgIlx1ZmY5Y1wxMDdcdWZmOWNcMTEwXHVmZjljXDExMVx1ZmY5Y1wwMDFcMDAyXDAwMFwwMjBcMDAyXHVmZmZiIiArCi0gICAgIlwwMDVcdWZmZmJcMDA3XHVmZmZiXDAzMlx1ZmZmYlwxMDBcdWZmZmJcMTAxXHVmZmZiXDEwN1x1ZmZmYlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM0XDAwMlx1ZmYwYlwwMDRcdWZmMGJcMDA1XHVmZjBiXDAwNlx1ZmYwYlwwMDdcdWZmMGIiICsKLSAgICAiXDAxMFx1ZmYwYlwwMTFcdWZmMGJcMDEyXHVmZjBiXDAxM1x1ZmYwYlwwMTRcdWZmMGJcMDE1XHVmZjBiXDAxNiIgKwotICAgICJcdWZmMGJcMDE3XHVmZjBiXDAyMFx1ZmYwYlwwMjFcdWZmMGJcMDIyXHVmZjBiXDAyM1x1ZmYwYlwwMjRcdWZmMGIiICsKLSAgICAiXDAyNVx1ZmYwYlwwMjZcdTAxMjhcMDMxXHVmZjNjXDAzMlx1ZmYwYlwwNTNcdWZmMGJcMDU0XHVmZjBiXDA1NSIgKwotICAgICJcdWZmMGJcMDU2XHVmZjBiXDA1N1x1ZmYwYlwwNjBcdWZmMGJcMDYxXHVmZjBiXDA2Mlx1ZmYwYlwwNjNcdWZmMGIiICsKLSAgICAiXDA2NFx1ZmYwYlwwNjVcdWZmMGJcMDY2XHVmZjBiXDA2N1x1ZmYwYlwwNzFcdWZmMGJcMDczXHVmZjBiXDA3NCIgKwotICAgICJcdWZmMGJcMDc1XHVmZjBiXDEwMFx1ZmYwYlwxMDFcdWZmMGJcMTAyXHVmZjBiXDEwN1x1ZmYwYlwxMTBcdWZmMGIiICsKLSAgICAiXDExMVx1ZmYwYlwwMDFcMDAyXDAwMFwwMDZcMDEyXHVmZWY0XDAzMVx1ZmYxOVwwMDFcMDAyXDAwMCIgKwotICAgICJcMTQ2XDAxMlwxMDdcMDM2XDIzMlwwMzdcMjQwXDA0MFx1MDEyNFwwNDFcMjQxXDA0MlwyMzciICsKLSAgICAiXDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDZcMDQ3XDI0NFwwNTBcMjI1XDA1MSIgKwotICAgICJcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1IiArCi0gICAgIlwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzUiICsKLSAgICAiXDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNSIgKwotICAgICJcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyIiArCi0gICAgIlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDEiICsKLSAgICAiXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyXDAwMCIgKwotICAgICJcMTQ2XDAxMlwyMzNcMDM2XDIzMlwwMzdcMjQwXDA0MFwyNTJcMDQxXDI0MVwwNDJcMjM3IiArCi0gICAgIlwwNDNcMjM2XDA0NFwyNTBcMDQ1XDIyNlwwNDZcMjQ2XDA0N1wyNDRcMDUwXDIyNVwwNTEiICsKLSAgICAiXDI0MlwwNTJcMjQzXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNSIgKwotICAgICJcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1IiArCi0gICAgIlwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDUiICsKLSAgICAiXDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMiIgKwotICAgICJcMTMyXDExM1wxMjZcMTE0XDI1M1wxMTVcMjQ3XDExNlwyNTFcMTE3XDIyN1wxMjBcMjM0IiArCi0gICAgIlwxMjFcMjMwXDEyMlwyNDVcMTIzXDIzNVwxMjRcMTUzXDEzMVwxMjNcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzNlwwMDJcdWZmMDdcMDA0XHVmZjA3XDAwNVx1ZmYwN1wwMDZcdWZmMDdcMDA3XHVmZjA3XDAxMFx1ZmYwNyIgKwotICAgICJcMDExXHVmZjA3XDAxMlx1ZmYwN1wwMTNcdWZmMDdcMDE0XHVmZjA3XDAxNVx1ZmYwN1wwMTZcdWZmMDdcMDE3IiArCi0gICAgIlx1ZmYwN1wwMjBcdWZmMDdcMDIxXHVmZjA3XDAyMlx1ZmYwN1wwMjNcdWZmMDdcMDI0XHVmZjA3XDAyNVx1ZmYwNyIgKwotICAgICJcMDMxXHVmZjM4XDAzMlx1ZmYwN1wwMzVcdWZmMDdcMDUzXHVmZjA3XDA1NFx1ZmYwN1wwNTVcdWZmMDdcMDU2IiArCi0gICAgIlx1ZmYwN1wwNTdcdWZmMDdcMDYwXHVmZjA3XDA2MVx1ZmYwN1wwNjJcdWZmMDdcMDYzXHVmZjA3XDA2NFx1ZmYwNyIgKwotICAgICJcMDY1XHVmZjA3XDA2Nlx1ZmYwN1wwNjdcdWZmMDdcMDcxXHVmZjA3XDA3M1x1ZmYwN1wwNzRcdWZmMDdcMDc1IiArCi0gICAgIlx1ZmYwN1wwNzdcdWZmMDdcMTAwXHVmZjA3XDEwMVx1ZmYwN1wxMDJcdWZmMDdcMTA3XHVmZjA3XDExMFx1ZmYwNyIgKwotICAgICJcMTExXHVmZjA3XDAwMVwwMDJcMDAwXDEyNFwwMDJcdWZmYjZcMDA1XHVmZmI2XDAwN1x1ZmZiNlwwMTAiICsKLSAgICAiXHVmZmI2XDAxMVx1ZmZiNlwwMTJcdWZmYjZcMDEzXHVmZmI2XDAxNFx1ZmZiNlwwMTVcdWZmYjZcMDE2XHVmZmI2IiArCi0gICAgIlwwMTdcdWZmYjZcMDIwXHVmZmI2XDAyMVx1ZmZiNlwwMjJcdWZmYjZcMDIzXHVmZmI2XDAyNFx1ZmZiNlwwMjUiICsKLSAgICAiXHVmZmI2XDAzMlx1ZmZiNlwwNTNcdWZmYjZcMDU0XHVmZmI2XDA1NVx1ZmZiNlwwNTZcdWZmYjZcMDU3XHVmZmI2IiArCi0gICAgIlwwNjBcdWZmYjZcMDYxXHVmZmI2XDA2Mlx1ZmZiNlwwNjNcdWZmYjZcMDY0XHVmZmI2XDA2NVx1ZmZiNlwwNjYiICsKLSAgICAiXHVmZmI2XDA2N1x1ZmZiNlwwNzFcdWZmYjZcMDczXHVmZmI2XDA3NFx1ZmZiNlwwNzVcdWZmYjZcMTAwXHVmZmI2IiArCi0gICAgIlwxMDFcdWZmYjZcMTAyXHVmZmI2XDEwN1x1ZmZiNlwxMTBcdWZmYjZcMTExXHVmZmI2XDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzBcMDAyXHVmZjcyXDAwNFx1ZmY3MlwwMDVcdWZmNzJcMDA3XHVmZjcyXDAxMFx1ZmY3MlwwMTFcdWZmNzIiICsKLSAgICAiXDAxMlx1ZmY3MlwwMTNcdWZmNzJcMDE0XHVmZjcyXDAxNVx1ZmY3MlwwMTZcdWZmNzJcMDE3XHVmZjcyXDAyMCIgKwotICAgICJcdWZmNzJcMDIxXHVmZjcyXDAyMlx1ZmY3MlwwMjNcdWZmNzJcMDI0XHVmZjcyXDAyNVx1ZmY3MlwwMzJcdWZmNzIiICsKLSAgICAiXDAzNVx1ZmY3MlwwNTNcdWZmNzJcMDU0XHVmZjcyXDA1NVx1ZmY3MlwwNTZcdWZmNzJcMDU3XHVmZjcyXDA2MCIgKwotICAgICJcdWZmNzJcMDYxXHVmZjcyXDA2Mlx1ZmY3MlwwNjNcdWZmNzJcMDY0XHVmZjcyXDA2NVx1ZmY3MlwwNjZcdWZmNzIiICsKLSAgICAiXDA2N1x1ZmY3MlwwNzFcdWZmNzJcMDczXHVmZjcyXDA3NFx1ZmY3MlwwNzVcdWZmNzJcMTAwXHVmZjcyXDEwMSIgKwotICAgICJcdWZmNzJcMTAyXHVmZjcyXDEwN1x1ZmY3MlwxMTBcdWZmNzJcMTExXHVmZjcyXDAwMVwwMDJcMDAwXDAxMiIgKwotICAgICJcMDAyXHVmZmZmXDAwNVx1ZmZmZlwwMDdcdWZmZmZcMDMyXHVmZmZmXDAwMVwwMDJcMDAwXDIwMFwwMDYiICsKLSAgICAiXDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MCIgKwotICAgICJcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxIiArCi0gICAgIlwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzEiICsKLSAgICAiXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NCIgKwotICAgICJcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzIiArCi0gICAgIlwwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDIiICsKLSAgICAiXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3MyIgKwotICAgICJcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3IiArCi0gICAgIlwxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzQiICsKLSAgICAiXDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMTM2XDAwMiIgKwotICAgICJcdWZlZjVcMDA0XHVmZWY1XDAwNVx1ZmVmNVwwMDZcdWZlZjVcMDA3XHVmZWY1XDAxMFx1ZmVmNVwwMTFcdWZlZjUiICsKLSAgICAiXDAxMlx1ZmVmNVwwMTNcdWZlZjVcMDE0XHVmZWY1XDAxNVx1ZmVmNVwwMTZcdWZlZjVcMDE3XHVmZWY1XDAyMCIgKwotICAgICJcdWZlZjVcMDIxXHVmZWY1XDAyMlx1ZmVmNVwwMjNcdWZlZjVcMDI0XHVmZWY1XDAyNVx1ZmVmNVwwMzFcdWZmMjUiICsKLSAgICAiXDAzMlx1ZmVmNVwwMzVcdWZlZjVcMDUzXHVmZWY1XDA1NFx1ZmVmNVwwNTVcdWZlZjVcMDU2XHVmZWY1XDA1NyIgKwotICAgICJcdWZlZjVcMDYwXHVmZWY1XDA2MVx1ZmVmNVwwNjJcdWZlZjVcMDYzXHVmZWY1XDA2NFx1ZmVmNVwwNjVcdWZlZjUiICsKLSAgICAiXDA2Nlx1ZmVmNVwwNjdcdWZlZjVcMDcxXHVmZWY1XDA3M1x1ZmVmNVwwNzRcdWZlZjVcMDc1XHVmZWY1XDA3NyIgKwotICAgICJcdWZlZjVcMTAwXHVmZWY1XDEwMVx1ZmVmNVwxMDJcdWZlZjVcMTA3XHVmZWY1XDExMFx1ZmVmNVwxMTFcdWZlZjUiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOTdcMDA0XHVmZjk3XDAwNVx1ZmY5N1wwMDdcdWZmOTdcMDEwIiArCi0gICAgIlx1ZmY5N1wwMTFcdWZmOTdcMDEyXHVmZjk3XDAxM1x1ZmY5N1wwMTRcdWZmOTdcMDE1XHVmZjk3XDAxNlx1ZmY5NyIgKwotICAgICJcMDE3XHVmZjk3XDAyMFx1ZmY5N1wwMjFcdWZmOTdcMDIyXHVmZjk3XDAyM1x1ZmY5N1wwMjRcdWZmOTdcMDI1IiArCi0gICAgIlx1ZmY5N1wwMzJcdWZmOTdcMDUzXHVmZjk3XDA1NFx1ZmY5N1wwNTVcdWZmOTdcMDU2XHVmZjk3XDA1N1x1ZmY5NyIgKwotICAgICJcMDYwXHVmZjk3XDA2MVx1ZmY5N1wwNjJcdWZmOTdcMDYzXHVmZjk3XDA2NFx1ZmY5N1wwNjVcdWZmOTdcMDY2IiArCi0gICAgIlx1ZmY5N1wwNjdcdWZmOTdcMDcxXHVmZjk3XDA3M1x1ZmY5N1wwNzRcdWZmOTdcMDc1XHVmZjk3XDEwMFx1ZmY5NyIgKwotICAgICJcMTAxXHVmZjk3XDEwMlx1ZmY5N1wxMDdcdWZmOTdcMTEwXHVmZjk3XDExMVx1ZmY5N1wwMDFcMDAyXDAwMCIgKwotICAgICJcMjAyXDAwNlwxMDFcMDA3XHUwMTFlXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjIiICsKLSAgICAiXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzNyIgKwotICAgICJcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwIiArCi0gICAgIlwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjIiICsKLSAgICAiXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NSIgKwotICAgICJcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMTA2XDA3N1wxNDJcMTAwIiArCi0gICAgIlwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wxNTdcMTA0XDA0NlwxMDVcMTQ3XDEwNlwwNTIiICsKLSAgICAiXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNSIgKwotICAgICJcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1IiArCi0gICAgIlwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM2XDAwMlx1ZmYwOVwwMDRcdWZmMDlcMDA1XHVmZjA5XDAwNlx1ZmYwOVwwMDdcdWZmMDkiICsKLSAgICAiXDAxMFx1ZmYwOVwwMTFcdWZmMDlcMDEyXHVmZjA5XDAxM1x1ZmYwOVwwMTRcdWZmMDlcMDE1XHVmZjA5XDAxNiIgKwotICAgICJcdWZmMDlcMDE3XHVmZjA5XDAyMFx1ZmYwOVwwMjFcdWZmMDlcMDIyXHVmZjA5XDAyM1x1ZmYwOVwwMjRcdWZmMDkiICsKLSAgICAiXDAyNVx1ZmYwOVwwMzFcdWZmM2FcMDMyXHVmZjA5XDAzNVx1ZmYwOVwwNTNcdWZmMDlcMDU0XHVmZjA5XDA1NSIgKwotICAgICJcdWZmMDlcMDU2XHVmZjA5XDA1N1x1ZmYwOVwwNjBcdWZmMDlcMDYxXHVmZjA5XDA2Mlx1ZmYwOVwwNjNcdWZmMDkiICsKLSAgICAiXDA2NFx1ZmYwOVwwNjVcdWZmMDlcMDY2XHVmZjA5XDA2N1x1ZmYwOVwwNzFcdWZmMDlcMDczXHVmZjA5XDA3NCIgKwotICAgICJcdWZmMDlcMDc1XHVmZjA5XDA3N1x1ZmYwOVwxMDBcdWZmMDlcMTAxXHVmZjA5XDEwMlx1ZmYwOVwxMDdcdWZmMDkiICsKLSAgICAiXDExMFx1ZmYwOVwxMTFcdWZmMDlcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY5ZFwwMDRcdWZmOWRcMDA1IiArCi0gICAgIlx1ZmY5ZFwwMDZcdTAxMTZcMDA3XHVmZjlkXDAxMFx1ZmY5ZFwwMTFcdWZmOWRcMDEyXHVmZjlkXDAxM1x1ZmY5ZCIgKwotICAgICJcMDE0XHVmZjlkXDAxNVx1ZmY5ZFwwMTZcdWZmOWRcMDE3XHVmZjlkXDAyMFx1ZmY5ZFwwMjFcdWZmOWRcMDIyIiArCi0gICAgIlx1ZmY5ZFwwMjNcdWZmOWRcMDI0XHVmZjlkXDAyNVx1ZmY5ZFwwMzJcdWZmOWRcMDUzXHVmZjlkXDA1NFx1ZmY5ZCIgKwotICAgICJcMDU1XHVmZjlkXDA1Nlx1ZmY5ZFwwNTdcdWZmOWRcMDYwXHVmZjlkXDA2MVx1ZmY5ZFwwNjJcdWZmOWRcMDYzIiArCi0gICAgIlx1ZmY5ZFwwNjRcdWZmOWRcMDY1XHVmZjlkXDA2Nlx1ZmY5ZFwwNjdcdWZmOWRcMDcxXHVmZjlkXDA3M1x1ZmY5ZCIgKwotICAgICJcMDc0XHVmZjlkXDA3NVx1ZmY5ZFwxMDBcdWZmOWRcMTAxXHVmZjlkXDEwMlx1ZmY5ZFwxMDdcdWZmOWRcMTEwIiArCi0gICAgIlx1ZmY5ZFwxMTFcdWZmOWRcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY1MlwwMDRcdWZmNTJcMDA1XHVmZjUyIiArCi0gICAgIlwwMDdcdWZmNTJcMDEwXHVmZjUyXDAxMVx1ZmY1MlwwMTJcdWZmNTJcMDEzXHVmZjUyXDAxNFx1ZmY1MlwwMTUiICsKLSAgICAiXHVmZjUyXDAxNlx1ZmY1MlwwMTdcdWZmNTJcMDIwXHVmZjUyXDAyMVx1ZmY1MlwwMjJcdWZmNTJcMDIzXHVmZjUyIiArCi0gICAgIlwwMjRcdWZmNTJcMDI1XHVmZjUyXDAzMlx1ZmY1MlwwNTNcdWZmNTJcMDU0XHVmZjUyXDA1NVx1ZmY1MlwwNTYiICsKLSAgICAiXHVmZjUyXDA1N1x1ZmY1MlwwNjBcdWZmNTJcMDYxXHVmZjUyXDA2Mlx1ZmY1MlwwNjNcdWZmNTJcMDY0XHVmZjUyIiArCi0gICAgIlwwNjVcdWZmNTJcMDY2XHVmZjUyXDA2N1x1ZmY1MlwwNzFcdWZmNTJcMDczXHVmZjUyXDA3NFx1ZmY1MlwwNzUiICsKLSAgICAiXHVmZjUyXDEwMFx1ZmY1MlwxMDFcdWZmNTJcMTAyXHVmZjUyXDEwN1x1ZmY1MlwxMTBcdWZmNTJcMTExXHVmZjUyIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjc2XDAwNFx1ZmY3NlwwMDVcdWZmNzZcMDA3XHVmZjc2XDAxMCIgKwotICAgICJcdWZmNzZcMDExXHVmZjc2XDAxMlx1ZmY3NlwwMTNcdWZmNzZcMDE0XHVmZjc2XDAxNVx1ZmY3NlwwMTZcdWZmNzYiICsKLSAgICAiXDAxN1x1ZmY3NlwwMjBcdWZmNzZcMDIxXHVmZjc2XDAyMlx1ZmY3NlwwMjNcdWZmNzZcMDI0XHVmZjc2XDAyNSIgKwotICAgICJcdWZmNzZcMDMyXHVmZjc2XDAzNVx1ZmY3NlwwNTNcdWZmNzZcMDU0XHVmZjc2XDA1NVx1ZmY3NlwwNTZcdWZmNzYiICsKLSAgICAiXDA1N1x1ZmY3NlwwNjBcdWZmNzZcMDYxXHVmZjc2XDA2Mlx1ZmY3NlwwNjNcdWZmNzZcMDY0XHVmZjc2XDA2NSIgKwotICAgICJcdWZmNzZcMDY2XHVmZjc2XDA2N1x1ZmY3NlwwNzFcdWZmNzZcMDczXHVmZjc2XDA3NFx1ZmY3NlwwNzVcdWZmNzYiICsKLSAgICAiXDEwMFx1ZmY3NlwxMDFcdWZmNzZcMTAyXHVmZjc2XDEwN1x1ZmY3NlwxMTBcdWZmNzZcMTExXHVmZjc2XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzRcMDAyXHVmZjAwXDAwNFx1ZmYwMFwwMDVcdWZmMDBcMDA2XHVmZjAwXDAwN1x1ZmYwMCIgKwotICAgICJcMDEwXHVmZjAwXDAxMVx1ZmYwMFwwMTJcdWZmMDBcMDEzXHVmZjAwXDAxNFx1ZmYwMFwwMTVcdWZmMDBcMDE2IiArCi0gICAgIlx1ZmYwMFwwMTdcdWZmMDBcMDIwXHVmZjAwXDAyMVx1ZmYwMFwwMjJcdWZmMDBcMDIzXHVmZjAwXDAyNFx1ZmYwMCIgKwotICAgICJcMDI1XHVmZjAwXDAzMVx1ZmYzMVwwMzJcdWZmMDBcMDMzXHUwMTEyXDA1M1x1ZmYwMFwwNTRcdWZmMDBcMDU1IiArCi0gICAgIlx1ZmYwMFwwNTZcdWZmMDBcMDU3XHVmZjAwXDA2MFx1ZmYwMFwwNjFcdWZmMDBcMDYyXHVmZjAwXDA2M1x1ZmYwMCIgKwotICAgICJcMDY0XHVmZjAwXDA2NVx1ZmYwMFwwNjZcdWZmMDBcMDY3XHVmZjAwXDA3MVx1ZmYwMFwwNzNcdWZmMDBcMDc0IiArCi0gICAgIlx1ZmYwMFwwNzVcdWZmMDBcMTAwXHVmZjAwXDEwMVx1ZmYwMFwxMDJcdWZmMDBcMTA3XHVmZjAwXDExMFx1ZmYwMCIgKwotICAgICJcMTExXHVmZjAwXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmOWJcMDA0XHVmZjliXDAwNVx1ZmY5YlwwMDciICsKLSAgICAiXHVmZjliXDAxMFx1ZmY5YlwwMTFcdWZmOWJcMDEyXHVmZjliXDAxM1x1ZmY5YlwwMTRcdWZmOWJcMDE1XHVmZjliIiArCi0gICAgIlwwMTZcdWZmOWJcMDE3XHVmZjliXDAyMFx1ZmY5YlwwMjFcdWZmOWJcMDIyXHVmZjliXDAyM1x1ZmY5YlwwMjQiICsKLSAgICAiXHVmZjliXDAyNVx1ZmY5YlwwMzFcdTAxMTBcMDMyXHVmZjliXDA1M1x1ZmY5YlwwNTRcdWZmOWJcMDU1XHVmZjliIiArCi0gICAgIlwwNTZcdWZmOWJcMDU3XHVmZjliXDA2MFx1ZmY5YlwwNjFcdWZmOWJcMDYyXHVmZjliXDA2M1x1ZmY5YlwwNjQiICsKLSAgICAiXHVmZjliXDA2NVx1ZmY5YlwwNjZcdWZmOWJcMDY3XHVmZjliXDA3MVx1ZmY5YlwwNzNcdWZmOWJcMDc0XHVmZjliIiArCi0gICAgIlwwNzVcdWZmOWJcMTAwXHVmZjliXDEwMVx1ZmY5YlwxMDJcdWZmOWJcMTA3XHVmZjliXDExMFx1ZmY5YlwxMTEiICsKLSAgICAiXHVmZjliXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMGNcMDA0XHVmZjBjXDAwNVx1ZmYwY1wwMDZcdWZmMGMiICsKLSAgICAiXDAwN1x1ZmYwY1wwMTBcdWZmMGNcMDExXHVmZjBjXDAxMlx1ZmYwY1wwMTNcdWZmMGNcMDE0XHVmZjBjXDAxNSIgKwotICAgICJcdWZmMGNcMDE2XHVmZjBjXDAxN1x1ZmYwY1wwMjBcdWZmMGNcMDIxXHVmZjBjXDAyMlx1ZmYwY1wwMjNcdWZmMGMiICsKLSAgICAiXDAyNFx1ZmYwY1wwMjVcdWZmMGNcMDI2XHUwMTBmXDAzMVx1ZmYzZFwwMzJcdWZmMGNcMDUzXHVmZjBjXDA1NCIgKwotICAgICJcdWZmMGNcMDU1XHVmZjBjXDA1Nlx1ZmYwY1wwNTdcdWZmMGNcMDYwXHVmZjBjXDA2MVx1ZmYwY1wwNjJcdWZmMGMiICsKLSAgICAiXDA2M1x1ZmYwY1wwNjRcdWZmMGNcMDY1XHVmZjBjXDA2Nlx1ZmYwY1wwNjdcdWZmMGNcMDcxXHVmZjBjXDA3MyIgKwotICAgICJcdWZmMGNcMDc0XHVmZjBjXDA3NVx1ZmYwY1wxMDBcdWZmMGNcMTAxXHVmZjBjXDEwMlx1ZmYwY1wxMDdcdWZmMGMiICsKLSAgICAiXDExMFx1ZmYwY1wxMTFcdWZmMGNcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmVmNlwwMDRcdWZlZjZcMDA1IiArCi0gICAgIlx1ZmVmNlwwMDZcdWZlZjZcMDA3XHVmZWY2XDAxMFx1ZmVmNlwwMTFcdWZlZjZcMDEyXHVmZWY2XDAxM1x1ZmVmNiIgKwotICAgICJcMDE0XHVmZWY2XDAxNVx1ZmVmNlwwMTZcdWZlZjZcMDE3XHVmZWY2XDAyMFx1ZmVmNlwwMjFcdWZlZjZcMDIyIiArCi0gICAgIlx1ZmVmNlwwMjNcdWZlZjZcMDI0XHVmZWY2XDAyNVx1ZmVmNlwwMzFcdWZmMjZcMDMyXHVmZWY2XDAzNVx1ZmVmNiIgKwotICAgICJcMDUzXHVmZWY2XDA1NFx1ZmVmNlwwNTVcdWZlZjZcMDU2XHVmZWY2XDA1N1x1ZmVmNlwwNjBcdWZlZjZcMDYxIiArCi0gICAgIlx1ZmVmNlwwNjJcdWZlZjZcMDYzXHVmZWY2XDA2NFx1ZmVmNlwwNjVcdWZlZjZcMDY2XHVmZWY2XDA2N1x1ZmVmNiIgKwotICAgICJcMDcxXHVmZWY2XDA3M1x1ZmVmNlwwNzRcdWZlZjZcMDc1XHVmZWY2XDA3N1x1ZmVmNlwxMDBcdWZlZjZcMTAxIiArCi0gICAgIlx1ZmVmNlwxMDJcdWZlZjZcMTA3XHVmZWY2XDExMFx1ZmVmNlwxMTFcdWZlZjZcMDAxXDAwMlwwMDBcMTM0IiArCi0gICAgIlwwMDJcdWZmNGFcMDA0XHVmZjRhXDAwNVx1ZmY0YVwwMDZcdWZmNGFcMDA3XHVmZjRhXDAxMFx1ZmY0YVwwMTEiICsKLSAgICAiXHVmZjRhXDAxMlx1ZmY0YVwwMTNcdWZmNGFcMDE0XHVmZjRhXDAxNVx1ZmY0YVwwMTZcdWZmNGFcMDE3XHVmZjRhIiArCi0gICAgIlwwMjBcdWZmNGFcMDIxXHVmZjRhXDAyMlx1ZmY0YVwwMjNcdWZmNGFcMDI0XHVmZjRhXDAyNVx1ZmY0YVwwMzIiICsKLSAgICAiXHVmZjRhXDAzNVx1ZmY0YVwwNTNcdWZmNGFcMDU0XHVmZjRhXDA1NVx1ZmY0YVwwNTZcdWZmNGFcMDU3XHVmZjRhIiArCi0gICAgIlwwNjBcdWZmNGFcMDYxXHVmZjRhXDA2Mlx1ZmY0YVwwNjNcdWZmNGFcMDY0XHVmZjRhXDA2NVx1ZmY0YVwwNjYiICsKLSAgICAiXHVmZjRhXDA2N1x1ZmY0YVwwNzFcdWZmNGFcMDczXHVmZjRhXDA3NFx1ZmY0YVwwNzVcdWZmNGFcMDc3XHVmZjRhIiArCi0gICAgIlwxMDBcdWZmNGFcMTAxXHVmZjRhXDEwMlx1ZmY0YVwxMDdcdWZmNGFcMTEwXHVmZjRhXDExMVx1ZmY0YVwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM2XDAwMlx1ZmVmZVwwMDRcdWZlZmVcMDA1XHVmZWZlXDAwNlx1ZmVmZVwwMDdcdWZlZmUiICsKLSAgICAiXDAxMFx1ZmVmZVwwMTFcdWZlZmVcMDEyXHVmZWZlXDAxM1x1ZmVmZVwwMTRcdWZlZmVcMDE1XHVmZWZlXDAxNiIgKwotICAgICJcdWZlZmVcMDE3XHVmZWZlXDAyMFx1ZmVmZVwwMjFcdWZlZmVcMDIyXHVmZWZlXDAyM1x1ZmVmZVwwMjRcdWZlZmUiICsKLSAgICAiXDAyNVx1ZmVmZVwwMzFcdWZmMmZcMDMyXHVmZWZlXDAzNVx1ZmVmZVwwNTNcdWZlZmVcMDU0XHVmZWZlXDA1NSIgKwotICAgICJcdWZlZmVcMDU2XHVmZWZlXDA1N1x1ZmVmZVwwNjBcdWZlZmVcMDYxXHVmZWZlXDA2Mlx1ZmVmZVwwNjNcdWZlZmUiICsKLSAgICAiXDA2NFx1ZmVmZVwwNjVcdWZlZmVcMDY2XHVmZWZlXDA2N1x1ZmVmZVwwNzFcdWZlZmVcMDczXHVmZWZlXDA3NCIgKwotICAgICJcdWZlZmVcMDc1XHVmZWZlXDA3N1x1ZmVmZVwxMDBcdWZlZmVcMTAxXHVmZWZlXDEwMlx1ZmVmZVwxMDdcdWZlZmUiICsKLSAgICAiXDExMFx1ZmVmZVwxMTFcdWZlZmVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmVmOVwwMDRcdWZlZjlcMDA1IiArCi0gICAgIlx1ZmVmOVwwMDZcdWZlZjlcMDA3XHVmZWY5XDAxMFx1ZmVmOVwwMTFcdWZlZjlcMDEyXHVmZWY5XDAxM1x1ZmVmOSIgKwotICAgICJcMDE0XHVmZWY5XDAxNVx1ZmVmOVwwMTZcdWZlZjlcMDE3XHVmZWY5XDAyMFx1ZmVmOVwwMjFcdWZlZjlcMDIyIiArCi0gICAgIlx1ZmVmOVwwMjNcdWZlZjlcMDI0XHVmZWY5XDAyNVx1ZmVmOVwwMzFcdWZmMjlcMDMyXHVmZWY5XDAzNVx1ZmVmOSIgKwotICAgICJcMDUzXHVmZWY5XDA1NFx1ZmVmOVwwNTVcdWZlZjlcMDU2XHVmZWY5XDA1N1x1ZmVmOVwwNjBcdWZlZjlcMDYxIiArCi0gICAgIlx1ZmVmOVwwNjJcdWZlZjlcMDYzXHVmZWY5XDA2NFx1ZmVmOVwwNjVcdWZlZjlcMDY2XHVmZWY5XDA2N1x1ZmVmOSIgKwotICAgICJcMDcxXHVmZWY5XDA3M1x1ZmVmOVwwNzRcdWZlZjlcMDc1XHVmZWY5XDA3N1x1ZmVmOVwxMDBcdWZlZjlcMTAxIiArCi0gICAgIlx1ZmVmOVwxMDJcdWZlZjlcMTA3XHVmZWY5XDExMFx1ZmVmOVwxMTFcdWZlZjlcMDAxXDAwMlwwMDBcMTI2IiArCi0gICAgIlwwMDJcdWZmOTRcMDA0XHVmZjk0XDAwNVx1ZmY5NFwwMDdcdWZmOTRcMDEwXHVmZjk0XDAxMVx1ZmY5NFwwMTIiICsKLSAgICAiXHVmZjk0XDAxM1x1ZmY5NFwwMTRcdWZmOTRcMDE1XHVmZjk0XDAxNlx1ZmY5NFwwMTdcdWZmOTRcMDIwXHVmZjk0IiArCi0gICAgIlwwMjFcdWZmOTRcMDIyXHVmZjk0XDAyM1x1ZmY5NFwwMjRcdWZmOTRcMDI1XHVmZjk0XDAzMlx1ZmY5NFwwNTMiICsKLSAgICAiXHVmZjk0XDA1NFx1ZmY5NFwwNTVcdWZmOTRcMDU2XHVmZjk0XDA1N1x1ZmY5NFwwNjBcdWZmOTRcMDYxXHVmZjk0IiArCi0gICAgIlwwNjJcdWZmOTRcMDYzXHVmZjk0XDA2NFx1ZmY5NFwwNjVcdWZmOTRcMDY2XHVmZjk0XDA2N1x1ZmY5NFwwNzEiICsKLSAgICAiXHVmZjk0XDA3M1x1ZmY5NFwwNzRcdWZmOTRcMDc1XHVmZjk0XDEwMFx1ZmY5NFwxMDFcdWZmOTRcMTAyXHVmZjk0IiArCi0gICAgIlwxMDdcdWZmOTRcMTEwXHVmZjk0XDExMVx1ZmY5NFwwMDFcMDAyXDAwMFwwMjBcMDAyXHVmZmZkXDAwNSIgKwotICAgICJcdWZmZmRcMDA3XHVmZmZkXDAzMlx1ZmZmZFwxMDBcdWZmZmRcMTAxXHVmZmZkXDEwN1x1ZmZmZFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTI2XDAwMlx1ZmZhMFwwMDRcdWZmYTBcMDA1XHVmZmEwXDAwN1x1ZmZhMFwwMTBcdWZmYTBcMDExIiArCi0gICAgIlx1ZmZhMFwwMTJcdWZmYTBcMDEzXHVmZmEwXDAxNFx1ZmZhMFwwMTVcdWZmYTBcMDE2XHVmZmEwXDAxN1x1ZmZhMCIgKwotICAgICJcMDIwXHVmZmEwXDAyMVx1ZmZhMFwwMjJcdWZmYTBcMDIzXHVmZmEwXDAyNFx1ZmZhMFwwMjVcdWZmYTBcMDMyIiArCi0gICAgIlx1ZmZhMFwwNTNcdWZmYTBcMDU0XHVmZmEwXDA1NVx1ZmZhMFwwNTZcdWZmYTBcMDU3XHVmZmEwXDA2MFx1ZmZhMCIgKwotICAgICJcMDYxXHVmZmEwXDA2Mlx1ZmZhMFwwNjNcdWZmYTBcMDY0XHVmZmEwXDA2NVx1ZmZhMFwwNjZcdWZmYTBcMDY3IiArCi0gICAgIlx1ZmZhMFwwNzFcdWZmYTBcMDczXHVmZmEwXDA3NFx1ZmZhMFwwNzVcdWZmYTBcMTAwXHVmZmEwXDEwMVx1ZmZhMCIgKwotICAgICJcMTAyXHVmZmEwXDEwN1x1ZmZhMFwxMTBcdWZmYTBcMTExXHVmZmEwXDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZjg4XDAwNFx1ZmY4OFwwMDVcdWZmODhcMDA3XHVmZjg4XDAxMFx1ZmY4OFwwMTFcdWZmODhcMDEyXHVmZjg4IiArCi0gICAgIlwwMTNcdWZmODhcMDE0XHVmZjg4XDAxNVx1ZmY4OFwwMTZcdWZmODhcMDE3XHVmZjg4XDAyMFx1ZmY4OFwwMjEiICsKLSAgICAiXHVmZjg4XDAyMlx1ZmY4OFwwMjNcdWZmODhcMDI0XHVmZjg4XDAyNVx1ZmY4OFwwMzJcdWZmODhcMDUzXHVmZjg4IiArCi0gICAgIlwwNTRcdWZmODhcMDU1XHVmZjg4XDA1Nlx1ZmY4OFwwNTdcdWZmODhcMDYwXHVmZjg4XDA2MVx1ZmY4OFwwNjIiICsKLSAgICAiXHVmZjg4XDA2M1x1ZmY4OFwwNjRcdWZmODhcMDY1XHVmZjg4XDA2Nlx1ZmY4OFwwNjdcdWZmODhcMDcxXHVmZjg4IiArCi0gICAgIlwwNzNcdWZmODhcMDc0XHVmZjg4XDA3NVx1ZmY4OFwxMDBcdWZmODhcMTAxXHVmZjg4XDEwMlx1ZmY4OFwxMDciICsKLSAgICAiXHVmZjg4XDExMFx1ZmY4OFwxMTFcdWZmODhcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY3NFwwMDRcdWZmNzQiICsKLSAgICAiXDAwNVx1ZmY3NFwwMDdcdWZmNzRcMDEwXHVmZjc0XDAxMVx1ZmY3NFwwMTJcdWZmNzRcMDEzXHVmZjc0XDAxNCIgKwotICAgICJcdWZmNzRcMDE1XHVmZjc0XDAxNlx1ZmY3NFwwMTdcdWZmNzRcMDIwXHVmZjc0XDAyMVx1ZmY3NFwwMjJcdWZmNzQiICsKLSAgICAiXDAyM1x1ZmY3NFwwMjRcdWZmNzRcMDI1XHVmZjc0XDAzMlx1ZmY3NFwwMzVcdWZmNzRcMDUzXHVmZjc0XDA1NCIgKwotICAgICJcdWZmNzRcMDU1XHVmZjc0XDA1Nlx1ZmY3NFwwNTdcdWZmNzRcMDYwXHVmZjc0XDA2MVx1ZmY3NFwwNjJcdWZmNzQiICsKLSAgICAiXDA2M1x1ZmY3NFwwNjRcdWZmNzRcMDY1XHVmZjc0XDA2Nlx1ZmY3NFwwNjdcdWZmNzRcMDcxXHVmZjc0XDA3MyIgKwotICAgICJcdWZmNzRcMDc0XHVmZjc0XDA3NVx1ZmY3NFwxMDBcdWZmNzRcMTAxXHVmZjc0XDEwMlx1ZmY3NFwxMDdcdWZmNzQiICsKLSAgICAiXDExMFx1ZmY3NFwxMTFcdWZmNzRcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY3NVwwMDRcdWZmNzVcMDA1IiArCi0gICAgIlx1ZmY3NVwwMDdcdWZmNzVcMDEwXHVmZjc1XDAxMVx1ZmY3NVwwMTJcdWZmNzVcMDEzXHVmZjc1XDAxNFx1ZmY3NSIgKwotICAgICJcMDE1XHVmZjc1XDAxNlx1ZmY3NVwwMTdcdWZmNzVcMDIwXHVmZjc1XDAyMVx1ZmY3NVwwMjJcdWZmNzVcMDIzIiArCi0gICAgIlx1ZmY3NVwwMjRcdWZmNzVcMDI1XHVmZjc1XDAzMlx1ZmY3NVwwMzVcdWZmNzVcMDUzXHVmZjc1XDA1NFx1ZmY3NSIgKwotICAgICJcMDU1XHVmZjc1XDA1Nlx1ZmY3NVwwNTdcdWZmNzVcMDYwXHVmZjc1XDA2MVx1ZmY3NVwwNjJcdWZmNzVcMDYzIiArCi0gICAgIlx1ZmY3NVwwNjRcdWZmNzVcMDY1XHVmZjc1XDA2Nlx1ZmY3NVwwNjdcdWZmNzVcMDcxXHVmZjc1XDA3M1x1ZmY3NSIgKwotICAgICJcMDc0XHVmZjc1XDA3NVx1ZmY3NVwxMDBcdWZmNzVcMTAxXHVmZjc1XDEwMlx1ZmY3NVwxMDdcdWZmNzVcMTEwIiArCi0gICAgIlx1ZmY3NVwxMTFcdWZmNzVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYxN1wwMDRcdWZmMTdcMDA1XHVmZjE3IiArCi0gICAgIlwwMDZcdWZmMTdcMDA3XHVmZjE3XDAxMFx1ZmYxN1wwMTFcdWZmMTdcMDEyXHVmZjE3XDAxM1x1ZmYxN1wwMTQiICsKLSAgICAiXHVmZjE3XDAxNVx1ZmYxN1wwMTZcdWZmMTdcMDE3XHVmZjE3XDAyMFx1ZmYxN1wwMjFcdWZmMTdcMDIyXHVmZjE3IiArCi0gICAgIlwwMjNcdWZmMTdcMDI0XHVmZjE3XDAyNVx1ZmYxN1wwMzFcdWZmNDlcMDMyXHVmZjE3XDAzNVx1ZmYxN1wwNTMiICsKLSAgICAiXHVmZjE3XDA1NFx1ZmYxN1wwNTVcdWZmMTdcMDU2XHVmZjE3XDA1N1x1ZmYxN1wwNjBcdWZmMTdcMDYxXHVmZjE3IiArCi0gICAgIlwwNjJcdWZmMTdcMDYzXHVmZjE3XDA2NFx1ZmYxN1wwNjVcdWZmMTdcMDY2XHVmZjE3XDA2N1x1ZmYxN1wwNzEiICsKLSAgICAiXHVmZjE3XDA3M1x1ZmYxN1wwNzRcdWZmMTdcMDc1XHVmZjE3XDA3N1x1ZmYxN1wxMDBcdWZmMTdcMTAxXHVmZjE3IiArCi0gICAgIlwxMDJcdWZmMTdcMTA3XHVmZjE3XDExMFx1ZmYxN1wxMTFcdWZmMTdcMDAxXDAwMlwwMDBcMDA2XDAwNiIgKwotICAgICJcdTAxMGRcMDMxXHVmZjI0XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMDhcMDA0XHVmZjA4XDAwNVx1ZmYwOCIgKwotICAgICJcMDA2XHVmZjA4XDAwN1x1ZmYwOFwwMTBcdWZmMDhcMDExXHVmZjA4XDAxMlx1ZmYwOFwwMTNcdWZmMDhcMDE0IiArCi0gICAgIlx1ZmYwOFwwMTVcdWZmMDhcMDE2XHVmZjA4XDAxN1x1ZmYwOFwwMjBcdWZmMDhcMDIxXHVmZjA4XDAyMlx1ZmYwOCIgKwotICAgICJcMDIzXHVmZjA4XDAyNFx1ZmYwOFwwMjVcdWZmMDhcMDMxXHVmZjM5XDAzMlx1ZmYwOFwwMzVcdWZmMDhcMDUzIiArCi0gICAgIlx1ZmYwOFwwNTRcdWZmMDhcMDU1XHVmZjA4XDA1Nlx1ZmYwOFwwNTdcdWZmMDhcMDYwXHVmZjA4XDA2MVx1ZmYwOCIgKwotICAgICJcMDYyXHVmZjA4XDA2M1x1ZmYwOFwwNjRcdWZmMDhcMDY1XHVmZjA4XDA2Nlx1ZmYwOFwwNjdcdWZmMDhcMDcxIiArCi0gICAgIlx1ZmYwOFwwNzNcdWZmMDhcMDc0XHVmZjA4XDA3NVx1ZmYwOFwwNzdcdWZmMDhcMTAwXHVmZjA4XDEwMVx1ZmYwOCIgKwotICAgICJcMTAyXHVmZjA4XDEwN1x1ZmYwOFwxMTBcdWZmMDhcMTExXHVmZjA4XDAwMVwwMDJcMDAwXDEzNlwwMDIiICsKLSAgICAiXHVmZjIwXDAwNFx1ZmYyMFwwMDVcdWZmMjBcMDA2XHVmZjIwXDAwN1x1ZmYyMFwwMTBcdWZmMjBcMDExXHVmZjIwIiArCi0gICAgIlwwMTJcdWZmMjBcMDEzXHVmZjIwXDAxNFx1ZmYyMFwwMTVcdWZmMjBcMDE2XHVmZjIwXDAxN1x1ZmYyMFwwMjAiICsKLSAgICAiXHVmZjIwXDAyMVx1ZmYyMFwwMjJcdWZmMjBcMDIzXHVmZjIwXDAyNFx1ZmYyMFwwMjVcdWZmMjBcMDMxXHVmZjIwIiArCi0gICAgIlwwMzJcdWZmMjBcMDM1XHVmZjIwXDA1M1x1ZmYyMFwwNTRcdWZmMjBcMDU1XHVmZjIwXDA1Nlx1ZmYyMFwwNTciICsKLSAgICAiXHVmZjIwXDA2MFx1ZmYyMFwwNjFcdWZmMjBcMDYyXHVmZjIwXDA2M1x1ZmYyMFwwNjRcdWZmMjBcMDY1XHVmZjIwIiArCi0gICAgIlwwNjZcdWZmMjBcMDY3XHVmZjIwXDA3MVx1ZmYyMFwwNzNcdWZmMjBcMDc0XHVmZjIwXDA3NVx1ZmYyMFwwNzciICsKLSAgICAiXHVmZjIwXDEwMFx1ZmYyMFwxMDFcdWZmMjBcMTAyXHVmZjIwXDEwN1x1ZmYyMFwxMTBcdWZmMjBcMTExXHVmZjIwIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMDBcMDAyXHVmZmU3XDAwNVx1ZmZlN1wwMDdcdWZmZTdcMDEwXHVmZmU3XDAxMSIgKwotICAgICJcdWZmZTdcMDEyXHUwMTAxXDAxNFx1ZmZlN1wwMTVcdWZmZTdcMDE2XHVmZmU3XDAxN1x1ZmZlN1wwMjBcdWZmZTciICsKLSAgICAiXDAyMVx1ZmZlN1wwMjJcdWZmZTdcMDIzXHVmZmU3XDAzMlx1ZmZlN1wwNTNcdWZmZTdcMDU0XHVmZmU3XDA1NSIgKwotICAgICJcdWZmZTdcMDU2XHVmZmU3XDA1N1x1ZmZlN1wwNjBcdWZmZTdcMDYxXHUwMTAzXDA2Mlx1MDEwNFwwNjNcdTAxMDIiICsKLSAgICAiXDA3NVx1ZmZlN1wxMDBcdWZmZTdcMTAxXHVmZmU3XDEwMlx1ZmZlN1wxMDdcdWZmZTdcMTEwXHVmZmU3XDExMSIgKwotICAgICJcdWZmZTdcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiYlwwMDVcdWZmYmJcMDA3XHVmZmJiXDAxMFx1ZmZiYiIgKwotICAgICJcMDExXHVmZmJiXDAxMlx1ZmZiYlwwMTNcdWZmYmJcMDE0XHVmZmJiXDAxNVx1ZmZiYlwwMTZcdWZmYmJcMDE3IiArCi0gICAgIlx1ZmZiYlwwMjBcdWZmYmJcMDIxXHVmZmJiXDAyMlx1ZmZiYlwwMjNcdWZmYmJcMDI0XDM3NVwwMjVcMzc2IiArCi0gICAgIlwwMzJcdWZmYmJcMDUzXHVmZmJiXDA1NFx1ZmZiYlwwNTVcdWZmYmJcMDU2XHVmZmJiXDA1N1x1ZmZiYlwwNjAiICsKLSAgICAiXHVmZmJiXDA2MVx1ZmZiYlwwNjJcdWZmYmJcMDYzXHVmZmJiXDA2NFx1ZmZiYlwwNjVcdWZmYmJcMDY2XHVmZmJiIiArCi0gICAgIlwwNjdcdWZmYmJcMDcxXHVmZmJiXDA3M1x1ZmZiYlwwNzRcdWZmYmJcMDc1XHVmZmJiXDEwMFx1ZmZiYlwxMDEiICsKLSAgICAiXHVmZmJiXDEwMlx1ZmZiYlwxMDdcdWZmYmJcMTEwXHVmZmJiXDExMVx1ZmZiYlwwMDFcMDAyXDAwMFwxMzAiICsKLSAgICAiXDAwMlx1ZmY3M1wwMDRcdWZmNzNcMDA1XHVmZjczXDAwN1x1ZmY3M1wwMTBcdWZmNzNcMDExXHVmZjczXDAxMiIgKwotICAgICJcdWZmNzNcMDEzXHVmZjczXDAxNFx1ZmY3M1wwMTVcdWZmNzNcMDE2XHVmZjczXDAxN1x1ZmY3M1wwMjBcdWZmNzMiICsKLSAgICAiXDAyMVx1ZmY3M1wwMjJcdWZmNzNcMDIzXHVmZjczXDAyNFx1ZmY3M1wwMjVcdWZmNzNcMDMyXHVmZjczXDAzNSIgKwotICAgICJcdWZmNzNcMDUzXHVmZjczXDA1NFx1ZmY3M1wwNTVcdWZmNzNcMDU2XHVmZjczXDA1N1x1ZmY3M1wwNjBcdWZmNzMiICsKLSAgICAiXDA2MVx1ZmY3M1wwNjJcdWZmNzNcMDYzXHVmZjczXDA2NFx1ZmY3M1wwNjVcdWZmNzNcMDY2XHVmZjczXDA2NyIgKwotICAgICJcdWZmNzNcMDcxXHVmZjczXDA3M1x1ZmY3M1wwNzRcdWZmNzNcMDc1XHVmZjczXDEwMFx1ZmY3M1wxMDFcdWZmNzMiICsKLSAgICAiXDEwMlx1ZmY3M1wxMDdcdWZmNzNcMTEwXHVmZjczXDExMVx1ZmY3M1wwMDFcMDAyXDAwMFwxMzZcMDAyIiArCi0gICAgIlx1ZmYyMVwwMDRcdWZmMjFcMDA1XHVmZjIxXDAwNlx1ZmYyMVwwMDdcdWZmMjFcMDEwXHVmZjIxXDAxMVx1ZmYyMSIgKwotICAgICJcMDEyXHVmZjIxXDAxM1x1ZmYyMVwwMTRcdWZmMjFcMDE1XHVmZjIxXDAxNlx1ZmYyMVwwMTdcdWZmMjFcMDIwIiArCi0gICAgIlx1ZmYyMVwwMjFcdWZmMjFcMDIyXHVmZjIxXDAyM1x1ZmYyMVwwMjRcdWZmMjFcMDI1XHVmZjIxXDAzMVx1ZmYyMSIgKwotICAgICJcMDMyXHVmZjIxXDAzNVx1ZmYyMVwwNTNcdWZmMjFcMDU0XHVmZjIxXDA1NVx1ZmYyMVwwNTZcdWZmMjFcMDU3IiArCi0gICAgIlx1ZmYyMVwwNjBcdWZmMjFcMDYxXHVmZjIxXDA2Mlx1ZmYyMVwwNjNcdWZmMjFcMDY0XHVmZjIxXDA2NVx1ZmYyMSIgKwotICAgICJcMDY2XHVmZjIxXDA2N1x1ZmYyMVwwNzFcdWZmMjFcMDczXHVmZjIxXDA3NFx1ZmYyMVwwNzVcdWZmMjFcMDc3IiArCi0gICAgIlx1ZmYyMVwxMDBcdWZmMjFcMTAxXHVmZjIxXDEwMlx1ZmYyMVwxMDdcdWZmMjFcMTEwXHVmZjIxXDExMVx1ZmYyMSIgKwotICAgICJcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYwM1wwMDRcdWZmMDNcMDA1XHVmZjAzXDAwNlx1ZmYwM1wwMDciICsKLSAgICAiXHVmZjAzXDAxMFx1ZmYwM1wwMTFcdWZmMDNcMDEyXHVmZjAzXDAxM1x1ZmYwM1wwMTRcdWZmMDNcMDE1XHVmZjAzIiArCi0gICAgIlwwMTZcdWZmMDNcMDE3XHVmZjAzXDAyMFx1ZmYwM1wwMjFcdWZmMDNcMDIyXHVmZjAzXDAyM1x1ZmYwM1wwMjQiICsKLSAgICAiXHVmZjAzXDAyNVx1ZmYwM1wwMzFcdWZmMzRcMDMyXHVmZjAzXDAzNVx1ZmYwM1wwNTNcdWZmMDNcMDU0XHVmZjAzIiArCi0gICAgIlwwNTVcdWZmMDNcMDU2XHVmZjAzXDA1N1x1ZmYwM1wwNjBcdWZmMDNcMDYxXHVmZjAzXDA2Mlx1ZmYwM1wwNjMiICsKLSAgICAiXHVmZjAzXDA2NFx1ZmYwM1wwNjVcdWZmMDNcMDY2XHVmZjAzXDA2N1x1ZmYwM1wwNzFcdWZmMDNcMDczXHVmZjAzIiArCi0gICAgIlwwNzRcdWZmMDNcMDc1XHVmZjAzXDA3N1x1ZmYwM1wxMDBcdWZmMDNcMTAxXHVmZjAzXDEwMlx1ZmYwM1wxMDciICsKLSAgICAiXHVmZjAzXDExMFx1ZmYwM1wxMTFcdWZmMDNcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NiIgKwotICAgICJcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzIiArCi0gICAgIlwwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDQiICsKLSAgICAiXDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MSIgKwotICAgICJcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1IiArCi0gICAgIlwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzUiICsKLSAgICAiXDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNSIgKwotICAgICJcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyIiArCi0gICAgIlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDEiICsKLSAgICAiXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyNyIgKwotICAgICJcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjAxXDAwNFx1ZmYwMSIgKwotICAgICJcMDA1XHVmZjAxXDAwNlx1ZmYwMVwwMDdcdWZmMDFcMDEwXHVmZjAxXDAxMVx1ZmYwMVwwMTJcdWZmMDFcMDEzIiArCi0gICAgIlx1ZmYwMVwwMTRcdWZmMDFcMDE1XHVmZjAxXDAxNlx1ZmYwMVwwMTdcdWZmMDFcMDIwXHVmZjAxXDAyMVx1ZmYwMSIgKwotICAgICJcMDIyXHVmZjAxXDAyM1x1ZmYwMVwwMjRcdWZmMDFcMDI1XHVmZjAxXDAzMVx1ZmYzMlwwMzJcdWZmMDFcMDM1IiArCi0gICAgIlx1ZmYwMVwwNTNcdWZmMDFcMDU0XHVmZjAxXDA1NVx1ZmYwMVwwNTZcdWZmMDFcMDU3XHVmZjAxXDA2MFx1ZmYwMSIgKwotICAgICJcMDYxXHVmZjAxXDA2Mlx1ZmYwMVwwNjNcdWZmMDFcMDY0XHVmZjAxXDA2NVx1ZmYwMVwwNjZcdWZmMDFcMDY3IiArCi0gICAgIlx1ZmYwMVwwNzFcdWZmMDFcMDczXHVmZjAxXDA3NFx1ZmYwMVwwNzVcdWZmMDFcMDc3XHVmZjAxXDEwMFx1ZmYwMSIgKwotICAgICJcMTAxXHVmZjAxXDEwMlx1ZmYwMVwxMDdcdWZmMDFcMTEwXHVmZjAxXDExMVx1ZmYwMVwwMDFcMDAyXDAwMCIgKwotICAgICJcMTI2XDAwMlx1ZmY5M1wwMDRcdWZmOTNcMDA1XHVmZjkzXDAwN1x1ZmY5M1wwMTBcdWZmOTNcMDExXHVmZjkzIiArCi0gICAgIlwwMTJcdWZmOTNcMDEzXHVmZjkzXDAxNFx1ZmY5M1wwMTVcdWZmOTNcMDE2XHVmZjkzXDAxN1x1ZmY5M1wwMjAiICsKLSAgICAiXHVmZjkzXDAyMVx1ZmY5M1wwMjJcdWZmOTNcMDIzXHVmZjkzXDAyNFx1ZmY5M1wwMjVcdWZmOTNcMDMyXHVmZjkzIiArCi0gICAgIlwwNTNcdWZmOTNcMDU0XHVmZjkzXDA1NVx1ZmY5M1wwNTZcdWZmOTNcMDU3XHVmZjkzXDA2MFx1ZmY5M1wwNjEiICsKLSAgICAiXHVmZjkzXDA2Mlx1ZmY5M1wwNjNcdWZmOTNcMDY0XHVmZjkzXDA2NVx1ZmY5M1wwNjZcdWZmOTNcMDY3XHVmZjkzIiArCi0gICAgIlwwNzFcdWZmOTNcMDczXHVmZjkzXDA3NFx1ZmY5M1wwNzVcdWZmOTNcMTAwXHVmZjkzXDEwMVx1ZmY5M1wxMDIiICsKLSAgICAiXHVmZjkzXDEwN1x1ZmY5M1wxMTBcdWZmOTNcMTExXHVmZjkzXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmYTYiICsKLSAgICAiXDAwNFx1ZmZhNlwwMDVcdWZmYTZcMDA3XHVmZmE2XDAxMFx1ZmZhNlwwMTFcdWZmYTZcMDEyXHVmZmE2XDAxMyIgKwotICAgICJcdWZmYTZcMDE0XHVmZmE2XDAxNVx1ZmZhNlwwMTZcdWZmYTZcMDE3XHVmZmE2XDAyMFx1ZmZhNlwwMjFcdWZmYTYiICsKLSAgICAiXDAyMlx1ZmZhNlwwMjNcdWZmYTZcMDI0XHVmZmE2XDAyNVx1ZmZhNlwwMzJcdWZmYTZcMDUzXHVmZmE2XDA1NCIgKwotICAgICJcdWZmYTZcMDU1XHVmZmE2XDA1Nlx1ZmZhNlwwNTdcdWZmYTZcMDYwXHVmZmE2XDA2MVx1ZmZhNlwwNjJcdWZmYTYiICsKLSAgICAiXDA2M1x1ZmZhNlwwNjRcdWZmYTZcMDY1XHVmZmE2XDA2Nlx1ZmZhNlwwNjdcdWZmYTZcMDcxXHVmZmE2XDA3MyIgKwotICAgICJcdWZmYTZcMDc0XHVmZmE2XDA3NVx1ZmZhNlwxMDBcdWZmYTZcMTAxXHVmZmE2XDEwMlx1ZmZhNlwxMDdcdWZmYTYiICsKLSAgICAiXDExMFx1ZmZhNlwxMTFcdWZmYTZcMDAxXDAwMlwwMDBcMDA0XDAzMVwzNzFcMDAxXDAwMlwwMDAiICsKLSAgICAiXDAwNlwwMDZcMzE3XDAzMVx1ZmYxZVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZWZmXDAwNFx1ZmVmZiIgKwotICAgICJcMDA1XHVmZWZmXDAwNlx1ZmVmZlwwMDdcdWZlZmZcMDEwXHVmZWZmXDAxMVx1ZmVmZlwwMTJcdWZlZmZcMDEzIiArCi0gICAgIlx1ZmVmZlwwMTRcdWZlZmZcMDE1XHVmZWZmXDAxNlx1ZmVmZlwwMTdcdWZlZmZcMDIwXHVmZWZmXDAyMVx1ZmVmZiIgKwotICAgICJcMDIyXHVmZWZmXDAyM1x1ZmVmZlwwMjRcdWZlZmZcMDI1XHVmZWZmXDAzMVx1ZmYzMFwwMzJcdWZlZmZcMDM1IiArCi0gICAgIlx1ZmVmZlwwNTNcdWZlZmZcMDU0XHVmZWZmXDA1NVx1ZmVmZlwwNTZcdWZlZmZcMDU3XHVmZWZmXDA2MFx1ZmVmZiIgKwotICAgICJcMDYxXHVmZWZmXDA2Mlx1ZmVmZlwwNjNcdWZlZmZcMDY0XHVmZWZmXDA2NVx1ZmVmZlwwNjZcdWZlZmZcMDY3IiArCi0gICAgIlx1ZmVmZlwwNzFcdWZlZmZcMDczXHVmZWZmXDA3NFx1ZmVmZlwwNzVcdWZlZmZcMDc3XHVmZWZmXDEwMFx1ZmVmZiIgKwotICAgICJcMTAxXHVmZWZmXDEwMlx1ZmVmZlwxMDdcdWZlZmZcMTEwXHVmZWZmXDExMVx1ZmVmZlwwMDFcMDAyXDAwMCIgKwotICAgICJcMTM2XDAwMlx1ZmVmN1wwMDRcdWZlZjdcMDA1XHVmZWY3XDAwNlx1ZmVmN1wwMDdcdWZlZjdcMDEwXHVmZWY3IiArCi0gICAgIlwwMTFcdWZlZjdcMDEyXHVmZWY3XDAxM1x1ZmVmN1wwMTRcdWZlZjdcMDE1XHVmZWY3XDAxNlx1ZmVmN1wwMTciICsKLSAgICAiXHVmZWY3XDAyMFx1ZmVmN1wwMjFcdWZlZjdcMDIyXHVmZWY3XDAyM1x1ZmVmN1wwMjRcdWZlZjdcMDI1XHVmZWY3IiArCi0gICAgIlwwMzFcdWZmMjdcMDMyXHVmZWY3XDAzNVx1ZmVmN1wwNTNcdWZlZjdcMDU0XHVmZWY3XDA1NVx1ZmVmN1wwNTYiICsKLSAgICAiXHVmZWY3XDA1N1x1ZmVmN1wwNjBcdWZlZjdcMDYxXHVmZWY3XDA2Mlx1ZmVmN1wwNjNcdWZlZjdcMDY0XHVmZWY3IiArCi0gICAgIlwwNjVcdWZlZjdcMDY2XHVmZWY3XDA2N1x1ZmVmN1wwNzFcdWZlZjdcMDczXHVmZWY3XDA3NFx1ZmVmN1wwNzUiICsKLSAgICAiXHVmZWY3XDA3N1x1ZmVmN1wxMDBcdWZlZjdcMTAxXHVmZWY3XDEwMlx1ZmVmN1wxMDdcdWZlZjdcMTEwXHVmZWY3IiArCi0gICAgIlwxMTFcdWZlZjdcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5NVwwMDRcdWZmOTVcMDA1XHVmZjk1XDAwNyIgKwotICAgICJcdWZmOTVcMDEwXHVmZjk1XDAxMVx1ZmY5NVwwMTJcdWZmOTVcMDEzXHVmZjk1XDAxNFx1ZmY5NVwwMTVcdWZmOTUiICsKLSAgICAiXDAxNlx1ZmY5NVwwMTdcdWZmOTVcMDIwXHVmZjk1XDAyMVx1ZmY5NVwwMjJcdWZmOTVcMDIzXHVmZjk1XDAyNCIgKwotICAgICJcdWZmOTVcMDI1XHVmZjk1XDAzMlx1ZmY5NVwwNTNcdWZmOTVcMDU0XHVmZjk1XDA1NVx1ZmY5NVwwNTZcdWZmOTUiICsKLSAgICAiXDA1N1x1ZmY5NVwwNjBcdWZmOTVcMDYxXHVmZjk1XDA2Mlx1ZmY5NVwwNjNcdWZmOTVcMDY0XHVmZjk1XDA2NSIgKwotICAgICJcdWZmOTVcMDY2XHVmZjk1XDA2N1x1ZmY5NVwwNzFcdWZmOTVcMDczXHVmZjk1XDA3NFx1ZmY5NVwwNzVcdWZmOTUiICsKLSAgICAiXDEwMFx1ZmY5NVwxMDFcdWZmOTVcMTAyXHVmZjk1XDEwN1x1ZmY5NVwxMTBcdWZmOTVcMTExXHVmZjk1XDAwMSIgKwotICAgICJcMDAyXDAwMFwwMTBcMDA2XDMwNFwwMjZcMzAzXDAzMVx1ZmY0NVwwMDFcMDAyXDAwMFwxMjAiICsKLSAgICAiXDAwMlx1ZmZkMVwwMDVcdWZmZDFcMDA3XHVmZmQxXDAxMFx1ZmZkMVwwMTFcdWZmZDFcMDEyXHVmZmQxXDAxMyIgKwotICAgICJcdWZmZDFcMDE0XHVmZmQxXDAxNVx1ZmZkMVwwMTZcdWZmZDFcMDE3XHVmZmQxXDAyMFx1ZmZkMVwwMjFcdWZmZDEiICsKLSAgICAiXDAyMlx1ZmZkMVwwMjNcdWZmZDFcMDMyXHVmZmQxXDA1M1x1ZmZkMVwwNTRcdWZmZDFcMDU1XHVmZmQxXDA1NiIgKwotICAgICJcdWZmZDFcMDU3XHVmZmQxXDA2MFx1ZmZkMVwwNjFcdWZmZDFcMDYyXHVmZmQxXDA2M1x1ZmZkMVwwNjRcdWZmZDEiICsKLSAgICAiXDA2NVx1ZmZkMVwwNjZcdWZmZDFcMDY3XHVmZmQxXDA3MVx1ZmZkMVwwNzNcdWZmZDFcMDc0XHVmZmQxXDA3NSIgKwotICAgICJcdWZmZDFcMTAwXHVmZmQxXDEwMVx1ZmZkMVwxMDJcdWZmZDFcMTA3XHVmZmQxXDExMFx1ZmZkMVwxMTFcdWZmZDEiICsKLSAgICAiXDAwMVwwMDJcMDAwXDAwNlwwMDZcMjc0XDAzMVx1ZmYyYlwwMDFcMDAyXDAwMFwxMjBcMDAyIiArCi0gICAgIlx1ZmZjZVwwMDVcdWZmY2VcMDA3XHVmZmNlXDAxMFx1ZmZjZVwwMTFcdWZmY2VcMDEyXHVmZmNlXDAxM1x1ZmZjZSIgKwotICAgICJcMDE0XHVmZmNlXDAxNVx1ZmZjZVwwMTZcdWZmY2VcMDE3XHVmZmNlXDAyMFx1ZmZjZVwwMjFcdWZmY2VcMDIyIiArCi0gICAgIlx1ZmZjZVwwMjNcdWZmY2VcMDMyXHVmZmNlXDA1M1x1ZmZjZVwwNTRcdWZmY2VcMDU1XHVmZmNlXDA1Nlx1ZmZjZSIgKwotICAgICJcMDU3XHVmZmNlXDA2MFx1ZmZjZVwwNjFcdWZmY2VcMDYyXHVmZmNlXDA2M1x1ZmZjZVwwNjRcdWZmY2VcMDY1IiArCi0gICAgIlx1ZmZjZVwwNjZcdWZmY2VcMDY3XHVmZmNlXDA3MVx1ZmZjZVwwNzNcdWZmY2VcMDc0XHVmZmNlXDA3NVx1ZmZjZSIgKwotICAgICJcMTAwXHVmZmNlXDEwMVx1ZmZjZVwxMDJcdWZmY2VcMTA3XHVmZmNlXDExMFx1ZmZjZVwxMTFcdWZmY2VcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNFwwMDJcdWZmNGVcMDA0XHVmZjRlXDAwNVx1ZmY0ZVwwMDZcdWZmNGVcMDA3XHVmZjRlIiArCi0gICAgIlwwMTBcdWZmNGVcMDExXHVmZjRlXDAxMlx1ZmY0ZVwwMTNcdWZmNGVcMDE0XHVmZjRlXDAxNVx1ZmY0ZVwwMTYiICsKLSAgICAiXHVmZjRlXDAxN1x1ZmY0ZVwwMjBcdWZmNGVcMDIxXHVmZjRlXDAyMlx1ZmY0ZVwwMjNcdWZmNGVcMDI0XHVmZjRlIiArCi0gICAgIlwwMjVcdWZmNGVcMDMyXHVmZjRlXDAzNVx1ZmY0ZVwwNTNcdWZmNGVcMDU0XHVmZjRlXDA1NVx1ZmY0ZVwwNTYiICsKLSAgICAiXHVmZjRlXDA1N1x1ZmY0ZVwwNjBcdWZmNGVcMDYxXHVmZjRlXDA2Mlx1ZmY0ZVwwNjNcdWZmNGVcMDY0XHVmZjRlIiArCi0gICAgIlwwNjVcdWZmNGVcMDY2XHVmZjRlXDA2N1x1ZmY0ZVwwNzFcdWZmNGVcMDczXHVmZjRlXDA3NFx1ZmY0ZVwwNzUiICsKLSAgICAiXHVmZjRlXDA3N1x1ZmY0ZVwxMDBcdWZmNGVcMTAxXHVmZjRlXDEwMlx1ZmY0ZVwxMDdcdWZmNGVcMTEwXHVmZjRlIiArCi0gICAgIlwxMTFcdWZmNGVcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY3MFwwMDRcdWZmNzBcMDA1XHVmZjcwXDAwNyIgKwotICAgICJcdWZmNzBcMDEwXHVmZjcwXDAxMVx1ZmY3MFwwMTJcdWZmNzBcMDEzXHVmZjcwXDAxNFx1ZmY3MFwwMTVcdWZmNzAiICsKLSAgICAiXDAxNlx1ZmY3MFwwMTdcdWZmNzBcMDIwXHVmZjcwXDAyMVx1ZmY3MFwwMjJcdWZmNzBcMDIzXHVmZjcwXDAyNCIgKwotICAgICJcdWZmNzBcMDI1XHVmZjcwXDAzMlx1ZmY3MFwwMzVcdWZmNzBcMDUzXHVmZjcwXDA1NFx1ZmY3MFwwNTVcdWZmNzAiICsKLSAgICAiXDA1Nlx1ZmY3MFwwNTdcdWZmNzBcMDYwXHVmZjcwXDA2MVx1ZmY3MFwwNjJcdWZmNzBcMDYzXHVmZjcwXDA2NCIgKwotICAgICJcdWZmNzBcMDY1XHVmZjcwXDA2Nlx1ZmY3MFwwNjdcdWZmNzBcMDcxXHVmZjcwXDA3M1x1ZmY3MFwwNzRcdWZmNzAiICsKLSAgICAiXDA3NVx1ZmY3MFwxMDBcdWZmNzBcMTAxXHVmZjcwXDEwMlx1ZmY3MFwxMDdcdWZmNzBcMTEwXHVmZjcwXDExMSIgKwotICAgICJcdWZmNzBcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYxYVwwMDRcdWZmMWFcMDA1XHVmZjFhXDAwNlx1ZmYxYSIgKwotICAgICJcMDA3XHVmZjFhXDAxMFx1ZmYxYVwwMTFcdWZmMWFcMDEyXHVmZjFhXDAxM1x1ZmYxYVwwMTRcdWZmMWFcMDE1IiArCi0gICAgIlx1ZmYxYVwwMTZcdWZmMWFcMDE3XHVmZjFhXDAyMFx1ZmYxYVwwMjFcdWZmMWFcMDIyXHVmZjFhXDAyM1x1ZmYxYSIgKwotICAgICJcMDI0XHVmZjFhXDAyNVx1ZmYxYVwwMzFcdWZmMWFcMDMyXHVmZjFhXDAzNVx1ZmYxYVwwNTNcdWZmMWFcMDU0IiArCi0gICAgIlx1ZmYxYVwwNTVcdWZmMWFcMDU2XHVmZjFhXDA1N1x1ZmYxYVwwNjBcdWZmMWFcMDYxXHVmZjFhXDA2Mlx1ZmYxYSIgKwotICAgICJcMDYzXHVmZjFhXDA2NFx1ZmYxYVwwNjVcdWZmMWFcMDY2XHVmZjFhXDA2N1x1ZmYxYVwwNzFcdWZmMWFcMDczIiArCi0gICAgIlx1ZmYxYVwwNzRcdWZmMWFcMDc1XHVmZjFhXDA3N1x1ZmYxYVwxMDBcdWZmMWFcMTAxXHVmZjFhXDEwMlx1ZmYxYSIgKwotICAgICJcMTA3XHVmZjFhXDExMFx1ZmYxYVwxMTFcdWZmMWFcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYwMlwwMDQiICsKLSAgICAiXHVmZjAyXDAwNVx1ZmYwMlwwMDZcdWZmMDJcMDA3XHVmZjAyXDAxMFx1ZmYwMlwwMTFcdWZmMDJcMDEyXHVmZjAyIiArCi0gICAgIlwwMTNcdWZmMDJcMDE0XHVmZjAyXDAxNVx1ZmYwMlwwMTZcdWZmMDJcMDE3XHVmZjAyXDAyMFx1ZmYwMlwwMjEiICsKLSAgICAiXHVmZjAyXDAyMlx1ZmYwMlwwMjNcdWZmMDJcMDI0XHVmZjAyXDAyNVx1ZmYwMlwwMzFcdWZmMzNcMDMyXHVmZjAyIiArCi0gICAgIlwwMzVcdWZmMDJcMDUzXHVmZjAyXDA1NFx1ZmYwMlwwNTVcdWZmMDJcMDU2XHVmZjAyXDA1N1x1ZmYwMlwwNjAiICsKLSAgICAiXHVmZjAyXDA2MVx1ZmYwMlwwNjJcdWZmMDJcMDYzXHVmZjAyXDA2NFx1ZmYwMlwwNjVcdWZmMDJcMDY2XHVmZjAyIiArCi0gICAgIlwwNjdcdWZmMDJcMDcxXHVmZjAyXDA3M1x1ZmYwMlwwNzRcdWZmMDJcMDc1XHVmZjAyXDA3N1x1ZmYwMlwxMDAiICsKLSAgICAiXHVmZjAyXDEwMVx1ZmYwMlwxMDJcdWZmMDJcMTA3XHVmZjAyXDExMFx1ZmYwMlwxMTFcdWZmMDJcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzNlwwMDJcdWZmMDVcMDA0XHVmZjA1XDAwNVx1ZmYwNVwwMDZcdWZmMDVcMDA3XHVmZjA1XDAxMCIgKwotICAgICJcdWZmMDVcMDExXHVmZjA1XDAxMlx1ZmYwNVwwMTNcdWZmMDVcMDE0XHVmZjA1XDAxNVx1ZmYwNVwwMTZcdWZmMDUiICsKLSAgICAiXDAxN1x1ZmYwNVwwMjBcdWZmMDVcMDIxXHVmZjA1XDAyMlx1ZmYwNVwwMjNcdWZmMDVcMDI0XHVmZjA1XDAyNSIgKwotICAgICJcdWZmMDVcMDMxXHVmZjM2XDAzMlx1ZmYwNVwwMzVcdWZmMDVcMDUzXHVmZjA1XDA1NFx1ZmYwNVwwNTVcdWZmMDUiICsKLSAgICAiXDA1Nlx1ZmYwNVwwNTdcdWZmMDVcMDYwXHVmZjA1XDA2MVx1ZmYwNVwwNjJcdWZmMDVcMDYzXHVmZjA1XDA2NCIgKwotICAgICJcdWZmMDVcMDY1XHVmZjA1XDA2Nlx1ZmYwNVwwNjdcdWZmMDVcMDcxXHVmZjA1XDA3M1x1ZmYwNVwwNzRcdWZmMDUiICsKLSAgICAiXDA3NVx1ZmYwNVwwNzdcdWZmMDVcMTAwXHVmZjA1XDEwMVx1ZmYwNVwxMDJcdWZmMDVcMTA3XHVmZjA1XDExMCIgKwotICAgICJcdWZmMDVcMTExXHVmZjA1XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMTRcMDA0XHVmZjE0XDAwNVx1ZmYxNCIgKwotICAgICJcMDA2XHVmZjE0XDAwN1x1ZmYxNFwwMTBcdWZmMTRcMDExXHVmZjE0XDAxMlx1ZmYxNFwwMTNcdWZmMTRcMDE0IiArCi0gICAgIlx1ZmYxNFwwMTVcdWZmMTRcMDE2XHVmZjE0XDAxN1x1ZmYxNFwwMjBcdWZmMTRcMDIxXHVmZjE0XDAyMlx1ZmYxNCIgKwotICAgICJcMDIzXHVmZjE0XDAyNFx1ZmYxNFwwMjVcdWZmMTRcMDI2XDI3M1wwMzFcdWZmNDZcMDMyXHVmZjE0XDA1MyIgKwotICAgICJcdWZmMTRcMDU0XHVmZjE0XDA1NVx1ZmYxNFwwNTZcdWZmMTRcMDU3XHVmZjE0XDA2MFx1ZmYxNFwwNjFcdWZmMTQiICsKLSAgICAiXDA2Mlx1ZmYxNFwwNjNcdWZmMTRcMDY0XHVmZjE0XDA2NVx1ZmYxNFwwNjZcdWZmMTRcMDY3XHVmZjE0XDA3MSIgKwotICAgICJcdWZmMTRcMDczXHVmZjE0XDA3NFx1ZmYxNFwwNzVcdWZmMTRcMTAwXHVmZjE0XDEwMVx1ZmYxNFwxMDJcdWZmMTQiICsKLSAgICAiXDEwN1x1ZmYxNFwxMTBcdWZmMTRcMTExXHVmZjE0XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZlZmNcMDA0IiArCi0gICAgIlx1ZmVmY1wwMDVcdWZlZmNcMDA2XHVmZWZjXDAwN1x1ZmVmY1wwMTBcdWZlZmNcMDExXHVmZWZjXDAxMlx1ZmVmYyIgKwotICAgICJcMDEzXHVmZWZjXDAxNFx1ZmVmY1wwMTVcdWZlZmNcMDE2XHVmZWZjXDAxN1x1ZmVmY1wwMjBcdWZlZmNcMDIxIiArCi0gICAgIlx1ZmVmY1wwMjJcdWZlZmNcMDIzXHVmZWZjXDAyNFx1ZmVmY1wwMjVcdWZlZmNcMDMxXHVmZjJkXDAzMlx1ZmVmYyIgKwotICAgICJcMDMzXDI1N1wwNTNcdWZlZmNcMDU0XHVmZWZjXDA1NVx1ZmVmY1wwNTZcdWZlZmNcMDU3XHVmZWZjXDA2MCIgKwotICAgICJcdWZlZmNcMDYxXHVmZWZjXDA2Mlx1ZmVmY1wwNjNcdWZlZmNcMDY0XHVmZWZjXDA2NVx1ZmVmY1wwNjZcdWZlZmMiICsKLSAgICAiXDA2N1x1ZmVmY1wwNzFcdWZlZmNcMDczXHVmZWZjXDA3NFx1ZmVmY1wwNzVcdWZlZmNcMTAwXHVmZWZjXDEwMSIgKwotICAgICJcdWZlZmNcMTAyXHVmZWZjXDEwN1x1ZmVmY1wxMTBcdWZlZmNcMTExXHVmZWZjXDAwMVwwMDJcMDAwXDAwNiIgKwotICAgICJcMDMyXDIyMVwxMDBcMjIyXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOWVcMDA0XHVmZjllXDAwNSIgKwotICAgICJcdWZmOWVcMDA3XHVmZjllXDAxMFx1ZmY5ZVwwMTFcdWZmOWVcMDEyXHVmZjllXDAxM1x1ZmY5ZVwwMTRcdWZmOWUiICsKLSAgICAiXDAxNVx1ZmY5ZVwwMTZcdWZmOWVcMDE3XHVmZjllXDAyMFx1ZmY5ZVwwMjFcdWZmOWVcMDIyXHVmZjllXDAyMyIgKwotICAgICJcdWZmOWVcMDI0XHVmZjllXDAyNVx1ZmY5ZVwwMzJcdWZmOWVcMDUzXHVmZjllXDA1NFx1ZmY5ZVwwNTVcdWZmOWUiICsKLSAgICAiXDA1Nlx1ZmY5ZVwwNTdcdWZmOWVcMDYwXHVmZjllXDA2MVx1ZmY5ZVwwNjJcdWZmOWVcMDYzXHVmZjllXDA2NCIgKwotICAgICJcdWZmOWVcMDY1XHVmZjllXDA2Nlx1ZmY5ZVwwNjdcdWZmOWVcMDcxXHVmZjllXDA3M1x1ZmY5ZVwwNzRcdWZmOWUiICsKLSAgICAiXDA3NVx1ZmY5ZVwxMDBcdWZmOWVcMTAxXHVmZjllXDEwMlx1ZmY5ZVwxMDdcdWZmOWVcMTEwXHVmZjllXDExMSIgKwotICAgICJcdWZmOWVcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5N1wwMDRcdWZmOTdcMDA1XHVmZjk3XDAwN1x1ZmY5NyIgKwotICAgICJcMDEwXHVmZjk3XDAxMVx1ZmY5N1wwMTJcdWZmOTdcMDEzXHVmZjk3XDAxNFx1ZmY5N1wwMTVcdWZmOTdcMDE2IiArCi0gICAgIlx1ZmY5N1wwMTdcdWZmOTdcMDIwXHVmZjk3XDAyMVx1ZmY5N1wwMjJcdWZmOTdcMDIzXHVmZjk3XDAyNFx1ZmY5NyIgKwotICAgICJcMDI1XHVmZjk3XDAzMlx1ZmY5N1wwNTNcdWZmOTdcMDU0XHVmZjk3XDA1NVx1ZmY5N1wwNTZcdWZmOTdcMDU3IiArCi0gICAgIlx1ZmY5N1wwNjBcdWZmOTdcMDYxXHVmZjk3XDA2Mlx1ZmY5N1wwNjNcdWZmOTdcMDY0XHVmZjk3XDA2NVx1ZmY5NyIgKwotICAgICJcMDY2XHVmZjk3XDA2N1x1ZmY5N1wwNzFcdWZmOTdcMDczXHVmZjk3XDA3NFx1ZmY5N1wwNzVcdWZmOTdcMTAwIiArCi0gICAgIlx1ZmY5N1wxMDFcdWZmOTdcMTAyXHVmZjk3XDEwN1x1ZmY5N1wxMTBcdWZmOTdcMTExXHVmZjk3XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzBcMDAyXHVmZjZmXDAwNFx1ZmY2ZlwwMDVcdWZmNmZcMDA3XHVmZjZmXDAxMFx1ZmY2ZlwwMTEiICsKLSAgICAiXHVmZjZmXDAxMlx1ZmY2ZlwwMTNcdWZmNmZcMDE0XHVmZjZmXDAxNVx1ZmY2ZlwwMTZcdWZmNmZcMDE3XHVmZjZmIiArCi0gICAgIlwwMjBcdWZmNmZcMDIxXHVmZjZmXDAyMlx1ZmY2ZlwwMjNcdWZmNmZcMDI0XHVmZjZmXDAyNVx1ZmY2ZlwwMzIiICsKLSAgICAiXHVmZjZmXDAzNVx1ZmY2ZlwwNTNcdWZmNmZcMDU0XHVmZjZmXDA1NVx1ZmY2ZlwwNTZcdWZmNmZcMDU3XHVmZjZmIiArCi0gICAgIlwwNjBcdWZmNmZcMDYxXHVmZjZmXDA2Mlx1ZmY2ZlwwNjNcdWZmNmZcMDY0XHVmZjZmXDA2NVx1ZmY2ZlwwNjYiICsKLSAgICAiXHVmZjZmXDA2N1x1ZmY2ZlwwNzFcdWZmNmZcMDczXHVmZjZmXDA3NFx1ZmY2ZlwwNzVcdWZmNmZcMTAwXHVmZjZmIiArCi0gICAgIlwxMDFcdWZmNmZcMTAyXHVmZjZmXDEwN1x1ZmY2ZlwxMTBcdWZmNmZcMTExXHVmZjZmXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMjZcMDAyXHVmZmIyXDAwNFx1ZmZiMlwwMDVcdWZmYjJcMDA3XHVmZmIyXDAxMFx1ZmZiMlwwMTFcdWZmYjIiICsKLSAgICAiXDAxMlx1ZmZiMlwwMTNcdWZmYjJcMDE0XHVmZmIyXDAxNVx1ZmZiMlwwMTZcdWZmYjJcMDE3XHVmZmIyXDAyMCIgKwotICAgICJcdWZmYjJcMDIxXHVmZmIyXDAyMlx1ZmZiMlwwMjNcdWZmYjJcMDI0XHVmZmIyXDAyNVx1ZmZiMlwwMzJcdWZmYjIiICsKLSAgICAiXDA1M1x1ZmZiMlwwNTRcdWZmYjJcMDU1XHVmZmIyXDA1Nlx1ZmZiMlwwNTdcdWZmYjJcMDYwXHVmZmIyXDA2MSIgKwotICAgICJcdWZmYjJcMDYyXHVmZmIyXDA2M1x1ZmZiMlwwNjRcdWZmYjJcMDY1XHVmZmIyXDA2Nlx1ZmZiMlwwNjdcdWZmYjIiICsKLSAgICAiXDA3MVx1ZmZiMlwwNzNcdWZmYjJcMDc0XHVmZmIyXDA3NVx1ZmZiMlwxMDBcdWZmYjJcMTAxXHVmZmIyXDEwMiIgKwotICAgICJcdWZmYjJcMTA3XHVmZmIyXDExMFx1ZmZiMlwxMTFcdWZmYjJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY4ZSIgKwotICAgICJcMDA0XHVmZjhlXDAwNVx1ZmY4ZVwwMDdcdWZmOGVcMDEwXHVmZjhlXDAxMVx1ZmY4ZVwwMTJcdWZmOGVcMDEzIiArCi0gICAgIlx1ZmY4ZVwwMTRcdWZmOGVcMDE1XHVmZjhlXDAxNlx1ZmY4ZVwwMTdcdWZmOGVcMDIwXHVmZjhlXDAyMVx1ZmY4ZSIgKwotICAgICJcMDIyXHVmZjhlXDAyM1x1ZmY4ZVwwMjRcdWZmOGVcMDI1XHVmZjhlXDAzMlx1ZmY4ZVwwNTNcdWZmOGVcMDU0IiArCi0gICAgIlx1ZmY4ZVwwNTVcdWZmOGVcMDU2XHVmZjhlXDA1N1x1ZmY4ZVwwNjBcdWZmOGVcMDYxXHVmZjhlXDA2Mlx1ZmY4ZSIgKwotICAgICJcMDYzXHVmZjhlXDA2NFx1ZmY4ZVwwNjVcdWZmOGVcMDY2XHVmZjhlXDA2N1x1ZmY4ZVwwNzFcdWZmOGVcMDczIiArCi0gICAgIlx1ZmY4ZVwwNzRcdWZmOGVcMDc1XHVmZjhlXDEwMFx1ZmY4ZVwxMDFcdWZmOGVcMTAyXHVmZjhlXDEwN1x1ZmY4ZSIgKwotICAgICJcMTEwXHVmZjhlXDExMVx1ZmY4ZVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjkwXDAwNFx1ZmY5MFwwMDUiICsKLSAgICAiXHVmZjkwXDAwN1x1ZmY5MFwwMTBcdWZmOTBcMDExXHVmZjkwXDAxMlx1ZmY5MFwwMTNcdWZmOTBcMDE0XHVmZjkwIiArCi0gICAgIlwwMTVcdWZmOTBcMDE2XHVmZjkwXDAxN1x1ZmY5MFwwMjBcdWZmOTBcMDIxXHVmZjkwXDAyMlx1ZmY5MFwwMjMiICsKLSAgICAiXHVmZjkwXDAyNFx1ZmY5MFwwMjVcdWZmOTBcMDMyXHVmZjkwXDA1M1x1ZmY5MFwwNTRcdWZmOTBcMDU1XHVmZjkwIiArCi0gICAgIlwwNTZcdWZmOTBcMDU3XHVmZjkwXDA2MFx1ZmY5MFwwNjFcdWZmOTBcMDYyXHVmZjkwXDA2M1x1ZmY5MFwwNjQiICsKLSAgICAiXHVmZjkwXDA2NVx1ZmY5MFwwNjZcdWZmOTBcMDY3XHVmZjkwXDA3MVx1ZmY5MFwwNzNcdWZmOTBcMDc0XHVmZjkwIiArCi0gICAgIlwwNzVcdWZmOTBcMTAwXHVmZjkwXDEwMVx1ZmY5MFwxMDJcdWZmOTBcMTA3XHVmZjkwXDExMFx1ZmY5MFwxMTEiICsKLSAgICAiXHVmZjkwXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmNTBcMDA0XHVmZjUwXDAwNVx1ZmY1MFwwMDdcdWZmNTAiICsKLSAgICAiXDAxMFx1ZmY1MFwwMTFcdWZmNTBcMDEyXHVmZjUwXDAxM1x1ZmY1MFwwMTRcdWZmNTBcMDE1XHVmZjUwXDAxNiIgKwotICAgICJcdWZmNTBcMDE3XHVmZjUwXDAyMFx1ZmY1MFwwMjFcdWZmNTBcMDIyXHVmZjUwXDAyM1x1ZmY1MFwwMjRcdWZmNTAiICsKLSAgICAiXDAyNVx1ZmY1MFwwMzJcdWZmNTBcMDUzXHVmZjUwXDA1NFx1ZmY1MFwwNTVcdWZmNTBcMDU2XHVmZjUwXDA1NyIgKwotICAgICJcdWZmNTBcMDYwXHVmZjUwXDA2MVx1ZmY1MFwwNjJcdWZmNTBcMDYzXHVmZjUwXDA2NFx1ZmY1MFwwNjVcdWZmNTAiICsKLSAgICAiXDA2Nlx1ZmY1MFwwNjdcdWZmNTBcMDcxXHVmZjUwXDA3M1x1ZmY1MFwwNzRcdWZmNTBcMDc1XHVmZjUwXDEwMCIgKwotICAgICJcdWZmNTBcMTAxXHVmZjUwXDEwMlx1ZmY1MFwxMDdcdWZmNTBcMTEwXHVmZjUwXDExMVx1ZmY1MFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTI2XDAwMlx1ZmZhOFwwMDRcdWZmYThcMDA1XHVmZmE4XDAwN1x1ZmZhOFwwMTBcdWZmYThcMDExIiArCi0gICAgIlx1ZmZhOFwwMTJcdWZmYThcMDEzXHVmZmE4XDAxNFx1ZmZhOFwwMTVcdWZmYThcMDE2XHVmZmE4XDAxN1x1ZmZhOCIgKwotICAgICJcMDIwXHVmZmE4XDAyMVx1ZmZhOFwwMjJcdWZmYThcMDIzXHVmZmE4XDAyNFx1ZmZhOFwwMjVcdWZmYThcMDMyIiArCi0gICAgIlx1ZmZhOFwwNTNcdWZmYThcMDU0XHVmZmE4XDA1NVx1ZmZhOFwwNTZcdWZmYThcMDU3XHVmZmE4XDA2MFx1ZmZhOCIgKwotICAgICJcMDYxXHVmZmE4XDA2Mlx1ZmZhOFwwNjNcdWZmYThcMDY0XHVmZmE4XDA2NVx1ZmZhOFwwNjZcdWZmYThcMDY3IiArCi0gICAgIlx1ZmZhOFwwNzFcdWZmYThcMDczXHVmZmE4XDA3NFx1ZmZhOFwwNzVcdWZmYThcMTAwXHVmZmE4XDEwMVx1ZmZhOCIgKwotICAgICJcMTAyXHVmZmE4XDEwN1x1ZmZhOFwxMTBcdWZmYThcMTExXHVmZmE4XDAwMVwwMDJcMDAwXDEzNlwwMDIiICsKLSAgICAiXHVmZWZkXDAwNFx1ZmVmZFwwMDVcdWZlZmRcMDA2XHVmZWZkXDAwN1x1ZmVmZFwwMTBcdWZlZmRcMDExXHVmZWZkIiArCi0gICAgIlwwMTJcdWZlZmRcMDEzXHVmZWZkXDAxNFx1ZmVmZFwwMTVcdWZlZmRcMDE2XHVmZWZkXDAxN1x1ZmVmZFwwMjAiICsKLSAgICAiXHVmZWZkXDAyMVx1ZmVmZFwwMjJcdWZlZmRcMDIzXHVmZWZkXDAyNFx1ZmVmZFwwMjVcdWZlZmRcMDMxXHVmZjJlIiArCi0gICAgIlwwMzJcdWZlZmRcMDM1XHVmZWZkXDA1M1x1ZmVmZFwwNTRcdWZlZmRcMDU1XHVmZWZkXDA1Nlx1ZmVmZFwwNTciICsKLSAgICAiXHVmZWZkXDA2MFx1ZmVmZFwwNjFcdWZlZmRcMDYyXHVmZWZkXDA2M1x1ZmVmZFwwNjRcdWZlZmRcMDY1XHVmZWZkIiArCi0gICAgIlwwNjZcdWZlZmRcMDY3XHVmZWZkXDA3MVx1ZmVmZFwwNzNcdWZlZmRcMDc0XHVmZWZkXDA3NVx1ZmVmZFwwNzciICsKLSAgICAiXHVmZWZkXDEwMFx1ZmVmZFwxMDFcdWZlZmRcMTAyXHVmZWZkXDEwN1x1ZmVmZFwxMTBcdWZlZmRcMTExXHVmZWZkIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMTBcMDAyXHVmZmRmXDAwNVx1ZmZkZlwwMDdcdWZmZGZcMDEwXHVmZmRmXDAxMSIgKwotICAgICJcdWZmZGZcMDEyXHVmZmRmXDAxM1x1ZmZkZlwwMTRcdWZmZGZcMDE1XHVmZmRmXDAxNlx1ZmZkZlwwMTdcdWZmZGYiICsKLSAgICAiXDAyMFx1ZmZkZlwwMjFcdWZmZGZcMDIyXHVmZmRmXDAyM1x1ZmZkZlwwMzJcdWZmZGZcMDUzXHVmZmRmXDA1NCIgKwotICAgICJcdWZmZGZcMDU1XHVmZmRmXDA1Nlx1ZmZkZlwwNTdcdWZmZGZcMDYwXHVmZmRmXDA2MVx1ZmZkZlwwNjJcdWZmZGYiICsKLSAgICAiXDA2M1x1ZmZkZlwwNjRcdWZmZGZcMDY1XDIwN1wwNjZcMjA2XDA3NVx1ZmZkZlwxMDBcdWZmZGZcMTAxIiArCi0gICAgIlx1ZmZkZlwxMDJcdWZmZGZcMTA3XHVmZmRmXDExMFx1ZmZkZlwxMTFcdWZmZGZcMDAxXDAwMlwwMDBcMTM2IiArCi0gICAgIlwwMDJcdWZlZjhcMDA0XHVmZWY4XDAwNVx1ZmVmOFwwMDZcdWZlZjhcMDA3XHVmZWY4XDAxMFx1ZmVmOFwwMTEiICsKLSAgICAiXHVmZWY4XDAxMlx1ZmVmOFwwMTNcdWZlZjhcMDE0XHVmZWY4XDAxNVx1ZmVmOFwwMTZcdWZlZjhcMDE3XHVmZWY4IiArCi0gICAgIlwwMjBcdWZlZjhcMDIxXHVmZWY4XDAyMlx1ZmVmOFwwMjNcdWZlZjhcMDI0XHVmZWY4XDAyNVx1ZmVmOFwwMzEiICsKLSAgICAiXHVmZjI4XDAzMlx1ZmVmOFwwMzVcdWZlZjhcMDUzXHVmZWY4XDA1NFx1ZmVmOFwwNTVcdWZlZjhcMDU2XHVmZWY4IiArCi0gICAgIlwwNTdcdWZlZjhcMDYwXHVmZWY4XDA2MVx1ZmVmOFwwNjJcdWZlZjhcMDYzXHVmZWY4XDA2NFx1ZmVmOFwwNjUiICsKLSAgICAiXHVmZWY4XDA2Nlx1ZmVmOFwwNjdcdWZlZjhcMDcxXHVmZWY4XDA3M1x1ZmVmOFwwNzRcdWZlZjhcMDc1XHVmZWY4IiArCi0gICAgIlwwNzdcdWZlZjhcMTAwXHVmZWY4XDEwMVx1ZmVmOFwxMDJcdWZlZjhcMTA3XHVmZWY4XDExMFx1ZmVmOFwxMTEiICsKLSAgICAiXHVmZWY4XDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOGZcMDA0XHVmZjhmXDAwNVx1ZmY4ZlwwMDdcdWZmOGYiICsKLSAgICAiXDAxMFx1ZmY4ZlwwMTFcdWZmOGZcMDEyXHVmZjhmXDAxM1x1ZmY4ZlwwMTRcdWZmOGZcMDE1XHVmZjhmXDAxNiIgKwotICAgICJcdWZmOGZcMDE3XHVmZjhmXDAyMFx1ZmY4ZlwwMjFcdWZmOGZcMDIyXHVmZjhmXDAyM1x1ZmY4ZlwwMjRcdWZmOGYiICsKLSAgICAiXDAyNVx1ZmY4ZlwwMzJcdWZmOGZcMDUzXHVmZjhmXDA1NFx1ZmY4ZlwwNTVcdWZmOGZcMDU2XHVmZjhmXDA1NyIgKwotICAgICJcdWZmOGZcMDYwXHVmZjhmXDA2MVx1ZmY4ZlwwNjJcdWZmOGZcMDYzXHVmZjhmXDA2NFx1ZmY4ZlwwNjVcdWZmOGYiICsKLSAgICAiXDA2Nlx1ZmY4ZlwwNjdcdWZmOGZcMDcxXHVmZjhmXDA3M1x1ZmY4ZlwwNzRcdWZmOGZcMDc1XHVmZjhmXDEwMCIgKwotICAgICJcdWZmOGZcMTAxXHVmZjhmXDEwMlx1ZmY4ZlwxMDdcdWZmOGZcMTEwXHVmZjhmXDExMVx1ZmY4ZlwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM2XDAwMlx1ZmYxNlwwMDRcdWZmMTZcMDA1XHVmZjE2XDAwNlx1ZmYxNlwwMDdcdWZmMTZcMDEwIiArCi0gICAgIlx1ZmYxNlwwMTFcdWZmMTZcMDEyXHVmZjE2XDAxM1x1ZmYxNlwwMTRcdWZmMTZcMDE1XHVmZjE2XDAxNlx1ZmYxNiIgKwotICAgICJcMDE3XHVmZjE2XDAyMFx1ZmYxNlwwMjFcdWZmMTZcMDIyXHVmZjE2XDAyM1x1ZmYxNlwwMjRcdWZmMTZcMDI1IiArCi0gICAgIlx1ZmYxNlwwMzFcdWZmNDhcMDMyXHVmZjE2XDAzNVx1ZmYxNlwwNTNcdWZmMTZcMDU0XHVmZjE2XDA1NVx1ZmYxNiIgKwotICAgICJcMDU2XHVmZjE2XDA1N1x1ZmYxNlwwNjBcdWZmMTZcMDYxXHVmZjE2XDA2Mlx1ZmYxNlwwNjNcdWZmMTZcMDY0IiArCi0gICAgIlx1ZmYxNlwwNjVcdWZmMTZcMDY2XHVmZjE2XDA2N1x1ZmYxNlwwNzFcdWZmMTZcMDczXHVmZjE2XDA3NFx1ZmYxNiIgKwotICAgICJcMDc1XHVmZjE2XDA3N1x1ZmYxNlwxMDBcdWZmMTZcMTAxXHVmZjE2XDEwMlx1ZmYxNlwxMDdcdWZmMTZcMTEwIiArCi0gICAgIlx1ZmYxNlwxMTFcdWZmMTZcMDAxXDAwMlwwMDBcMDI0XDAwMlx1ZmZmMVwwMDVcdWZmZjFcMDA3XHVmZmYxIiArCi0gICAgIlwwMzJcdWZmZjFcMTAwXHVmZmYxXDEwMVx1ZmZmMVwxMDdcdWZmZjFcMTEwXDIwMFwxMTFcdWZmZjFcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEyNFwwMDJcdWZmYmFcMDA1XHVmZmJhXDAwN1x1ZmZiYVwwMTBcdWZmYmFcMDExXHVmZmJhIiArCi0gICAgIlwwMTJcdWZmYmFcMDEzXHVmZmJhXDAxNFx1ZmZiYVwwMTVcdWZmYmFcMDE2XHVmZmJhXDAxN1x1ZmZiYVwwMjAiICsKLSAgICAiXHVmZmJhXDAyMVx1ZmZiYVwwMjJcdWZmYmFcMDIzXHVmZmJhXDAyNFx1ZmZiYVwwMjVcdWZmYmFcMDMyXHVmZmJhIiArCi0gICAgIlwwNTNcdWZmYmFcMDU0XHVmZmJhXDA1NVx1ZmZiYVwwNTZcdWZmYmFcMDU3XHVmZmJhXDA2MFx1ZmZiYVwwNjEiICsKLSAgICAiXHVmZmJhXDA2Mlx1ZmZiYVwwNjNcdWZmYmFcMDY0XHVmZmJhXDA2NVx1ZmZiYVwwNjZcdWZmYmFcMDY3XHVmZmJhIiArCi0gICAgIlwwNzFcdWZmYmFcMDczXHVmZmJhXDA3NFx1ZmZiYVwwNzVcdWZmYmFcMTAwXHVmZmJhXDEwMVx1ZmZiYVwxMDIiICsKLSAgICAiXHVmZmJhXDEwN1x1ZmZiYVwxMTBcdWZmYmFcMTExXHVmZmJhXDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxIiArCi0gICAgIlwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzAiICsKLSAgICAiXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NSIgKwotICAgICJcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwIiArCi0gICAgIlwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDIiICsKLSAgICAiXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NCIgKwotICAgICJcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1IiArCi0gICAgIlwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTEiICsKLSAgICAiXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNCIgKwotICAgICJcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2IiArCi0gICAgIlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmVmYiIgKwotICAgICJcMDA0XHVmZWZiXDAwNVx1ZmVmYlwwMDZcdWZlZmJcMDA3XHVmZWZiXDAxMFx1ZmVmYlwwMTFcdWZlZmJcMDEyIiArCi0gICAgIlx1ZmVmYlwwMTNcdWZlZmJcMDE0XHVmZWZiXDAxNVx1ZmVmYlwwMTZcdWZlZmJcMDE3XHVmZWZiXDAyMFx1ZmVmYiIgKwotICAgICJcMDIxXHVmZWZiXDAyMlx1ZmVmYlwwMjNcdWZlZmJcMDI0XHVmZWZiXDAyNVx1ZmVmYlwwMzFcdWZmMmNcMDMyIiArCi0gICAgIlx1ZmVmYlwwMzVcdWZlZmJcMDUzXHVmZWZiXDA1NFx1ZmVmYlwwNTVcdWZlZmJcMDU2XHVmZWZiXDA1N1x1ZmVmYiIgKwotICAgICJcMDYwXHVmZWZiXDA2MVx1ZmVmYlwwNjJcdWZlZmJcMDYzXHVmZWZiXDA2NFx1ZmVmYlwwNjVcdWZlZmJcMDY2IiArCi0gICAgIlx1ZmVmYlwwNjdcdWZlZmJcMDcxXHVmZWZiXDA3M1x1ZmVmYlwwNzRcdWZlZmJcMDc1XHVmZWZiXDA3N1x1ZmVmYiIgKwotICAgICJcMTAwXHVmZWZiXDEwMVx1ZmVmYlwxMDJcdWZlZmJcMTA3XHVmZWZiXDExMFx1ZmVmYlwxMTFcdWZlZmJcMDAxIiArCi0gICAgIlwwMDJcMDAwXDAyNFwwMDJcdWZmZWVcMDA1XHVmZmVlXDAwN1x1ZmZlZVwwMzJcdWZmZWVcMTAwXHVmZmVlIiArCi0gICAgIlwxMDFcdWZmZWVcMTA3XHVmZmVlXDExMFx1ZmZlZVwxMTFcdWZmZWVcMDAxXDAwMlwwMDBcMTM2XDAwMiIgKwotICAgICJcdWZmMDBcMDA0XHVmZjAwXDAwNVx1ZmYwMFwwMDZcdWZmMDBcMDA3XHVmZjAwXDAxMFx1ZmYwMFwwMTFcdWZmMDAiICsKLSAgICAiXDAxMlx1ZmYwMFwwMTNcdWZmMDBcMDE0XHVmZjAwXDAxNVx1ZmYwMFwwMTZcdWZmMDBcMDE3XHVmZjAwXDAyMCIgKwotICAgICJcdWZmMDBcMDIxXHVmZjAwXDAyMlx1ZmYwMFwwMjNcdWZmMDBcMDI0XHVmZjAwXDAyNVx1ZmYwMFwwMzFcdWZmMzEiICsKLSAgICAiXDAzMlx1ZmYwMFwwMzVcdWZmMDBcMDUzXHVmZjAwXDA1NFx1ZmYwMFwwNTVcdWZmMDBcMDU2XHVmZjAwXDA1NyIgKwotICAgICJcdWZmMDBcMDYwXHVmZjAwXDA2MVx1ZmYwMFwwNjJcdWZmMDBcMDYzXHVmZjAwXDA2NFx1ZmYwMFwwNjVcdWZmMDAiICsKLSAgICAiXDA2Nlx1ZmYwMFwwNjdcdWZmMDBcMDcxXHVmZjAwXDA3M1x1ZmYwMFwwNzRcdWZmMDBcMDc1XHVmZjAwXDA3NyIgKwotICAgICJcdWZmMDBcMTAwXHVmZjAwXDEwMVx1ZmYwMFwxMDJcdWZmMDBcMTA3XHVmZjAwXDExMFx1ZmYwMFwxMTFcdWZmMDAiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMmJcMDA0XHVmZjJiXDAwNVx1ZmYyYlwwMDZcdWZmMmJcMDA3IiArCi0gICAgIlx1ZmYyYlwwMTBcdWZmMmJcMDExXHVmZjJiXDAxMlx1ZmYyYlwwMTNcdWZmMmJcMDE0XHVmZjJiXDAxNVx1ZmYyYiIgKwotICAgICJcMDE2XHVmZjJiXDAxN1x1ZmYyYlwwMjBcdWZmMmJcMDIxXHVmZjJiXDAyMlx1ZmYyYlwwMjNcdWZmMmJcMDI0IiArCi0gICAgIlx1ZmYyYlwwMjVcdWZmMmJcMDMxXHVmZjJiXDAzMlx1ZmYyYlwwMzVcdWZmMmJcMDUzXHVmZjJiXDA1NFx1ZmYyYiIgKwotICAgICJcMDU1XHVmZjJiXDA1Nlx1ZmYyYlwwNTdcdWZmMmJcMDYwXHVmZjJiXDA2MVx1ZmYyYlwwNjJcdWZmMmJcMDYzIiArCi0gICAgIlx1ZmYyYlwwNjRcdWZmMmJcMDY1XHVmZjJiXDA2Nlx1ZmYyYlwwNjdcdWZmMmJcMDcxXHVmZjJiXDA3M1x1ZmYyYiIgKwotICAgICJcMDc0XHVmZjJiXDA3NVx1ZmYyYlwwNzdcdWZmMmJcMTAwXHVmZjJiXDEwMVx1ZmYyYlwxMDJcdWZmMmJcMTA3IiArCi0gICAgIlx1ZmYyYlwxMTBcdWZmMmJcMTExXHVmZjJiXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZlZmNcMDA0XHVmZWZjIiArCi0gICAgIlwwMDVcdWZlZmNcMDA2XHVmZWZjXDAwN1x1ZmVmY1wwMTBcdWZlZmNcMDExXHVmZWZjXDAxMlx1ZmVmY1wwMTMiICsKLSAgICAiXHVmZWZjXDAxNFx1ZmVmY1wwMTVcdWZlZmNcMDE2XHVmZWZjXDAxN1x1ZmVmY1wwMjBcdWZlZmNcMDIxXHVmZWZjIiArCi0gICAgIlwwMjJcdWZlZmNcMDIzXHVmZWZjXDAyNFx1ZmVmY1wwMjVcdWZlZmNcMDMxXHVmZjJkXDAzMlx1ZmVmY1wwMzUiICsKLSAgICAiXHVmZWZjXDA1M1x1ZmVmY1wwNTRcdWZlZmNcMDU1XHVmZWZjXDA1Nlx1ZmVmY1wwNTdcdWZlZmNcMDYwXHVmZWZjIiArCi0gICAgIlwwNjFcdWZlZmNcMDYyXHVmZWZjXDA2M1x1ZmVmY1wwNjRcdWZlZmNcMDY1XHVmZWZjXDA2Nlx1ZmVmY1wwNjciICsKLSAgICAiXHVmZWZjXDA3MVx1ZmVmY1wwNzNcdWZlZmNcMDc0XHVmZWZjXDA3NVx1ZmVmY1wwNzdcdWZlZmNcMTAwXHVmZWZjIiArCi0gICAgIlwxMDFcdWZlZmNcMTAyXHVmZWZjXDEwN1x1ZmVmY1wxMTBcdWZlZmNcMTExXHVmZWZjXDAwMVwwMDJcMDAwIiArCi0gICAgIlwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDYiICsKLSAgICAiXDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MCIgKwotICAgICJcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyIiArCi0gICAgIlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjMiICsKLSAgICAiXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyMyIgKwotICAgICJcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxIiArCi0gICAgIlwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTQiICsKLSAgICAiXDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNiIgKwotICAgICJcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzIiArCi0gICAgIlwxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDAiICsKLSAgICAiXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNiIgKwotICAgICJcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwIiArCi0gICAgIlwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTIiICsKLSAgICAiXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2MyIgKwotICAgICJcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzIiArCi0gICAgIlwwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDEiICsKLSAgICAiXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNCIgKwotICAgICJcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2IiArCi0gICAgIlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTMiICsKLSAgICAiXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMCIgKwotICAgICJcMTEwXDAwMlx1ZmZkYlwwMDVcdWZmZGJcMDA3XHVmZmRiXDAxMFx1ZmZkYlwwMTFcdWZmZGJcMDEyXHVmZmRiIiArCi0gICAgIlwwMTNcdWZmZGJcMDE0XHVmZmRiXDAxNVx1ZmZkYlwwMTZcdWZmZGJcMDE3XHVmZmRiXDAyMFx1ZmZkYlwwMjEiICsKLSAgICAiXHVmZmRiXDAyMlx1ZmZkYlwwMjNcdWZmZGJcMDMyXHVmZmRiXDA1M1x1ZmZkYlwwNTRcdWZmZGJcMDU1XHVmZmRiIiArCi0gICAgIlwwNTZcdWZmZGJcMDU3XHVmZmRiXDA2MFx1ZmZkYlwwNjFcdWZmZGJcMDYyXHVmZmRiXDA2M1x1ZmZkYlwwNjQiICsKLSAgICAiXHVmZmRiXDA2NVx1ZmZkYlwwNjZcdWZmZGJcMDc1XHVmZmRiXDEwMFx1ZmZkYlwxMDFcdWZmZGJcMTAyXHVmZmRiIiArCi0gICAgIlwxMDdcdWZmZGJcMTEwXHVmZmRiXDExMVx1ZmZkYlwwMDFcMDAyXDAwMFwxMTBcMDAyXHVmZmRhXDAwNSIgKwotICAgICJcdWZmZGFcMDA3XHVmZmRhXDAxMFx1ZmZkYVwwMTFcdWZmZGFcMDEyXHVmZmRhXDAxM1x1ZmZkYVwwMTRcdWZmZGEiICsKLSAgICAiXDAxNVx1ZmZkYVwwMTZcdWZmZGFcMDE3XHVmZmRhXDAyMFx1ZmZkYVwwMjFcdWZmZGFcMDIyXHVmZmRhXDAyMyIgKwotICAgICJcdWZmZGFcMDMyXHVmZmRhXDA1M1x1ZmZkYVwwNTRcdWZmZGFcMDU1XHVmZmRhXDA1Nlx1ZmZkYVwwNTdcdWZmZGEiICsKLSAgICAiXDA2MFx1ZmZkYVwwNjFcdWZmZGFcMDYyXHVmZmRhXDA2M1x1ZmZkYVwwNjRcdWZmZGFcMDY1XHVmZmRhXDA2NiIgKwotICAgICJcdWZmZGFcMDc1XHVmZmRhXDEwMFx1ZmZkYVwxMDFcdWZmZGFcMTAyXHVmZmRhXDEwN1x1ZmZkYVwxMTBcdWZmZGEiICsKLSAgICAiXDExMVx1ZmZkYVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjk5XDAwNFwyMTRcMDA1XHVmZjk5XDAwNyIgKwotICAgICJcdWZmOTlcMDEwXHVmZjk5XDAxMVx1ZmY5OVwwMTJcdWZmOTlcMDEzXHVmZjk5XDAxNFx1ZmY5OVwwMTVcdWZmOTkiICsKLSAgICAiXDAxNlx1ZmY5OVwwMTdcdWZmOTlcMDIwXHVmZjk5XDAyMVx1ZmY5OVwwMjJcdWZmOTlcMDIzXHVmZjk5XDAyNCIgKwotICAgICJcdWZmOTlcMDI1XHVmZjk5XDAzMlx1ZmY5OVwwNTNcdWZmOTlcMDU0XHVmZjk5XDA1NVx1ZmY5OVwwNTZcdWZmOTkiICsKLSAgICAiXDA1N1x1ZmY5OVwwNjBcdWZmOTlcMDYxXHVmZjk5XDA2Mlx1ZmY5OVwwNjNcdWZmOTlcMDY0XHVmZjk5XDA2NSIgKwotICAgICJcdWZmOTlcMDY2XHVmZjk5XDA2N1x1ZmY5OVwwNzFcdWZmOTlcMDczXHVmZjk5XDA3NFx1ZmY5OVwwNzVcdWZmOTkiICsKLSAgICAiXDEwMFx1ZmY5OVwxMDFcdWZmOTlcMTAyXHVmZjk5XDEwN1x1ZmY5OVwxMTBcdWZmOTlcMTExXHVmZjk5XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMjZcMDAyXHVmZjk4XDAwNFx1ZmY5OFwwMDVcdWZmOThcMDA3XHVmZjk4XDAxMFx1ZmY5OCIgKwotICAgICJcMDExXHVmZjk4XDAxMlx1ZmY5OFwwMTNcdWZmOThcMDE0XHVmZjk4XDAxNVx1ZmY5OFwwMTZcdWZmOThcMDE3IiArCi0gICAgIlx1ZmY5OFwwMjBcdWZmOThcMDIxXHVmZjk4XDAyMlx1ZmY5OFwwMjNcdWZmOThcMDI0XHVmZjk4XDAyNVx1ZmY5OCIgKwotICAgICJcMDMyXHVmZjk4XDA1M1x1ZmY5OFwwNTRcdWZmOThcMDU1XHVmZjk4XDA1Nlx1ZmY5OFwwNTdcdWZmOThcMDYwIiArCi0gICAgIlx1ZmY5OFwwNjFcdWZmOThcMDYyXHVmZjk4XDA2M1x1ZmY5OFwwNjRcdWZmOThcMDY1XHVmZjk4XDA2Nlx1ZmY5OCIgKwotICAgICJcMDY3XHVmZjk4XDA3MVx1ZmY5OFwwNzNcdWZmOThcMDc0XHVmZjk4XDA3NVx1ZmY5OFwxMDBcdWZmOThcMTAxIiArCi0gICAgIlx1ZmY5OFwxMDJcdWZmOThcMTA3XHVmZjk4XDExMFx1ZmY5OFwxMTFcdWZmOThcMDAxXDAwMlwwMDBcMjAwIiArCi0gICAgIlwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjciICsKLSAgICAiXDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NSIgKwotICAgICJcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3IiArCi0gICAgIlwwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjciICsKLSAgICAiXDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3MyIgKwotICAgICJcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMTA2XDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxIiArCi0gICAgIlwxMDJcMTc1XDEwM1wxNTdcMTA0XDA0NlwxMDVcMTQ3XDEwNlwwNTJcMTA3XDExNFwxMTAiICsKLSAgICAiXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0NyIgKwotICAgICJcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1IiArCi0gICAgIlwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMDYiICsKLSAgICAiXDAwNVwyMTdcMDMyXDIxNlwwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMSIgKwotICAgICJcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxIiArCi0gICAgIlwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDMiICsKLSAgICAiXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NiIgKwotICAgICJcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2IiArCi0gICAgIlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzUiICsKLSAgICAiXDA3NlwxMDZcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMTU3XDEwNCIgKwotICAgICJcMDQ2XDEwNVwxNDdcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyIiArCi0gICAgIlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjEiICsKLSAgICAiXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNCIgKwotICAgICJcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOTZcMDA0XHVmZjk2XDAwNSIgKwotICAgICJcdWZmOTZcMDA3XHVmZjk2XDAxMFx1ZmY5NlwwMTFcdWZmOTZcMDEyXHVmZjk2XDAxM1x1ZmY5NlwwMTRcdWZmOTYiICsKLSAgICAiXDAxNVx1ZmY5NlwwMTZcdWZmOTZcMDE3XHVmZjk2XDAyMFx1ZmY5NlwwMjFcdWZmOTZcMDIyXHVmZjk2XDAyMyIgKwotICAgICJcdWZmOTZcMDI0XHVmZjk2XDAyNVx1ZmY5NlwwMzJcdWZmOTZcMDUzXHVmZjk2XDA1NFx1ZmY5NlwwNTVcdWZmOTYiICsKLSAgICAiXDA1Nlx1ZmY5NlwwNTdcdWZmOTZcMDYwXHVmZjk2XDA2MVx1ZmY5NlwwNjJcdWZmOTZcMDYzXHVmZjk2XDA2NCIgKwotICAgICJcdWZmOTZcMDY1XHVmZjk2XDA2Nlx1ZmY5NlwwNjdcdWZmOTZcMDcxXHVmZjk2XDA3M1x1ZmY5NlwwNzRcdWZmOTYiICsKLSAgICAiXDA3NVx1ZmY5NlwxMDBcdWZmOTZcMTAxXHVmZjk2XDEwMlx1ZmY5NlwxMDdcdWZmOTZcMTEwXHVmZjk2XDExMSIgKwotICAgICJcdWZmOTZcMDAxXDAwMlwwMDBcMDEyXDAwMlx1ZmZmZVwwMDVcdWZmZmVcMDA3XHVmZmZlXDAzMlx1ZmZmZSIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA0XDAzM1wyMjRcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwIiArCi0gICAgIlwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTciICsKLSAgICAiXDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MiIgKwotICAgICJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwIiArCi0gICAgIlwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjUiICsKLSAgICAiXDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NCIgKwotICAgICJcMDc1XDEzNVwwNzZcMTA2XDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzIiArCi0gICAgIlwxNTdcMTA0XDA0NlwxMDVcMTQ3XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDMiICsKLSAgICAiXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMCIgKwotICAgICJcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1IiArCi0gICAgIlwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMjBcMDAyXHVmZmY5XDAwNSIgKwotICAgICJcdWZmZjlcMDA3XHVmZmY5XDAzMlx1ZmZmOVwxMDBcdWZmZjlcMTAxXHVmZmY5XDEwN1x1ZmZmOVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTQ2XDAxMlwyMzNcMDM2XDIzMlwwMzdcMjQwXDA0MFwyNTJcMDQxXDI0MVwwNDIiICsKLSAgICAiXDIzN1wwNDNcMjM2XDA0NFwyNTBcMDQ1XDIyNlwwNDZcMjQ2XDA0N1wyNDRcMDUwXDIyNSIgKwotICAgICJcMDUxXDI0MlwwNTJcMjQzXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1IiArCi0gICAgIlwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTQiICsKLSAgICAiXDA3NVwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwMyIgKwotICAgICJcMjA1XDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzIiArCi0gICAgIlwxMTJcMTMyXDExM1wxMjZcMTE0XDI1M1wxMTVcMjQ3XDExNlwyNTFcMTE3XDIyN1wxMjAiICsKLSAgICAiXDIzNFwxMjFcMjMwXDEyMlwyNDVcMTIzXDIzNVwxMjRcMTUzXDEzMVwxMjNcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzNFwwMDJcdWZmMGNcMDA0XHVmZjBjXDAwNVx1ZmYwY1wwMDdcdWZmMGNcMDEwXHVmZjBjXDAxMSIgKwotICAgICJcdWZmMGNcMDEyXHVmZjBjXDAxM1x1ZmYwY1wwMTRcdWZmMGNcMDE1XHVmZjBjXDAxNlx1ZmYwY1wwMTdcdWZmMGMiICsKLSAgICAiXDAyMFx1ZmYwY1wwMjFcdWZmMGNcMDIyXHVmZjBjXDAyM1x1ZmYwY1wwMjRcdWZmMGNcMDI1XHVmZjBjXDAzMSIgKwotICAgICJcdWZmM2RcMDMyXHVmZjBjXDAzNVx1ZmYwY1wwNTNcdWZmMGNcMDU0XHVmZjBjXDA1NVx1ZmYwY1wwNTZcdWZmMGMiICsKLSAgICAiXDA1N1x1ZmYwY1wwNjBcdWZmMGNcMDYxXHVmZjBjXDA2Mlx1ZmYwY1wwNjNcdWZmMGNcMDY0XHVmZjBjXDA2NSIgKwotICAgICJcdWZmMGNcMDY2XHVmZjBjXDA2N1x1ZmYwY1wwNzFcdWZmMGNcMDczXHVmZjBjXDA3NFx1ZmYwY1wwNzVcdWZmMGMiICsKLSAgICAiXDA3N1x1ZmYwY1wxMDBcdWZmMGNcMTAxXHVmZjBjXDEwMlx1ZmYwY1wxMDdcdWZmMGNcMTEwXHVmZjBjXDExMSIgKwotICAgICJcdWZmMGNcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYwZlwwMDRcdWZmMGZcMDA1XHVmZjBmXDAwN1x1ZmYwZiIgKwotICAgICJcMDEwXHVmZjBmXDAxMVx1ZmYwZlwwMTJcdWZmMGZcMDEzXHVmZjBmXDAxNFx1ZmYwZlwwMTVcdWZmMGZcMDE2IiArCi0gICAgIlx1ZmYwZlwwMTdcdWZmMGZcMDIwXHVmZjBmXDAyMVx1ZmYwZlwwMjJcdWZmMGZcMDIzXHVmZjBmXDAyNFx1ZmYwZiIgKwotICAgICJcMDI1XHVmZjBmXDAzMVx1ZmY0MFwwMzJcdWZmMGZcMDM1XHVmZjBmXDA1M1x1ZmYwZlwwNTRcdWZmMGZcMDU1IiArCi0gICAgIlx1ZmYwZlwwNTZcdWZmMGZcMDU3XHVmZjBmXDA2MFx1ZmYwZlwwNjFcdWZmMGZcMDYyXHVmZjBmXDA2M1x1ZmYwZiIgKwotICAgICJcMDY0XHVmZjBmXDA2NVx1ZmYwZlwwNjZcdWZmMGZcMDY3XHVmZjBmXDA3MVx1ZmYwZlwwNzNcdWZmMGZcMDc0IiArCi0gICAgIlx1ZmYwZlwwNzVcdWZmMGZcMDc3XHVmZjBmXDEwMFx1ZmYwZlwxMDFcdWZmMGZcMTAyXHVmZjBmXDEwN1x1ZmYwZiIgKwotICAgICJcMTEwXHVmZjBmXDExMVx1ZmYwZlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjI0XDAwNFx1ZmYyNFwwMDUiICsKLSAgICAiXHVmZjI0XDAwNlx1ZmYyNFwwMDdcdWZmMjRcMDEwXHVmZjI0XDAxMVx1ZmYyNFwwMTJcdWZmMjRcMDEzXHVmZjI0IiArCi0gICAgIlwwMTRcdWZmMjRcMDE1XHVmZjI0XDAxNlx1ZmYyNFwwMTdcdWZmMjRcMDIwXHVmZjI0XDAyMVx1ZmYyNFwwMjIiICsKLSAgICAiXHVmZjI0XDAyM1x1ZmYyNFwwMjRcdWZmMjRcMDI1XHVmZjI0XDAzMVx1ZmYyNFwwMzJcdWZmMjRcMDM1XHVmZjI0IiArCi0gICAgIlwwNTNcdWZmMjRcMDU0XHVmZjI0XDA1NVx1ZmYyNFwwNTZcdWZmMjRcMDU3XHVmZjI0XDA2MFx1ZmYyNFwwNjEiICsKLSAgICAiXHVmZjI0XDA2Mlx1ZmYyNFwwNjNcdWZmMjRcMDY0XHVmZjI0XDA2NVx1ZmYyNFwwNjZcdWZmMjRcMDY3XHVmZjI0IiArCi0gICAgIlwwNzFcdWZmMjRcMDczXHVmZjI0XDA3NFx1ZmYyNFwwNzVcdWZmMjRcMDc3XHVmZjI0XDEwMFx1ZmYyNFwxMDEiICsKLSAgICAiXHVmZjI0XDEwMlx1ZmYyNFwxMDdcdWZmMjRcMTEwXHVmZjI0XDExMVx1ZmYyNFwwMDFcMDAyXDAwMFwxMzYiICsKLSAgICAiXDAwMlx1ZmYxZFwwMDRcdWZmMWRcMDA1XHVmZjFkXDAwNlx1ZmYxZFwwMDdcdWZmMWRcMDEwXHVmZjFkXDAxMSIgKwotICAgICJcdWZmMWRcMDEyXHVmZjFkXDAxM1x1ZmYxZFwwMTRcdWZmMWRcMDE1XHVmZjFkXDAxNlx1ZmYxZFwwMTdcdWZmMWQiICsKLSAgICAiXDAyMFx1ZmYxZFwwMjFcdWZmMWRcMDIyXHVmZjFkXDAyM1x1ZmYxZFwwMjRcdWZmMWRcMDI1XHVmZjFkXDAzMSIgKwotICAgICJcdWZmMWRcMDMyXHVmZjFkXDAzNVx1ZmYxZFwwNTNcdWZmMWRcMDU0XHVmZjFkXDA1NVx1ZmYxZFwwNTZcdWZmMWQiICsKLSAgICAiXDA1N1x1ZmYxZFwwNjBcdWZmMWRcMDYxXHVmZjFkXDA2Mlx1ZmYxZFwwNjNcdWZmMWRcMDY0XHVmZjFkXDA2NSIgKwotICAgICJcdWZmMWRcMDY2XHVmZjFkXDA2N1x1ZmYxZFwwNzFcdWZmMWRcMDczXHVmZjFkXDA3NFx1ZmYxZFwwNzVcdWZmMWQiICsKLSAgICAiXDA3N1x1ZmYxZFwxMDBcdWZmMWRcMTAxXHVmZjFkXDEwMlx1ZmYxZFwxMDdcdWZmMWRcMTEwXHVmZjFkXDExMSIgKwotICAgICJcdWZmMWRcMDAxXDAwMlwwMDBcMDA0XDA3N1wyNTVcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxNSIgKwotICAgICJcMDA0XHVmZjE1XDAwNVx1ZmYxNVwwMDdcdWZmMTVcMDEwXHVmZjE1XDAxMVx1ZmYxNVwwMTJcdWZmMTVcMDEzIiArCi0gICAgIlx1ZmYxNVwwMTRcdWZmMTVcMDE1XHVmZjE1XDAxNlx1ZmYxNVwwMTdcdWZmMTVcMDIwXHVmZjE1XDAyMVx1ZmYxNSIgKwotICAgICJcMDIyXHVmZjE1XDAyM1x1ZmYxNVwwMjRcdWZmMTVcMDI1XHVmZjE1XDAzMVx1ZmY0N1wwMzJcdWZmMTVcMDM1IiArCi0gICAgIlx1ZmYxNVwwNTNcdWZmMTVcMDU0XHVmZjE1XDA1NVx1ZmYxNVwwNTZcdWZmMTVcMDU3XHVmZjE1XDA2MFx1ZmYxNSIgKwotICAgICJcMDYxXHVmZjE1XDA2Mlx1ZmYxNVwwNjNcdWZmMTVcMDY0XHVmZjE1XDA2NVx1ZmYxNVwwNjZcdWZmMTVcMDY3IiArCi0gICAgIlx1ZmYxNVwwNzFcdWZmMTVcMDczXHVmZjE1XDA3NFx1ZmYxNVwwNzVcdWZmMTVcMDc3XHVmZjE1XDEwMFx1ZmYxNSIgKwotICAgICJcMTAxXHVmZjE1XDEwMlx1ZmYxNVwxMDdcdWZmMTVcMTEwXHVmZjE1XDExMVx1ZmYxNVwwMDFcMDAyXDAwMCIgKwotICAgICJcMTM2XDAwMlx1ZmYxOFwwMDRcdWZmMThcMDA1XHVmZjE4XDAwNlx1ZmYxOFwwMDdcdWZmMThcMDEwXHVmZjE4IiArCi0gICAgIlwwMTFcdWZmMThcMDEyXHVmZjE4XDAxM1x1ZmYxOFwwMTRcdWZmMThcMDE1XHVmZjE4XDAxNlx1ZmYxOFwwMTciICsKLSAgICAiXHVmZjE4XDAyMFx1ZmYxOFwwMjFcdWZmMThcMDIyXHVmZjE4XDAyM1x1ZmYxOFwwMjRcdWZmMThcMDI1XHVmZjE4IiArCi0gICAgIlwwMzFcdWZmMThcMDMyXHVmZjE4XDAzNVx1ZmYxOFwwNTNcdWZmMThcMDU0XHVmZjE4XDA1NVx1ZmYxOFwwNTYiICsKLSAgICAiXHVmZjE4XDA1N1x1ZmYxOFwwNjBcdWZmMThcMDYxXHVmZjE4XDA2Mlx1ZmYxOFwwNjNcdWZmMThcMDY0XHVmZjE4IiArCi0gICAgIlwwNjVcdWZmMThcMDY2XHVmZjE4XDA2N1x1ZmYxOFwwNzFcdWZmMThcMDczXHVmZjE4XDA3NFx1ZmYxOFwwNzUiICsKLSAgICAiXHVmZjE4XDA3N1x1ZmYxOFwxMDBcdWZmMThcMTAxXHVmZjE4XDEwMlx1ZmYxOFwxMDdcdWZmMThcMTEwXHVmZjE4IiArCi0gICAgIlwxMTFcdWZmMThcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYxZVwwMDRcdWZmMWVcMDA1XHVmZjFlXDAwNiIgKwotICAgICJcdWZmMWVcMDA3XHVmZjFlXDAxMFx1ZmYxZVwwMTFcdWZmMWVcMDEyXHVmZjFlXDAxM1x1ZmYxZVwwMTRcdWZmMWUiICsKLSAgICAiXDAxNVx1ZmYxZVwwMTZcdWZmMWVcMDE3XHVmZjFlXDAyMFx1ZmYxZVwwMjFcdWZmMWVcMDIyXHVmZjFlXDAyMyIgKwotICAgICJcdWZmMWVcMDI0XHVmZjFlXDAyNVx1ZmYxZVwwMzFcdWZmMWVcMDMyXHVmZjFlXDAzNVx1ZmYxZVwwNTNcdWZmMWUiICsKLSAgICAiXDA1NFx1ZmYxZVwwNTVcdWZmMWVcMDU2XHVmZjFlXDA1N1x1ZmYxZVwwNjBcdWZmMWVcMDYxXHVmZjFlXDA2MiIgKwotICAgICJcdWZmMWVcMDYzXHVmZjFlXDA2NFx1ZmYxZVwwNjVcdWZmMWVcMDY2XHVmZjFlXDA2N1x1ZmYxZVwwNzFcdWZmMWUiICsKLSAgICAiXDA3M1x1ZmYxZVwwNzRcdWZmMWVcMDc1XHVmZjFlXDA3N1x1ZmYxZVwxMDBcdWZmMWVcMTAxXHVmZjFlXDEwMiIgKwotICAgICJcdWZmMWVcMTA3XHVmZjFlXDExMFx1ZmYxZVwxMTFcdWZmMWVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYxYyIgKwotICAgICJcMDA0XHVmZjFjXDAwNVx1ZmYxY1wwMDZcdWZmMWNcMDA3XHVmZjFjXDAxMFx1ZmYxY1wwMTFcdWZmMWNcMDEyIiArCi0gICAgIlx1ZmYxY1wwMTNcdWZmMWNcMDE0XHVmZjFjXDAxNVx1ZmYxY1wwMTZcdWZmMWNcMDE3XHVmZjFjXDAyMFx1ZmYxYyIgKwotICAgICJcMDIxXHVmZjFjXDAyMlx1ZmYxY1wwMjNcdWZmMWNcMDI0XHVmZjFjXDAyNVx1ZmYxY1wwMzFcdWZmMWNcMDMyIiArCi0gICAgIlx1ZmYxY1wwMzVcdWZmMWNcMDUzXHVmZjFjXDA1NFx1ZmYxY1wwNTVcdWZmMWNcMDU2XHVmZjFjXDA1N1x1ZmYxYyIgKwotICAgICJcMDYwXHVmZjFjXDA2MVx1ZmYxY1wwNjJcdWZmMWNcMDYzXHVmZjFjXDA2NFx1ZmYxY1wwNjVcdWZmMWNcMDY2IiArCi0gICAgIlx1ZmYxY1wwNjdcdWZmMWNcMDcxXHVmZjFjXDA3M1x1ZmYxY1wwNzRcdWZmMWNcMDc1XHVmZjFjXDA3N1x1ZmYxYyIgKwotICAgICJcMTAwXHVmZjFjXDEwMVx1ZmYxY1wxMDJcdWZmMWNcMTA3XHVmZjFjXDExMFx1ZmYxY1wxMTFcdWZmMWNcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNFwwMDJcdWZmMTFcMDA0XHVmZjExXDAwNVx1ZmYxMVwwMDdcdWZmMTFcMDEwXHVmZjExIiArCi0gICAgIlwwMTFcdWZmMTFcMDEyXHVmZjExXDAxM1x1ZmYxMVwwMTRcdWZmMTFcMDE1XHVmZjExXDAxNlx1ZmYxMVwwMTciICsKLSAgICAiXHVmZjExXDAyMFx1ZmYxMVwwMjFcdWZmMTFcMDIyXHVmZjExXDAyM1x1ZmYxMVwwMjRcdWZmMTFcMDI1XHVmZjExIiArCi0gICAgIlwwMzFcdWZmNDJcMDMyXHVmZjExXDAzNVx1ZmYxMVwwNTNcdWZmMTFcMDU0XHVmZjExXDA1NVx1ZmYxMVwwNTYiICsKLSAgICAiXHVmZjExXDA1N1x1ZmYxMVwwNjBcdWZmMTFcMDYxXHVmZjExXDA2Mlx1ZmYxMVwwNjNcdWZmMTFcMDY0XHVmZjExIiArCi0gICAgIlwwNjVcdWZmMTFcMDY2XHVmZjExXDA2N1x1ZmYxMVwwNzFcdWZmMTFcMDczXHVmZjExXDA3NFx1ZmYxMVwwNzUiICsKLSAgICAiXHVmZjExXDA3N1x1ZmYxMVwxMDBcdWZmMTFcMTAxXHVmZjExXDEwMlx1ZmYxMVwxMDdcdWZmMTFcMTEwXHVmZjExIiArCi0gICAgIlwxMTFcdWZmMTFcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxMlwwMDRcdWZmMTJcMDA1XHVmZjEyXDAwNyIgKwotICAgICJcdWZmMTJcMDEwXHVmZjEyXDAxMVx1ZmYxMlwwMTJcdWZmMTJcMDEzXHVmZjEyXDAxNFx1ZmYxMlwwMTVcdWZmMTIiICsKLSAgICAiXDAxNlx1ZmYxMlwwMTdcdWZmMTJcMDIwXHVmZjEyXDAyMVx1ZmYxMlwwMjJcdWZmMTJcMDIzXHVmZjEyXDAyNCIgKwotICAgICJcdWZmMTJcMDI1XHVmZjEyXDAzMVx1ZmY0M1wwMzJcdWZmMTJcMDM1XHVmZjEyXDA1M1x1ZmYxMlwwNTRcdWZmMTIiICsKLSAgICAiXDA1NVx1ZmYxMlwwNTZcdWZmMTJcMDU3XHVmZjEyXDA2MFx1ZmYxMlwwNjFcdWZmMTJcMDYyXHVmZjEyXDA2MyIgKwotICAgICJcdWZmMTJcMDY0XHVmZjEyXDA2NVx1ZmYxMlwwNjZcdWZmMTJcMDY3XHVmZjEyXDA3MVx1ZmYxMlwwNzNcdWZmMTIiICsKLSAgICAiXDA3NFx1ZmYxMlwwNzVcdWZmMTJcMDc3XHVmZjEyXDEwMFx1ZmYxMlwxMDFcdWZmMTJcMTAyXHVmZjEyXDEwNyIgKwotICAgICJcdWZmMTJcMTEwXHVmZjEyXDExMVx1ZmYxMlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjE0XDAwNFx1ZmYxNCIgKwotICAgICJcMDA1XHVmZjE0XDAwN1x1ZmYxNFwwMTBcdWZmMTRcMDExXHVmZjE0XDAxMlx1ZmYxNFwwMTNcdWZmMTRcMDE0IiArCi0gICAgIlx1ZmYxNFwwMTVcdWZmMTRcMDE2XHVmZjE0XDAxN1x1ZmYxNFwwMjBcdWZmMTRcMDIxXHVmZjE0XDAyMlx1ZmYxNCIgKwotICAgICJcMDIzXHVmZjE0XDAyNFx1ZmYxNFwwMjVcdWZmMTRcMDMxXHVmZjQ2XDAzMlx1ZmYxNFwwMzVcdWZmMTRcMDUzIiArCi0gICAgIlx1ZmYxNFwwNTRcdWZmMTRcMDU1XHVmZjE0XDA1Nlx1ZmYxNFwwNTdcdWZmMTRcMDYwXHVmZjE0XDA2MVx1ZmYxNCIgKwotICAgICJcMDYyXHVmZjE0XDA2M1x1ZmYxNFwwNjRcdWZmMTRcMDY1XHVmZjE0XDA2Nlx1ZmYxNFwwNjdcdWZmMTRcMDcxIiArCi0gICAgIlx1ZmYxNFwwNzNcdWZmMTRcMDc0XHVmZjE0XDA3NVx1ZmYxNFwwNzdcdWZmMTRcMTAwXHVmZjE0XDEwMVx1ZmYxNCIgKwotICAgICJcMTAyXHVmZjE0XDEwN1x1ZmYxNFwxMTBcdWZmMTRcMTExXHVmZjE0XDAwMVwwMDJcMDAwXDEzNFwwMDIiICsKLSAgICAiXHVmZjEzXDAwNFx1ZmYxM1wwMDVcdWZmMTNcMDA3XHVmZjEzXDAxMFx1ZmYxM1wwMTFcdWZmMTNcMDEyXHVmZjEzIiArCi0gICAgIlwwMTNcdWZmMTNcMDE0XHVmZjEzXDAxNVx1ZmYxM1wwMTZcdWZmMTNcMDE3XHVmZjEzXDAyMFx1ZmYxM1wwMjEiICsKLSAgICAiXHVmZjEzXDAyMlx1ZmYxM1wwMjNcdWZmMTNcMDI0XHVmZjEzXDAyNVx1ZmYxM1wwMzFcdWZmNDRcMDMyXHVmZjEzIiArCi0gICAgIlwwMzVcdWZmMTNcMDUzXHVmZjEzXDA1NFx1ZmYxM1wwNTVcdWZmMTNcMDU2XHVmZjEzXDA1N1x1ZmYxM1wwNjAiICsKLSAgICAiXHVmZjEzXDA2MVx1ZmYxM1wwNjJcdWZmMTNcMDYzXHVmZjEzXDA2NFx1ZmYxM1wwNjVcdWZmMTNcMDY2XHVmZjEzIiArCi0gICAgIlwwNjdcdWZmMTNcMDcxXHVmZjEzXDA3M1x1ZmYxM1wwNzRcdWZmMTNcMDc1XHVmZjEzXDA3N1x1ZmYxM1wxMDAiICsKLSAgICAiXHVmZjEzXDEwMVx1ZmYxM1wxMDJcdWZmMTNcMTA3XHVmZjEzXDExMFx1ZmYxM1wxMTFcdWZmMTNcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzNFwwMDJcdWZmMGJcMDA0XHVmZjBiXDAwNVx1ZmYwYlwwMDdcdWZmMGJcMDEwXHVmZjBiXDAxMSIgKwotICAgICJcdWZmMGJcMDEyXHVmZjBiXDAxM1x1ZmYwYlwwMTRcdWZmMGJcMDE1XHVmZjBiXDAxNlx1ZmYwYlwwMTdcdWZmMGIiICsKLSAgICAiXDAyMFx1ZmYwYlwwMjFcdWZmMGJcMDIyXHVmZjBiXDAyM1x1ZmYwYlwwMjRcdWZmMGJcMDI1XHVmZjBiXDAzMSIgKwotICAgICJcdWZmM2NcMDMyXHVmZjBiXDAzNVx1ZmYwYlwwNTNcdWZmMGJcMDU0XHVmZjBiXDA1NVx1ZmYwYlwwNTZcdWZmMGIiICsKLSAgICAiXDA1N1x1ZmYwYlwwNjBcdWZmMGJcMDYxXHVmZjBiXDA2Mlx1ZmYwYlwwNjNcdWZmMGJcMDY0XHVmZjBiXDA2NSIgKwotICAgICJcdWZmMGJcMDY2XHVmZjBiXDA2N1x1ZmYwYlwwNzFcdWZmMGJcMDczXHVmZjBiXDA3NFx1ZmYwYlwwNzVcdWZmMGIiICsKLSAgICAiXDA3N1x1ZmYwYlwxMDBcdWZmMGJcMTAxXHVmZjBiXDEwMlx1ZmYwYlwxMDdcdWZmMGJcMTEwXHVmZjBiXDExMSIgKwotICAgICJcdWZmMGJcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYwYVwwMDRcdWZmMGFcMDA1XHVmZjBhXDAwN1x1ZmYwYSIgKwotICAgICJcMDEwXHVmZjBhXDAxMVx1ZmYwYVwwMTJcdWZmMGFcMDEzXHVmZjBhXDAxNFx1ZmYwYVwwMTVcdWZmMGFcMDE2IiArCi0gICAgIlx1ZmYwYVwwMTdcdWZmMGFcMDIwXHVmZjBhXDAyMVx1ZmYwYVwwMjJcdWZmMGFcMDIzXHVmZjBhXDAyNFx1ZmYwYSIgKwotICAgICJcMDI1XHVmZjBhXDAzMVx1ZmYzYlwwMzJcdWZmMGFcMDM1XHVmZjBhXDA1M1x1ZmYwYVwwNTRcdWZmMGFcMDU1IiArCi0gICAgIlx1ZmYwYVwwNTZcdWZmMGFcMDU3XHVmZjBhXDA2MFx1ZmYwYVwwNjFcdWZmMGFcMDYyXHVmZjBhXDA2M1x1ZmYwYSIgKwotICAgICJcMDY0XHVmZjBhXDA2NVx1ZmYwYVwwNjZcdWZmMGFcMDY3XHVmZjBhXDA3MVx1ZmYwYVwwNzNcdWZmMGFcMDc0IiArCi0gICAgIlx1ZmYwYVwwNzVcdWZmMGFcMDc3XHVmZjBhXDEwMFx1ZmYwYVwxMDFcdWZmMGFcMTAyXHVmZjBhXDEwN1x1ZmYwYSIgKwotICAgICJcMTEwXHVmZjBhXDExMVx1ZmYwYVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjBkXDAwNFx1ZmYwZFwwMDUiICsKLSAgICAiXHVmZjBkXDAwN1x1ZmYwZFwwMTBcdWZmMGRcMDExXHVmZjBkXDAxMlx1ZmYwZFwwMTNcdWZmMGRcMDE0XHVmZjBkIiArCi0gICAgIlwwMTVcdWZmMGRcMDE2XHVmZjBkXDAxN1x1ZmYwZFwwMjBcdWZmMGRcMDIxXHVmZjBkXDAyMlx1ZmYwZFwwMjMiICsKLSAgICAiXHVmZjBkXDAyNFx1ZmYwZFwwMjVcdWZmMGRcMDMxXHVmZjNlXDAzMlx1ZmYwZFwwMzVcdWZmMGRcMDUzXHVmZjBkIiArCi0gICAgIlwwNTRcdWZmMGRcMDU1XHVmZjBkXDA1Nlx1ZmYwZFwwNTdcdWZmMGRcMDYwXHVmZjBkXDA2MVx1ZmYwZFwwNjIiICsKLSAgICAiXHVmZjBkXDA2M1x1ZmYwZFwwNjRcdWZmMGRcMDY1XHVmZjBkXDA2Nlx1ZmYwZFwwNjdcdWZmMGRcMDcxXHVmZjBkIiArCi0gICAgIlwwNzNcdWZmMGRcMDc0XHVmZjBkXDA3NVx1ZmYwZFwwNzdcdWZmMGRcMTAwXHVmZjBkXDEwMVx1ZmYwZFwxMDIiICsKLSAgICAiXHVmZjBkXDEwN1x1ZmYwZFwxMTBcdWZmMGRcMTExXHVmZjBkXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMjIiICsKLSAgICAiXDAwNFx1ZmYyMlwwMDVcdWZmMjJcMDA2XHVmZjIyXDAwN1x1ZmYyMlwwMTBcdWZmMjJcMDExXHVmZjIyXDAxMiIgKwotICAgICJcdWZmMjJcMDEzXHVmZjIyXDAxNFx1ZmYyMlwwMTVcdWZmMjJcMDE2XHVmZjIyXDAxN1x1ZmYyMlwwMjBcdWZmMjIiICsKLSAgICAiXDAyMVx1ZmYyMlwwMjJcdWZmMjJcMDIzXHVmZjIyXDAyNFx1ZmYyMlwwMjVcdWZmMjJcMDMxXHVmZjIyXDAzMiIgKwotICAgICJcdWZmMjJcMDM1XHVmZjIyXDA1M1x1ZmYyMlwwNTRcdWZmMjJcMDU1XHVmZjIyXDA1Nlx1ZmYyMlwwNTdcdWZmMjIiICsKLSAgICAiXDA2MFx1ZmYyMlwwNjFcdWZmMjJcMDYyXHVmZjIyXDA2M1x1ZmYyMlwwNjRcdWZmMjJcMDY1XHVmZjIyXDA2NiIgKwotICAgICJcdWZmMjJcMDY3XHVmZjIyXDA3MVx1ZmYyMlwwNzNcdWZmMjJcMDc0XHVmZjIyXDA3NVx1ZmYyMlwwNzdcdWZmMjIiICsKLSAgICAiXDEwMFx1ZmYyMlwxMDFcdWZmMjJcMTAyXHVmZjIyXDEwN1x1ZmYyMlwxMTBcdWZmMjJcMTExXHVmZjIyXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzRcMDAyXHVmZjBlXDAwNFx1ZmYwZVwwMDVcdWZmMGVcMDA3XHVmZjBlXDAxMFx1ZmYwZSIgKwotICAgICJcMDExXHVmZjBlXDAxMlx1ZmYwZVwwMTNcdWZmMGVcMDE0XHVmZjBlXDAxNVx1ZmYwZVwwMTZcdWZmMGVcMDE3IiArCi0gICAgIlx1ZmYwZVwwMjBcdWZmMGVcMDIxXHVmZjBlXDAyMlx1ZmYwZVwwMjNcdWZmMGVcMDI0XHVmZjBlXDAyNVx1ZmYwZSIgKwotICAgICJcMDMxXHVmZjNmXDAzMlx1ZmYwZVwwMzVcdWZmMGVcMDUzXHVmZjBlXDA1NFx1ZmYwZVwwNTVcdWZmMGVcMDU2IiArCi0gICAgIlx1ZmYwZVwwNTdcdWZmMGVcMDYwXHVmZjBlXDA2MVx1ZmYwZVwwNjJcdWZmMGVcMDYzXHVmZjBlXDA2NFx1ZmYwZSIgKwotICAgICJcMDY1XHVmZjBlXDA2Nlx1ZmYwZVwwNjdcdWZmMGVcMDcxXHVmZjBlXDA3M1x1ZmYwZVwwNzRcdWZmMGVcMDc1IiArCi0gICAgIlx1ZmYwZVwwNzdcdWZmMGVcMTAwXHVmZjBlXDEwMVx1ZmYwZVwxMDJcdWZmMGVcMTA3XHVmZjBlXDExMFx1ZmYwZSIgKwotICAgICJcMTExXHVmZjBlXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMjNcMDA0XHVmZjIzXDAwNVx1ZmYyM1wwMDYiICsKLSAgICAiXHVmZjIzXDAwN1x1ZmYyM1wwMTBcdWZmMjNcMDExXHVmZjIzXDAxMlx1ZmYyM1wwMTNcdWZmMjNcMDE0XHVmZjIzIiArCi0gICAgIlwwMTVcdWZmMjNcMDE2XHVmZjIzXDAxN1x1ZmYyM1wwMjBcdWZmMjNcMDIxXHVmZjIzXDAyMlx1ZmYyM1wwMjMiICsKLSAgICAiXHVmZjIzXDAyNFx1ZmYyM1wwMjVcdWZmMjNcMDMxXHVmZjIzXDAzMlx1ZmYyM1wwMzVcdWZmMjNcMDUzXHVmZjIzIiArCi0gICAgIlwwNTRcdWZmMjNcMDU1XHVmZjIzXDA1Nlx1ZmYyM1wwNTdcdWZmMjNcMDYwXHVmZjIzXDA2MVx1ZmYyM1wwNjIiICsKLSAgICAiXHVmZjIzXDA2M1x1ZmYyM1wwNjRcdWZmMjNcMDY1XHVmZjIzXDA2Nlx1ZmYyM1wwNjdcdWZmMjNcMDcxXHVmZjIzIiArCi0gICAgIlwwNzNcdWZmMjNcMDc0XHVmZjIzXDA3NVx1ZmYyM1wwNzdcdWZmMjNcMTAwXHVmZjIzXDEwMVx1ZmYyM1wxMDIiICsKLSAgICAiXHVmZjIzXDEwN1x1ZmYyM1wxMTBcdWZmMjNcMTExXHVmZjIzXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMTAiICsKLSAgICAiXDAwNFx1ZmYxMFwwMDVcdWZmMTBcMDA3XHVmZjEwXDAxMFx1ZmYxMFwwMTFcdWZmMTBcMDEyXHVmZjEwXDAxMyIgKwotICAgICJcdWZmMTBcMDE0XHVmZjEwXDAxNVx1ZmYxMFwwMTZcdWZmMTBcMDE3XHVmZjEwXDAyMFx1ZmYxMFwwMjFcdWZmMTAiICsKLSAgICAiXDAyMlx1ZmYxMFwwMjNcdWZmMTBcMDI0XHVmZjEwXDAyNVx1ZmYxMFwwMzFcdWZmNDFcMDMyXHVmZjEwXDAzNSIgKwotICAgICJcdWZmMTBcMDUzXHVmZjEwXDA1NFx1ZmYxMFwwNTVcdWZmMTBcMDU2XHVmZjEwXDA1N1x1ZmYxMFwwNjBcdWZmMTAiICsKLSAgICAiXDA2MVx1ZmYxMFwwNjJcdWZmMTBcMDYzXHVmZjEwXDA2NFx1ZmYxMFwwNjVcdWZmMTBcMDY2XHVmZjEwXDA2NyIgKwotICAgICJcdWZmMTBcMDcxXHVmZjEwXDA3M1x1ZmYxMFwwNzRcdWZmMTBcMDc1XHVmZjEwXDA3N1x1ZmYxMFwxMDBcdWZmMTAiICsKLSAgICAiXDEwMVx1ZmYxMFwxMDJcdWZmMTBcMTA3XHVmZjEwXDExMFx1ZmYxMFwxMTFcdWZmMTBcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzNlwwMDJcdWZmMWJcMDA0XHVmZjFiXDAwNVx1ZmYxYlwwMDZcdWZmMWJcMDA3XHVmZjFiXDAxMFx1ZmYxYiIgKwotICAgICJcMDExXHVmZjFiXDAxMlx1ZmYxYlwwMTNcdWZmMWJcMDE0XHVmZjFiXDAxNVx1ZmYxYlwwMTZcdWZmMWJcMDE3IiArCi0gICAgIlx1ZmYxYlwwMjBcdWZmMWJcMDIxXHVmZjFiXDAyMlx1ZmYxYlwwMjNcdWZmMWJcMDI0XHVmZjFiXDAyNVx1ZmYxYiIgKwotICAgICJcMDMxXHVmZjFiXDAzMlx1ZmYxYlwwMzVcdWZmMWJcMDUzXHVmZjFiXDA1NFx1ZmYxYlwwNTVcdWZmMWJcMDU2IiArCi0gICAgIlx1ZmYxYlwwNTdcdWZmMWJcMDYwXHVmZjFiXDA2MVx1ZmYxYlwwNjJcdWZmMWJcMDYzXHVmZjFiXDA2NFx1ZmYxYiIgKwotICAgICJcMDY1XHVmZjFiXDA2Nlx1ZmYxYlwwNjdcdWZmMWJcMDcxXHVmZjFiXDA3M1x1ZmYxYlwwNzRcdWZmMWJcMDc1IiArCi0gICAgIlx1ZmYxYlwwNzdcdWZmMWJcMTAwXHVmZjFiXDEwMVx1ZmYxYlwxMDJcdWZmMWJcMTA3XHVmZjFiXDExMFx1ZmYxYiIgKwotICAgICJcMTExXHVmZjFiXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmNDVcMDA0XHVmZjQ1XDAwNVx1ZmY0NVwwMDYiICsKLSAgICAiXHVmZjQ1XDAwN1x1ZmY0NVwwMTBcdWZmNDVcMDExXHVmZjQ1XDAxMlx1ZmY0NVwwMTNcdWZmNDVcMDE0XHVmZjQ1IiArCi0gICAgIlwwMTVcdWZmNDVcMDE2XHVmZjQ1XDAxN1x1ZmY0NVwwMjBcdWZmNDVcMDIxXHVmZjQ1XDAyMlx1ZmY0NVwwMjMiICsKLSAgICAiXHVmZjQ1XDAyNFx1ZmY0NVwwMjVcdWZmNDVcMDMxXHVmZjQ1XDAzMlx1ZmY0NVwwMzVcdWZmNDVcMDUzXHVmZjQ1IiArCi0gICAgIlwwNTRcdWZmNDVcMDU1XHVmZjQ1XDA1Nlx1ZmY0NVwwNTdcdWZmNDVcMDYwXHVmZjQ1XDA2MVx1ZmY0NVwwNjIiICsKLSAgICAiXHVmZjQ1XDA2M1x1ZmY0NVwwNjRcdWZmNDVcMDY1XHVmZjQ1XDA2Nlx1ZmY0NVwwNjdcdWZmNDVcMDcxXHVmZjQ1IiArCi0gICAgIlwwNzNcdWZmNDVcMDc0XHVmZjQ1XDA3NVx1ZmY0NVwwNzdcdWZmNDVcMTAwXHVmZjQ1XDEwMVx1ZmY0NVwxMDIiICsKLSAgICAiXHVmZjQ1XDEwN1x1ZmY0NVwxMTBcdWZmNDVcMTExXHVmZjQ1XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMWYiICsKLSAgICAiXDAwNFx1ZmYxZlwwMDVcdWZmMWZcMDA2XHVmZjFmXDAwN1x1ZmYxZlwwMTBcdWZmMWZcMDExXHVmZjFmXDAxMiIgKwotICAgICJcdWZmMWZcMDEzXHVmZjFmXDAxNFx1ZmYxZlwwMTVcdWZmMWZcMDE2XHVmZjFmXDAxN1x1ZmYxZlwwMjBcdWZmMWYiICsKLSAgICAiXDAyMVx1ZmYxZlwwMjJcdWZmMWZcMDIzXHVmZjFmXDAyNFx1ZmYxZlwwMjVcdWZmMWZcMDMxXHVmZjFmXDAzMiIgKwotICAgICJcdWZmMWZcMDM1XHVmZjFmXDA1M1x1ZmYxZlwwNTRcdWZmMWZcMDU1XHVmZjFmXDA1Nlx1ZmYxZlwwNTdcdWZmMWYiICsKLSAgICAiXDA2MFx1ZmYxZlwwNjFcdWZmMWZcMDYyXHVmZjFmXDA2M1x1ZmYxZlwwNjRcdWZmMWZcMDY1XHVmZjFmXDA2NiIgKwotICAgICJcdWZmMWZcMDY3XHVmZjFmXDA3MVx1ZmYxZlwwNzNcdWZmMWZcMDc0XHVmZjFmXDA3NVx1ZmYxZlwwNzdcdWZmMWYiICsKLSAgICAiXDEwMFx1ZmYxZlwxMDFcdWZmMWZcMTAyXHVmZjFmXDEwN1x1ZmYxZlwxMTBcdWZmMWZcMTExXHVmZjFmXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzBcMDAyXHVmZjRmXDAwNFx1ZmY0ZlwwMDVcdWZmNGZcMDA3XHVmZjRmXDAxMFx1ZmY0ZiIgKwotICAgICJcMDExXHVmZjRmXDAxMlx1ZmY0ZlwwMTNcdWZmNGZcMDE0XHVmZjRmXDAxNVx1ZmY0ZlwwMTZcdWZmNGZcMDE3IiArCi0gICAgIlx1ZmY0ZlwwMjBcdWZmNGZcMDIxXHVmZjRmXDAyMlx1ZmY0ZlwwMjNcdWZmNGZcMDI0XHVmZjRmXDAyNVx1ZmY0ZiIgKwotICAgICJcMDMyXHVmZjRmXDA1M1x1ZmY0ZlwwNTRcdWZmNGZcMDU1XHVmZjRmXDA1Nlx1ZmY0ZlwwNTdcdWZmNGZcMDYwIiArCi0gICAgIlx1ZmY0ZlwwNjFcdWZmNGZcMDYyXHVmZjRmXDA2M1x1ZmY0ZlwwNjRcdWZmNGZcMDY1XHVmZjRmXDA2Nlx1ZmY0ZiIgKwotICAgICJcMDY3XHVmZjRmXDA3MVx1ZmY0ZlwwNzNcdWZmNGZcMDc0XHVmZjRmXDA3NVx1ZmY0ZlwwNzdcdWZmNGZcMTAwIiArCi0gICAgIlx1ZmY0ZlwxMDFcdWZmNGZcMTAyXHVmZjRmXDEwN1x1ZmY0ZlwxMTBcdWZmNGZcMTExXHVmZjRmXDAwMVwwMDIiICsKLSAgICAiXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNSIgKwotICAgICJcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2IiArCi0gICAgIlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDYiICsKLSAgICAiXDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3NyIgKwotICAgICJcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxIiArCi0gICAgIlwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDEwNlwwNzdcMTQyXDEwMFwxMTMiICsKLSAgICAiXDEwMVwxNzFcMTAyXDE3NVwxMDNcMTU3XDEwNFwwNDZcMTA1XDE0N1wxMDZcMDUyXDEwNyIgKwotICAgICJcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2IiArCi0gICAgIlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjQiICsKLSAgICAiXDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMiIgKwotICAgICJcMDAwXDAwNlwwMzJcdWZmZjdcMTAwXHVmZmY3XDAwMVwwMDJcMDAwXDE0NlwwMTJcMjMzXDAzNiIgKwotICAgICJcMjMyXDAzN1wyNDBcMDQwXDI1MlwwNDFcMjQxXDA0MlwyMzdcMDQzXDIzNlwwNDRcMjUwIiArCi0gICAgIlwwNDVcMjI2XDA0NlwyNDZcMDQ3XDI0NFwwNTBcMjI1XDA1MVwyNDJcMDUyXDI0M1wwNjEiICsKLSAgICAiXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MCIgKwotICAgICJcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3IiArCi0gICAgIlwxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDQiICsKLSAgICAiXDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNCIgKwotICAgICJcMjUzXDExNVwyNDdcMTE2XDI1MVwxMTdcMjI3XDEyMFwyMzRcMTIxXDIzMFwxMjJcMjQ1IiArCi0gICAgIlwxMjNcMjM1XDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMDZcMDMyXDI2NFwxMDEiICsKLSAgICAiXDI2NVwwMDFcMDAyXDAwMFwwMDRcMDc3XDI2MlwwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMSIgKwotICAgICJcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwIiArCi0gICAgIlwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDUiICsKLSAgICAiXDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MCIgKwotICAgICJcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyIiArCi0gICAgIlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzQiICsKLSAgICAiXDE1NFwwNzVcMTM1XDA3NlwxMDZcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NSIgKwotICAgICJcMTAzXDE1N1wxMDRcMDQ2XDEwNVwxNDdcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExIiArCi0gICAgIlwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjQiICsKLSAgICAiXDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNiIgKwotICAgICJcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAwNlwwMzJcdWZmZjQiICsKLSAgICAiXDEwMVx1ZmZmNFwwMDFcMDAyXDAwMFwwMDRcMDMzXDI2N1wwMDFcMDAyXDAwMFwyMDBcMDA2IiArCi0gICAgIlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzAiICsKLSAgICAiXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MSIgKwotICAgICJcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxIiArCi0gICAgIlwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjQiICsKLSAgICAiXDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzMyIgKwotICAgICJcMDc0XDE1NFwwNzVcMTM1XDA3NlwxMDZcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyIiArCi0gICAgIlwxNzVcMTAzXDE1N1wxMDRcMDQ2XDEwNVwxNDdcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzMiICsKLSAgICAiXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExNyIgKwotICAgICJcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0IiArCi0gICAgIlwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAyMFwwMDIiICsKLSAgICAiXHVmZmY2XDAwNVx1ZmZmNlwwMDdcdWZmZjZcMDMyXHVmZmY2XDEwMFx1ZmZmNlwxMDFcdWZmZjZcMTA3XHVmZmY2IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxNDZcMDEyXDIzM1wwMzZcMjMyXDAzN1wyNDBcMDQwXDI1MlwwNDEiICsKLSAgICAiXDI0MVwwNDJcMjM3XDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDZcMDQ3XDI0NCIgKwotICAgICJcMDUwXDIyNVwwNTFcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0IiArCi0gICAgIlwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzMiICsKLSAgICAiXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMiIgKwotICAgICJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczIiArCi0gICAgIlwxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMjUzXDExNVwyNDdcMTE2XDI1MVwxMTciICsKLSAgICAiXDIyN1wxMjBcMjM0XDEyMVwyMzBcMTIyXDI0NVwxMjNcMjM1XDEyNFwxNTNcMTMxXDEyMyIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA0XDA3N1wyNzFcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwIiArCi0gICAgIlwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTciICsKLSAgICAiXDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MiIgKwotICAgICJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwIiArCi0gICAgIlwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjUiICsKLSAgICAiXDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NCIgKwotICAgICJcMDc1XDEzNVwwNzZcMTA2XDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzIiArCi0gICAgIlwxNTdcMTA0XDA0NlwxMDVcMTQ3XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDMiICsKLSAgICAiXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMCIgKwotICAgICJcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1IiArCi0gICAgIlwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMDZcMDMyXHVmZmYzXDEwMSIgKwotICAgICJcdWZmZjNcMDAxXDAwMlwwMDBcMTQ2XDAxMlx1ZmZiMFwwMzZcdWZmYjBcMDM3XHVmZmIwXDA0MFx1ZmZiMCIgKwotICAgICJcMDQxXHVmZmIwXDA0Mlx1ZmZiMFwwNDNcdWZmYjBcMDQ0XHVmZmIwXDA0NVx1ZmZiMFwwNDZcdWZmYjBcMDQ3IiArCi0gICAgIlx1ZmZiMFwwNTBcdWZmYjBcMDUxXHVmZmIwXDA1Mlx1ZmZiMFwwNjFcdWZmYjBcMDYyXHVmZmIwXDA2M1x1ZmZiMCIgKwotICAgICJcMDY0XHVmZmIwXDA2NVx1ZmZiMFwwNjZcdWZmYjBcMDY3XHVmZmIwXDA3MFx1ZmZiMFwwNzFcdWZmYjBcMDczIiArCi0gICAgIlx1ZmZiMFwwNzRcdWZmYjBcMDc1XHVmZmIwXDA3Nlx1ZmZiMFwwNzdcdWZmYjBcMTAwXHVmZmIwXDEwMVx1ZmZiMCIgKwotICAgICJcMTAyXHVmZmIwXDEwM1x1ZmZiMFwxMDRcdWZmYjBcMTA1XHVmZmIwXDEwNlx1ZmZiMFwxMDdcdWZmYjBcMTEwIiArCi0gICAgIlx1ZmZiMFwxMTFcdWZmYjBcMTEyXHVmZmIwXDExM1x1ZmZiMFwxMTRcdWZmYjBcMTE1XHVmZmIwXDExNlx1ZmZiMCIgKwotICAgICJcMTE3XHVmZmIwXDEyMFx1ZmZiMFwxMjFcdWZmYjBcMTIyXHVmZmIwXDEyM1x1ZmZiMFwxMjRcdWZmYjBcMTMxIiArCi0gICAgIlx1ZmZiMFwwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwNyIgKwotICAgICJcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2IiArCi0gICAgIlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTAiICsKLSAgICAiXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MSIgKwotICAgICJcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwIiArCi0gICAgIlwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDEwNlwwNzciICsKLSAgICAiXDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMTU3XDEwNFwwNDZcMTA1XDE0NyIgKwotICAgICJcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0IiArCi0gICAgIlwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTEiICsKLSAgICAiXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMSIgKwotICAgICJcMTIzXDAwMVwwMDJcMDAwXDAwNlwwMDdcMjc2XDAzMlwyMTZcMDAxXDAwMlwwMDBcMDA0IiArCi0gICAgIlwxMDZcMjc3XDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTIiICsKLSAgICAiXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMCIgKwotICAgICJcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0IiArCi0gICAgIlwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjEiICsKLSAgICAiXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2NyIgKwotICAgICJcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMTA2IiArCi0gICAgIlwwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wxNTdcMTA0XDA0NlwxMDUiICsKLSAgICAiXDE0N1wxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNiIgKwotICAgICJcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyIiArCi0gICAgIlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjciICsKLSAgICAiXDEzMVwxMjNcMDAxXDAwMlwwMDBcMDA0XDEwN1wzMDFcMDAxXDAwMlwwMDBcMjAwXDAwNiIgKwotICAgICJcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwIiArCi0gICAgIlwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDEiICsKLSAgICAiXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMSIgKwotICAgICJcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0IiArCi0gICAgIlwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzMiICsKLSAgICAiXDA3NFwxNTRcMDc1XDEzNVwwNzZcMTA2XDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMiIgKwotICAgICJcMTc1XDEwM1wxNTdcMTA0XDA0NlwxMDVcMTQ3XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczIiArCi0gICAgIlwxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTciICsKLSAgICAiXDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNCIgKwotICAgICJcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMjBcMDAyIiArCi0gICAgIlx1ZmZmMlwwMDVcdWZmZjJcMDA3XHVmZmYyXDAzMlx1ZmZmMlwxMDBcdWZmZjJcMTAxXHVmZmYyXDEwN1x1ZmZmMiIgKwotICAgICJcMDAxXDAwMlwwMDBcMTQ2XDAxMlx1ZmZhZlwwMzZcdWZmYWZcMDM3XHVmZmFmXDA0MFx1ZmZhZlwwNDEiICsKLSAgICAiXHVmZmFmXDA0Mlx1ZmZhZlwwNDNcdWZmYWZcMDQ0XHVmZmFmXDA0NVx1ZmZhZlwwNDZcdWZmYWZcMDQ3XHVmZmFmIiArCi0gICAgIlwwNTBcdWZmYWZcMDUxXHVmZmFmXDA1Mlx1ZmZhZlwwNjFcdWZmYWZcMDYyXHVmZmFmXDA2M1x1ZmZhZlwwNjQiICsKLSAgICAiXHVmZmFmXDA2NVx1ZmZhZlwwNjZcdWZmYWZcMDY3XHVmZmFmXDA3MFx1ZmZhZlwwNzFcdWZmYWZcMDczXHVmZmFmIiArCi0gICAgIlwwNzRcdWZmYWZcMDc1XHVmZmFmXDA3Nlx1ZmZhZlwwNzdcdWZmYWZcMTAwXHVmZmFmXDEwMVx1ZmZhZlwxMDIiICsKLSAgICAiXHVmZmFmXDEwM1x1ZmZhZlwxMDRcdWZmYWZcMTA1XHVmZmFmXDEwNlx1ZmZhZlwxMDdcdWZmYWZcMTEwXHVmZmFmIiArCi0gICAgIlwxMTFcdWZmYWZcMTEyXHVmZmFmXDExM1x1ZmZhZlwxMTRcdWZmYWZcMTE1XHVmZmFmXDExNlx1ZmZhZlwxMTciICsKLSAgICAiXHVmZmFmXDEyMFx1ZmZhZlwxMjFcdWZmYWZcMTIyXHVmZmFmXDEyM1x1ZmZhZlwxMjRcdWZmYWZcMTMxXHVmZmFmIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxNTBcMDA3XDMwNlwwMTJcMzA1XDAzNlwyMzJcMDM3XDI0MFwwNDAiICsKLSAgICAiXDI1MlwwNDFcMjQxXDA0MlwyMzdcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NiIgKwotICAgICJcMDQ3XDI0NFwwNTBcMjI1XDA1MVwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzIiArCi0gICAgIlwwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjMiICsKLSAgICAiXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMSIgKwotICAgICJcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0IiArCi0gICAgIlwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwyNTNcMTE1XDI0N1wxMTYiICsKLSAgICAiXDI1MVwxMTdcMjI3XDEyMFwyMzRcMTIxXDIzMFwxMjJcMjQ1XDEyM1wyMzVcMTI0XDE1MyIgKwotICAgICJcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMTBcMDA3XHVmZjYxXDAzMVx1ZmYxOFwwMzJcdWZmNjFcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzMFwwMDJcdWZmNjVcMDA0XHVmZjY1XDAwNVx1ZmY2NVwwMDdcdWZmNjVcMDEwXHVmZjY1IiArCi0gICAgIlwwMTFcdWZmNjVcMDEyXHVmZjY1XDAxM1x1ZmY2NVwwMTRcdWZmNjVcMDE1XHVmZjY1XDAxNlx1ZmY2NVwwMTciICsKLSAgICAiXHVmZjY1XDAyMFx1ZmY2NVwwMjFcdWZmNjVcMDIyXHVmZjY1XDAyM1x1ZmY2NVwwMjRcdWZmNjVcMDI1XHVmZjY1IiArCi0gICAgIlwwMzJcdWZmNjVcMDM1XHVmZjY1XDA1M1x1ZmY2NVwwNTRcdWZmNjVcMDU1XHVmZjY1XDA1Nlx1ZmY2NVwwNTciICsKLSAgICAiXHVmZjY1XDA2MFx1ZmY2NVwwNjFcdWZmNjVcMDYyXHVmZjY1XDA2M1x1ZmY2NVwwNjRcdWZmNjVcMDY1XHVmZjY1IiArCi0gICAgIlwwNjZcdWZmNjVcMDY3XHVmZjY1XDA3MVx1ZmY2NVwwNzNcdWZmNjVcMDc0XHVmZjY1XDA3NVx1ZmY2NVwxMDAiICsKLSAgICAiXHVmZjY1XDEwMVx1ZmY2NVwxMDJcdWZmNjVcMTA3XHVmZjY1XDExMFx1ZmY2NVwxMTFcdWZmNjVcMDAxXDAwMiIgKwotICAgICJcMDAwXDAwNlwwMDdcdWZmNjJcMDMyXHVmZjYyXDAwMVwwMDJcMDAwXDAwNlwwMDdcMzEzXDAzMiIgKwotICAgICJcMzEyXDAwMVwwMDJcMDAwXDAwNlwwMDdcdWZmNTZcMDMyXHVmZjU2XDAwMVwwMDJcMDAwXDE0NiIgKwotICAgICJcMDEyXDIzM1wwMzZcMjMyXDAzN1wyNDBcMDQwXDI1MlwwNDFcMjQxXDA0MlwyMzdcMDQzIiArCi0gICAgIlwyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDZcMDQ3XDI0NFwwNTBcMjI1XDA1MVwyNDIiICsKLSAgICAiXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NiIgKwotICAgICJcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1IiArCi0gICAgIlwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDQiICsKLSAgICAiXDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMiIgKwotICAgICJcMTEzXDEyNlwxMTRcMjUzXDExNVwyNDdcMTE2XDI1MVwxMTdcMjI3XDEyMFwyMzRcMTIxIiArCi0gICAgIlwyMzBcMTIyXDI0NVwxMjNcMjM1XDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyXDAwMFwxMzAiICsKLSAgICAiXDAwMlx1ZmY2NFwwMDRcdWZmNjRcMDA1XHVmZjY0XDAwN1x1ZmY2NFwwMTBcdWZmNjRcMDExXHVmZjY0XDAxMiIgKwotICAgICJcdWZmNjRcMDEzXHVmZjY0XDAxNFx1ZmY2NFwwMTVcdWZmNjRcMDE2XHVmZjY0XDAxN1x1ZmY2NFwwMjBcdWZmNjQiICsKLSAgICAiXDAyMVx1ZmY2NFwwMjJcdWZmNjRcMDIzXHVmZjY0XDAyNFx1ZmY2NFwwMjVcdWZmNjRcMDMyXHVmZjY0XDAzNSIgKwotICAgICJcdWZmNjRcMDUzXHVmZjY0XDA1NFx1ZmY2NFwwNTVcdWZmNjRcMDU2XHVmZjY0XDA1N1x1ZmY2NFwwNjBcdWZmNjQiICsKLSAgICAiXDA2MVx1ZmY2NFwwNjJcdWZmNjRcMDYzXHVmZjY0XDA2NFx1ZmY2NFwwNjVcdWZmNjRcMDY2XHVmZjY0XDA2NyIgKwotICAgICJcdWZmNjRcMDcxXHVmZjY0XDA3M1x1ZmY2NFwwNzRcdWZmNjRcMDc1XHVmZjY0XDEwMFx1ZmY2NFwxMDFcdWZmNjQiICsKLSAgICAiXDEwMlx1ZmY2NFwxMDdcdWZmNjRcMTEwXHVmZjY0XDExMVx1ZmY2NFwwMDFcMDAyXDAwMFwwMDRcMDA3IiArCi0gICAgIlwzMTZcMDAxXDAwMlwwMDBcMDA2XDAwN1x1ZmY1NFwwMzVcdWZmNTRcMDAxXDAwMlwwMDBcMTMwIiArCi0gICAgIlwwMDJcdWZmNjNcMDA0XHVmZjYzXDAwNVx1ZmY2M1wwMDdcdWZmNjNcMDEwXHVmZjYzXDAxMVx1ZmY2M1wwMTIiICsKLSAgICAiXHVmZjYzXDAxM1x1ZmY2M1wwMTRcdWZmNjNcMDE1XHVmZjYzXDAxNlx1ZmY2M1wwMTdcdWZmNjNcMDIwXHVmZjYzIiArCi0gICAgIlwwMjFcdWZmNjNcMDIyXHVmZjYzXDAyM1x1ZmY2M1wwMjRcdWZmNjNcMDI1XHVmZjYzXDAzMlx1ZmY2M1wwMzUiICsKLSAgICAiXHVmZjYzXDA1M1x1ZmY2M1wwNTRcdWZmNjNcMDU1XHVmZjYzXDA1Nlx1ZmY2M1wwNTdcdWZmNjNcMDYwXHVmZjYzIiArCi0gICAgIlwwNjFcdWZmNjNcMDYyXHVmZjYzXDA2M1x1ZmY2M1wwNjRcdWZmNjNcMDY1XHVmZjYzXDA2Nlx1ZmY2M1wwNjciICsKLSAgICAiXHVmZjYzXDA3MVx1ZmY2M1wwNzNcdWZmNjNcMDc0XHVmZjYzXDA3NVx1ZmY2M1wxMDBcdWZmNjNcMTAxXHVmZjYzIiArCi0gICAgIlwxMDJcdWZmNjNcMTA3XHVmZjYzXDExMFx1ZmY2M1wxMTFcdWZmNjNcMDAxXDAwMlwwMDBcMTUyXDAwNyIgKwotICAgICJcMzMzXDAxMlwyMzNcMDM2XDMyN1wwMzdcMzQzXDA0MFwyNTJcMDQxXDM0NlwwNDJcMzQxIiArCi0gICAgIlwwNDNcMzM3XDA0NFwzNjVcMDQ1XDMyNVwwNDZcMzY0XDA0N1wzNTRcMDUwXDMyMlwwNTEiICsKLSAgICAiXDM1MlwwNTJcMzUzXDA2MVwzNDBcMDYyXDMzNlwwNjNcMzUxXDA2NFwzNTVcMDY1XDM2NiIgKwotICAgICJcMDY2XDMyMVwwNjdcMzYyXDA3MFwzNDJcMDcxXDM1MFwwNzNcMzYxXDA3NFwzMjBcMDc1IiArCi0gICAgIlwzMzJcMDc2XDMyNlwwNzdcMzM0XDEwMFwzNDVcMTAxXDM0NFwxMDJcMzYwXDEwM1wzMjMiICsKLSAgICAiXDEwNFwzNTdcMTA1XDIwNFwxMDZcMzYzXDEwN1wzNTZcMTEwXDMzMVwxMTFcMzM1XDExMiIgKwotICAgICJcMTMyXDExM1wxMjZcMTE0XDI1M1wxMTVcMjQ3XDExNlwyNTFcMTE3XDIyN1wxMjBcMjM0IiArCi0gICAgIlwxMjFcMjMwXDEyMlwyNDVcMTIzXDIzNVwxMjRcMTUzXDEzMFwxNjdcMTMxXDM0N1wwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM0XDAwMlx1ZmYzM1wwMDRcdWZmMzNcMDA1XHVmZjMzXDAwNlx1ZmYzM1wwMDdcdWZmMzMiICsKLSAgICAiXDAxMFx1ZmYzM1wwMTFcdWZmMzNcMDEyXHVmZjMzXDAxM1x1ZmYzM1wwMTRcdWZmMzNcMDE1XHVmZjMzXDAxNiIgKwotICAgICJcdWZmMzNcMDE3XHVmZjMzXDAyMFx1ZmYzM1wwMjFcdWZmMzNcMDIyXHVmZjMzXDAyM1x1ZmYzM1wwMjRcdWZmMzMiICsKLSAgICAiXDAyNVx1ZmYzM1wwMzJcdWZmMzNcMDM1XHVmZjMzXDA1M1x1ZmYzM1wwNTRcdWZmMzNcMDU1XHVmZjMzXDA1NiIgKwotICAgICJcdWZmMzNcMDU3XHVmZjMzXDA2MFx1ZmYzM1wwNjFcdWZmMzNcMDYyXHVmZjMzXDA2M1x1ZmYzM1wwNjRcdWZmMzMiICsKLSAgICAiXDA2NVx1ZmYzM1wwNjZcdWZmMzNcMDY3XHVmZjMzXDA3MVx1ZmYzM1wwNzNcdWZmMzNcMDc0XHVmZjMzXDA3NSIgKwotICAgICJcdWZmMzNcMDc3XHVmZjMzXDEwMFx1ZmYzM1wxMDFcdWZmMzNcMTAyXHVmZjMzXDEwN1x1ZmYzM1wxMTBcdWZmMzMiICsKLSAgICAiXDExMVx1ZmYzM1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjM4XDAwNFx1ZmYzOFwwMDVcdWZmMzhcMDA2IiArCi0gICAgIlx1ZmYzOFwwMDdcdWZmMzhcMDEwXHVmZjM4XDAxMVx1ZmYzOFwwMTJcdWZmMzhcMDEzXHVmZjM4XDAxNFx1ZmYzOCIgKwotICAgICJcMDE1XHVmZjM4XDAxNlx1ZmYzOFwwMTdcdWZmMzhcMDIwXHVmZjM4XDAyMVx1ZmYzOFwwMjJcdWZmMzhcMDIzIiArCi0gICAgIlx1ZmYzOFwwMjRcdWZmMzhcMDI1XHVmZjM4XDAzMlx1ZmYzOFwwMzVcdWZmMzhcMDUzXHVmZjM4XDA1NFx1ZmYzOCIgKwotICAgICJcMDU1XHVmZjM4XDA1Nlx1ZmYzOFwwNTdcdWZmMzhcMDYwXHVmZjM4XDA2MVx1ZmYzOFwwNjJcdWZmMzhcMDYzIiArCi0gICAgIlx1ZmYzOFwwNjRcdWZmMzhcMDY1XHVmZjM4XDA2Nlx1ZmYzOFwwNjdcdWZmMzhcMDcxXHVmZjM4XDA3M1x1ZmYzOCIgKwotICAgICJcMDc0XHVmZjM4XDA3NVx1ZmYzOFwwNzdcdWZmMzhcMTAwXHVmZjM4XDEwMVx1ZmYzOFwxMDJcdWZmMzhcMTA3IiArCi0gICAgIlx1ZmYzOFwxMTBcdWZmMzhcMTExXHVmZjM4XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2RcMDA0XHVmZjNkIiArCi0gICAgIlwwMDVcdWZmM2RcMDA2XHVmZjNkXDAwN1x1ZmYzZFwwMTBcdWZmM2RcMDExXHVmZjNkXDAxMlx1ZmYzZFwwMTMiICsKLSAgICAiXHVmZjNkXDAxNFx1ZmYzZFwwMTVcdWZmM2RcMDE2XHVmZjNkXDAxN1x1ZmYzZFwwMjBcdWZmM2RcMDIxXHVmZjNkIiArCi0gICAgIlwwMjJcdWZmM2RcMDIzXHVmZjNkXDAyNFx1ZmYzZFwwMjVcdWZmM2RcMDMyXHVmZjNkXDAzNVx1ZmYzZFwwNTMiICsKLSAgICAiXHVmZjNkXDA1NFx1ZmYzZFwwNTVcdWZmM2RcMDU2XHVmZjNkXDA1N1x1ZmYzZFwwNjBcdWZmM2RcMDYxXHVmZjNkIiArCi0gICAgIlwwNjJcdWZmM2RcMDYzXHVmZjNkXDA2NFx1ZmYzZFwwNjVcdWZmM2RcMDY2XHVmZjNkXDA2N1x1ZmYzZFwwNzEiICsKLSAgICAiXHVmZjNkXDA3M1x1ZmYzZFwwNzRcdWZmM2RcMDc1XHVmZjNkXDA3N1x1ZmYzZFwxMDBcdWZmM2RcMTAxXHVmZjNkIiArCi0gICAgIlwxMDJcdWZmM2RcMTA3XHVmZjNkXDExMFx1ZmYzZFwxMTFcdWZmM2RcMDAxXDAwMlwwMDBcMTM0XDAwMiIgKwotICAgICJcdWZmMmRcMDA0XHVmZjJkXDAwNVx1ZmYyZFwwMDZcdWZmMmRcMDA3XHVmZjJkXDAxMFx1ZmYyZFwwMTFcdWZmMmQiICsKLSAgICAiXDAxMlx1ZmYyZFwwMTNcdWZmMmRcMDE0XHVmZjJkXDAxNVx1ZmYyZFwwMTZcdWZmMmRcMDE3XHVmZjJkXDAyMCIgKwotICAgICJcdWZmMmRcMDIxXHVmZjJkXDAyMlx1ZmYyZFwwMjNcdWZmMmRcMDI0XHVmZjJkXDAyNVx1ZmYyZFwwMzJcdWZmMmQiICsKLSAgICAiXDAzNVx1ZmYyZFwwNTNcdWZmMmRcMDU0XHVmZjJkXDA1NVx1ZmYyZFwwNTZcdWZmMmRcMDU3XHVmZjJkXDA2MCIgKwotICAgICJcdWZmMmRcMDYxXHVmZjJkXDA2Mlx1ZmYyZFwwNjNcdWZmMmRcMDY0XHVmZjJkXDA2NVx1ZmYyZFwwNjZcdWZmMmQiICsKLSAgICAiXDA2N1x1ZmYyZFwwNzFcdWZmMmRcMDczXHVmZjJkXDA3NFx1ZmYyZFwwNzVcdWZmMmRcMDc3XHVmZjJkXDEwMCIgKwotICAgICJcdWZmMmRcMTAxXHVmZjJkXDEwMlx1ZmYyZFwxMDdcdWZmMmRcMTEwXHVmZjJkXDExMVx1ZmYyZFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA0XDAwN1wzNzBcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmY0MFwwMDRcdWZmNDBcMDA1IiArCi0gICAgIlx1ZmY0MFwwMDZcdWZmNDBcMDA3XHVmZjQwXDAxMFx1ZmY0MFwwMTFcdWZmNDBcMDEyXHVmZjQwXDAxM1x1ZmY0MCIgKwotICAgICJcMDE0XHVmZjQwXDAxNVx1ZmY0MFwwMTZcdWZmNDBcMDE3XHVmZjQwXDAyMFx1ZmY0MFwwMjFcdWZmNDBcMDIyIiArCi0gICAgIlx1ZmY0MFwwMjNcdWZmNDBcMDI0XHVmZjQwXDAyNVx1ZmY0MFwwMzJcdWZmNDBcMDM1XHVmZjQwXDA1M1x1ZmY0MCIgKwotICAgICJcMDU0XHVmZjQwXDA1NVx1ZmY0MFwwNTZcdWZmNDBcMDU3XHVmZjQwXDA2MFx1ZmY0MFwwNjFcdWZmNDBcMDYyIiArCi0gICAgIlx1ZmY0MFwwNjNcdWZmNDBcMDY0XHVmZjQwXDA2NVx1ZmY0MFwwNjZcdWZmNDBcMDY3XHVmZjQwXDA3MVx1ZmY0MCIgKwotICAgICJcMDczXHVmZjQwXDA3NFx1ZmY0MFwwNzVcdWZmNDBcMDc3XHVmZjQwXDEwMFx1ZmY0MFwxMDFcdWZmNDBcMTAyIiArCi0gICAgIlx1ZmY0MFwxMDdcdWZmNDBcMTEwXHVmZjQwXDExMVx1ZmY0MFwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjMxIiArCi0gICAgIlwwMDRcdWZmMzFcMDA1XHVmZjMxXDAwNlx1ZmYzMVwwMDdcdWZmMzFcMDEwXHVmZjMxXDAxMVx1ZmYzMVwwMTIiICsKLSAgICAiXHVmZjMxXDAxM1x1ZmYzMVwwMTRcdWZmMzFcMDE1XHVmZjMxXDAxNlx1ZmYzMVwwMTdcdWZmMzFcMDIwXHVmZjMxIiArCi0gICAgIlwwMjFcdWZmMzFcMDIyXHVmZjMxXDAyM1x1ZmYzMVwwMjRcdWZmMzFcMDI1XHVmZjMxXDAzMlx1ZmYzMVwwMzUiICsKLSAgICAiXHVmZjMxXDA1M1x1ZmYzMVwwNTRcdWZmMzFcMDU1XHVmZjMxXDA1Nlx1ZmYzMVwwNTdcdWZmMzFcMDYwXHVmZjMxIiArCi0gICAgIlwwNjFcdWZmMzFcMDYyXHVmZjMxXDA2M1x1ZmYzMVwwNjRcdWZmMzFcMDY1XHVmZjMxXDA2Nlx1ZmYzMVwwNjciICsKLSAgICAiXHVmZjMxXDA3MVx1ZmYzMVwwNzNcdWZmMzFcMDc0XHVmZjMxXDA3NVx1ZmYzMVwwNzdcdWZmMzFcMTAwXHVmZjMxIiArCi0gICAgIlwxMDFcdWZmMzFcMTAyXHVmZjMxXDEwN1x1ZmYzMVwxMTBcdWZmMzFcMTExXHVmZjMxXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzRcMDAyXHVmZjQ3XDAwNFx1ZmY0N1wwMDVcdWZmNDdcMDA2XHVmZjQ3XDAwN1x1ZmY0N1wwMTBcdWZmNDciICsKLSAgICAiXDAxMVx1ZmY0N1wwMTJcdWZmNDdcMDEzXHVmZjQ3XDAxNFx1ZmY0N1wwMTVcdWZmNDdcMDE2XHVmZjQ3XDAxNyIgKwotICAgICJcdWZmNDdcMDIwXHVmZjQ3XDAyMVx1ZmY0N1wwMjJcdWZmNDdcMDIzXHVmZjQ3XDAyNFx1ZmY0N1wwMjVcdWZmNDciICsKLSAgICAiXDAzMlx1ZmY0N1wwMzVcdWZmNDdcMDUzXHVmZjQ3XDA1NFx1ZmY0N1wwNTVcdWZmNDdcMDU2XHVmZjQ3XDA1NyIgKwotICAgICJcdWZmNDdcMDYwXHVmZjQ3XDA2MVx1ZmY0N1wwNjJcdWZmNDdcMDYzXHVmZjQ3XDA2NFx1ZmY0N1wwNjVcdWZmNDciICsKLSAgICAiXDA2Nlx1ZmY0N1wwNjdcdWZmNDdcMDcxXHVmZjQ3XDA3M1x1ZmY0N1wwNzRcdWZmNDdcMDc1XHVmZjQ3XDA3NyIgKwotICAgICJcdWZmNDdcMTAwXHVmZjQ3XDEwMVx1ZmY0N1wxMDJcdWZmNDdcMTA3XHVmZjQ3XDExMFx1ZmY0N1wxMTFcdWZmNDciICsKLSAgICAiXDAwMVwwMDJcMDAwXDAwNFwwMDdcMzY3XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMjhcMDA0IiArCi0gICAgIlx1ZmYyOFwwMDVcdWZmMjhcMDA2XHVmZjI4XDAwN1x1ZmYyOFwwMTBcdWZmMjhcMDExXHVmZjI4XDAxMlx1ZmYyOCIgKwotICAgICJcMDEzXHVmZjI4XDAxNFx1ZmYyOFwwMTVcdWZmMjhcMDE2XHVmZjI4XDAxN1x1ZmYyOFwwMjBcdWZmMjhcMDIxIiArCi0gICAgIlx1ZmYyOFwwMjJcdWZmMjhcMDIzXHVmZjI4XDAyNFx1ZmYyOFwwMjVcdWZmMjhcMDMyXHVmZjI4XDAzNVx1ZmYyOCIgKwotICAgICJcMDUzXHVmZjI4XDA1NFx1ZmYyOFwwNTVcdWZmMjhcMDU2XHVmZjI4XDA1N1x1ZmYyOFwwNjBcdWZmMjhcMDYxIiArCi0gICAgIlx1ZmYyOFwwNjJcdWZmMjhcMDYzXHVmZjI4XDA2NFx1ZmYyOFwwNjVcdWZmMjhcMDY2XHVmZjI4XDA2N1x1ZmYyOCIgKwotICAgICJcMDcxXHVmZjI4XDA3M1x1ZmYyOFwwNzRcdWZmMjhcMDc1XHVmZjI4XDA3N1x1ZmYyOFwxMDBcdWZmMjhcMTAxIiArCi0gICAgIlx1ZmYyOFwxMDJcdWZmMjhcMTA3XHVmZjI4XDExMFx1ZmYyOFwxMTFcdWZmMjhcMDAxXDAwMlwwMDBcMTM0IiArCi0gICAgIlwwMDJcdWZmMzJcMDA0XHVmZjMyXDAwNVx1ZmYzMlwwMDZcdWZmMzJcMDA3XHVmZjMyXDAxMFx1ZmYzMlwwMTEiICsKLSAgICAiXHVmZjMyXDAxMlx1ZmYzMlwwMTNcdWZmMzJcMDE0XHVmZjMyXDAxNVx1ZmYzMlwwMTZcdWZmMzJcMDE3XHVmZjMyIiArCi0gICAgIlwwMjBcdWZmMzJcMDIxXHVmZjMyXDAyMlx1ZmYzMlwwMjNcdWZmMzJcMDI0XHVmZjMyXDAyNVx1ZmYzMlwwMzIiICsKLSAgICAiXHVmZjMyXDAzNVx1ZmYzMlwwNTNcdWZmMzJcMDU0XHVmZjMyXDA1NVx1ZmYzMlwwNTZcdWZmMzJcMDU3XHVmZjMyIiArCi0gICAgIlwwNjBcdWZmMzJcMDYxXHVmZjMyXDA2Mlx1ZmYzMlwwNjNcdWZmMzJcMDY0XHVmZjMyXDA2NVx1ZmYzMlwwNjYiICsKLSAgICAiXHVmZjMyXDA2N1x1ZmYzMlwwNzFcdWZmMzJcMDczXHVmZjMyXDA3NFx1ZmYzMlwwNzVcdWZmMzJcMDc3XHVmZjMyIiArCi0gICAgIlwxMDBcdWZmMzJcMTAxXHVmZjMyXDEwMlx1ZmYzMlwxMDdcdWZmMzJcMTEwXHVmZjMyXDExMVx1ZmYzMlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTMwXDAwMlx1ZmY2OFwwMDRcdWZmNjhcMDA1XHVmZjY4XDAwN1x1ZmY2OFwwMTBcdWZmNjgiICsKLSAgICAiXDAxMVx1ZmY2OFwwMTJcdWZmNjhcMDEzXHVmZjY4XDAxNFx1ZmY2OFwwMTVcdWZmNjhcMDE2XHVmZjY4XDAxNyIgKwotICAgICJcdWZmNjhcMDIwXHVmZjY4XDAyMVx1ZmY2OFwwMjJcdWZmNjhcMDIzXHVmZjY4XDAyNFx1ZmY2OFwwMjVcdWZmNjgiICsKLSAgICAiXDAzMlx1ZmY2OFwwMzVcdWZmNjhcMDUzXHVmZjY4XDA1NFx1ZmY2OFwwNTVcdWZmNjhcMDU2XHVmZjY4XDA1NyIgKwotICAgICJcdWZmNjhcMDYwXHVmZjY4XDA2MVx1ZmY2OFwwNjJcdWZmNjhcMDYzXHVmZjY4XDA2NFx1ZmY2OFwwNjVcdWZmNjgiICsKLSAgICAiXDA2Nlx1ZmY2OFwwNjdcdWZmNjhcMDcxXHVmZjY4XDA3M1x1ZmY2OFwwNzRcdWZmNjhcMDc1XHVmZjY4XDEwMCIgKwotICAgICJcdWZmNjhcMTAxXHVmZjY4XDEwMlx1ZmY2OFwxMDdcdWZmNjhcMTEwXHVmZjY4XDExMVx1ZmY2OFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM0XDAwMlx1ZmYzMFwwMDRcdWZmMzBcMDA1XHVmZjMwXDAwNlx1ZmYzMFwwMDdcdWZmMzBcMDEwIiArCi0gICAgIlx1ZmYzMFwwMTFcdWZmMzBcMDEyXHVmZjMwXDAxM1x1ZmYzMFwwMTRcdWZmMzBcMDE1XHVmZjMwXDAxNlx1ZmYzMCIgKwotICAgICJcMDE3XHVmZjMwXDAyMFx1ZmYzMFwwMjFcdWZmMzBcMDIyXHVmZjMwXDAyM1x1ZmYzMFwwMjRcdWZmMzBcMDI1IiArCi0gICAgIlx1ZmYzMFwwMzJcdWZmMzBcMDM1XHVmZjMwXDA1M1x1ZmYzMFwwNTRcdWZmMzBcMDU1XHVmZjMwXDA1Nlx1ZmYzMCIgKwotICAgICJcMDU3XHVmZjMwXDA2MFx1ZmYzMFwwNjFcdWZmMzBcMDYyXHVmZjMwXDA2M1x1ZmYzMFwwNjRcdWZmMzBcMDY1IiArCi0gICAgIlx1ZmYzMFwwNjZcdWZmMzBcMDY3XHVmZjMwXDA3MVx1ZmYzMFwwNzNcdWZmMzBcMDc0XHVmZjMwXDA3NVx1ZmYzMCIgKwotICAgICJcMDc3XHVmZjMwXDEwMFx1ZmYzMFwxMDFcdWZmMzBcMTAyXHVmZjMwXDEwN1x1ZmYzMFwxMTBcdWZmMzBcMTExIiArCi0gICAgIlx1ZmYzMFwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjI3XDAwNFx1ZmYyN1wwMDVcdWZmMjdcMDA2XHVmZjI3IiArCi0gICAgIlwwMDdcdWZmMjdcMDEwXHVmZjI3XDAxMVx1ZmYyN1wwMTJcdWZmMjdcMDEzXHVmZjI3XDAxNFx1ZmYyN1wwMTUiICsKLSAgICAiXHVmZjI3XDAxNlx1ZmYyN1wwMTdcdWZmMjdcMDIwXHVmZjI3XDAyMVx1ZmYyN1wwMjJcdWZmMjdcMDIzXHVmZjI3IiArCi0gICAgIlwwMjRcdWZmMjdcMDI1XHVmZjI3XDAzMlx1ZmYyN1wwMzVcdWZmMjdcMDUzXHVmZjI3XDA1NFx1ZmYyN1wwNTUiICsKLSAgICAiXHVmZjI3XDA1Nlx1ZmYyN1wwNTdcdWZmMjdcMDYwXHVmZjI3XDA2MVx1ZmYyN1wwNjJcdWZmMjdcMDYzXHVmZjI3IiArCi0gICAgIlwwNjRcdWZmMjdcMDY1XHVmZjI3XDA2Nlx1ZmYyN1wwNjdcdWZmMjdcMDcxXHVmZjI3XDA3M1x1ZmYyN1wwNzQiICsKLSAgICAiXHVmZjI3XDA3NVx1ZmYyN1wwNzdcdWZmMjdcMTAwXHVmZjI3XDEwMVx1ZmYyN1wxMDJcdWZmMjdcMTA3XHVmZjI3IiArCi0gICAgIlwxMTBcdWZmMjdcMTExXHVmZjI3XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMjVcMDA0XHVmZjI1XDAwNSIgKwotICAgICJcdWZmMjVcMDA2XHVmZjI1XDAwN1x1ZmYyNVwwMTBcdWZmMjVcMDExXHVmZjI1XDAxMlx1ZmYyNVwwMTNcdWZmMjUiICsKLSAgICAiXDAxNFx1ZmYyNVwwMTVcdWZmMjVcMDE2XHVmZjI1XDAxN1x1ZmYyNVwwMjBcdWZmMjVcMDIxXHVmZjI1XDAyMiIgKwotICAgICJcdWZmMjVcMDIzXHVmZjI1XDAyNFx1ZmYyNVwwMjVcdWZmMjVcMDMyXHVmZjI1XDAzNVx1ZmYyNVwwNTNcdWZmMjUiICsKLSAgICAiXDA1NFx1ZmYyNVwwNTVcdWZmMjVcMDU2XHVmZjI1XDA1N1x1ZmYyNVwwNjBcdWZmMjVcMDYxXHVmZjI1XDA2MiIgKwotICAgICJcdWZmMjVcMDYzXHVmZjI1XDA2NFx1ZmYyNVwwNjVcdWZmMjVcMDY2XHVmZjI1XDA2N1x1ZmYyNVwwNzFcdWZmMjUiICsKLSAgICAiXDA3M1x1ZmYyNVwwNzRcdWZmMjVcMDc1XHVmZjI1XDA3N1x1ZmYyNVwxMDBcdWZmMjVcMTAxXHVmZjI1XDEwMiIgKwotICAgICJcdWZmMjVcMTA3XHVmZjI1XDExMFx1ZmYyNVwxMTFcdWZmMjVcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmY0MiIgKwotICAgICJcMDA0XHVmZjQyXDAwNVx1ZmY0MlwwMDZcdWZmNDJcMDA3XHVmZjQyXDAxMFx1ZmY0MlwwMTFcdWZmNDJcMDEyIiArCi0gICAgIlx1ZmY0MlwwMTNcdWZmNDJcMDE0XHVmZjQyXDAxNVx1ZmY0MlwwMTZcdWZmNDJcMDE3XHVmZjQyXDAyMFx1ZmY0MiIgKwotICAgICJcMDIxXHVmZjQyXDAyMlx1ZmY0MlwwMjNcdWZmNDJcMDI0XHVmZjQyXDAyNVx1ZmY0MlwwMzJcdWZmNDJcMDM1IiArCi0gICAgIlx1ZmY0MlwwNTNcdWZmNDJcMDU0XHVmZjQyXDA1NVx1ZmY0MlwwNTZcdWZmNDJcMDU3XHVmZjQyXDA2MFx1ZmY0MiIgKwotICAgICJcMDYxXHVmZjQyXDA2Mlx1ZmY0MlwwNjNcdWZmNDJcMDY0XHVmZjQyXDA2NVx1ZmY0MlwwNjZcdWZmNDJcMDY3IiArCi0gICAgIlx1ZmY0MlwwNzFcdWZmNDJcMDczXHVmZjQyXDA3NFx1ZmY0MlwwNzVcdWZmNDJcMDc3XHVmZjQyXDEwMFx1ZmY0MiIgKwotICAgICJcMTAxXHVmZjQyXDEwMlx1ZmY0MlwxMDdcdWZmNDJcMTEwXHVmZjQyXDExMVx1ZmY0MlwwMDFcMDAyXDAwMCIgKwotICAgICJcMTM0XDAwMlx1ZmYyNlwwMDRcdWZmMjZcMDA1XHVmZjI2XDAwNlx1ZmYyNlwwMDdcdWZmMjZcMDEwXHVmZjI2IiArCi0gICAgIlwwMTFcdWZmMjZcMDEyXHVmZjI2XDAxM1x1ZmYyNlwwMTRcdWZmMjZcMDE1XHVmZjI2XDAxNlx1ZmYyNlwwMTciICsKLSAgICAiXHVmZjI2XDAyMFx1ZmYyNlwwMjFcdWZmMjZcMDIyXHVmZjI2XDAyM1x1ZmYyNlwwMjRcdWZmMjZcMDI1XHVmZjI2IiArCi0gICAgIlwwMzJcdWZmMjZcMDM1XHVmZjI2XDA1M1x1ZmYyNlwwNTRcdWZmMjZcMDU1XHVmZjI2XDA1Nlx1ZmYyNlwwNTciICsKLSAgICAiXHVmZjI2XDA2MFx1ZmYyNlwwNjFcdWZmMjZcMDYyXHVmZjI2XDA2M1x1ZmYyNlwwNjRcdWZmMjZcMDY1XHVmZjI2IiArCi0gICAgIlwwNjZcdWZmMjZcMDY3XHVmZjI2XDA3MVx1ZmYyNlwwNzNcdWZmMjZcMDc0XHVmZjI2XDA3NVx1ZmYyNlwwNzciICsKLSAgICAiXHVmZjI2XDEwMFx1ZmYyNlwxMDFcdWZmMjZcMTAyXHVmZjI2XDEwN1x1ZmYyNlwxMTBcdWZmMjZcMTExXHVmZjI2IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjQzXDAwNFx1ZmY0M1wwMDVcdWZmNDNcMDA2XHVmZjQzXDAwNyIgKwotICAgICJcdWZmNDNcMDEwXHVmZjQzXDAxMVx1ZmY0M1wwMTJcdWZmNDNcMDEzXHVmZjQzXDAxNFx1ZmY0M1wwMTVcdWZmNDMiICsKLSAgICAiXDAxNlx1ZmY0M1wwMTdcdWZmNDNcMDIwXHVmZjQzXDAyMVx1ZmY0M1wwMjJcdWZmNDNcMDIzXHVmZjQzXDAyNCIgKwotICAgICJcdWZmNDNcMDI1XHVmZjQzXDAzMlx1ZmY0M1wwMzVcdWZmNDNcMDUzXHVmZjQzXDA1NFx1ZmY0M1wwNTVcdWZmNDMiICsKLSAgICAiXDA1Nlx1ZmY0M1wwNTdcdWZmNDNcMDYwXHVmZjQzXDA2MVx1ZmY0M1wwNjJcdWZmNDNcMDYzXHVmZjQzXDA2NCIgKwotICAgICJcdWZmNDNcMDY1XHVmZjQzXDA2Nlx1ZmY0M1wwNjdcdWZmNDNcMDcxXHVmZjQzXDA3M1x1ZmY0M1wwNzRcdWZmNDMiICsKLSAgICAiXDA3NVx1ZmY0M1wwNzdcdWZmNDNcMTAwXHVmZjQzXDEwMVx1ZmY0M1wxMDJcdWZmNDNcMTA3XHVmZjQzXDExMCIgKwotICAgICJcdWZmNDNcMTExXHVmZjQzXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMzZcMDA0XHVmZjM2XDAwNVx1ZmYzNiIgKwotICAgICJcMDA2XHVmZjM2XDAwN1x1ZmYzNlwwMTBcdWZmMzZcMDExXHVmZjM2XDAxMlx1ZmYzNlwwMTNcdWZmMzZcMDE0IiArCi0gICAgIlx1ZmYzNlwwMTVcdWZmMzZcMDE2XHVmZjM2XDAxN1x1ZmYzNlwwMjBcdWZmMzZcMDIxXHVmZjM2XDAyMlx1ZmYzNiIgKwotICAgICJcMDIzXHVmZjM2XDAyNFx1ZmYzNlwwMjVcdWZmMzZcMDMyXHVmZjM2XDAzNVx1ZmYzNlwwNTNcdWZmMzZcMDU0IiArCi0gICAgIlx1ZmYzNlwwNTVcdWZmMzZcMDU2XHVmZjM2XDA1N1x1ZmYzNlwwNjBcdWZmMzZcMDYxXHVmZjM2XDA2Mlx1ZmYzNiIgKwotICAgICJcMDYzXHVmZjM2XDA2NFx1ZmYzNlwwNjVcdWZmMzZcMDY2XHVmZjM2XDA2N1x1ZmYzNlwwNzFcdWZmMzZcMDczIiArCi0gICAgIlx1ZmYzNlwwNzRcdWZmMzZcMDc1XHVmZjM2XDA3N1x1ZmYzNlwxMDBcdWZmMzZcMTAxXHVmZjM2XDEwMlx1ZmYzNiIgKwotICAgICJcMTA3XHVmZjM2XDExMFx1ZmYzNlwxMTFcdWZmMzZcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmY0NlwwMDQiICsKLSAgICAiXHVmZjQ2XDAwNVx1ZmY0NlwwMDZcdWZmNDZcMDA3XHVmZjQ2XDAxMFx1ZmY0NlwwMTFcdWZmNDZcMDEyXHVmZjQ2IiArCi0gICAgIlwwMTNcdWZmNDZcMDE0XHVmZjQ2XDAxNVx1ZmY0NlwwMTZcdWZmNDZcMDE3XHVmZjQ2XDAyMFx1ZmY0NlwwMjEiICsKLSAgICAiXHVmZjQ2XDAyMlx1ZmY0NlwwMjNcdWZmNDZcMDI0XHVmZjQ2XDAyNVx1ZmY0NlwwMzJcdWZmNDZcMDM1XHVmZjQ2IiArCi0gICAgIlwwNTNcdWZmNDZcMDU0XHVmZjQ2XDA1NVx1ZmY0NlwwNTZcdWZmNDZcMDU3XHVmZjQ2XDA2MFx1ZmY0NlwwNjEiICsKLSAgICAiXHVmZjQ2XDA2Mlx1ZmY0NlwwNjNcdWZmNDZcMDY0XHVmZjQ2XDA2NVx1ZmY0NlwwNjZcdWZmNDZcMDY3XHVmZjQ2IiArCi0gICAgIlwwNzFcdWZmNDZcMDczXHVmZjQ2XDA3NFx1ZmY0NlwwNzVcdWZmNDZcMDc3XHVmZjQ2XDEwMFx1ZmY0NlwxMDEiICsKLSAgICAiXHVmZjQ2XDEwMlx1ZmY0NlwxMDdcdWZmNDZcMTEwXHVmZjQ2XDExMVx1ZmY0NlwwMDFcMDAyXDAwMFwxMzQiICsKLSAgICAiXDAwMlx1ZmYyZVwwMDRcdWZmMmVcMDA1XHVmZjJlXDAwNlx1ZmYyZVwwMDdcdWZmMmVcMDEwXHVmZjJlXDAxMSIgKwotICAgICJcdWZmMmVcMDEyXHVmZjJlXDAxM1x1ZmYyZVwwMTRcdWZmMmVcMDE1XHVmZjJlXDAxNlx1ZmYyZVwwMTdcdWZmMmUiICsKLSAgICAiXDAyMFx1ZmYyZVwwMjFcdWZmMmVcMDIyXHVmZjJlXDAyM1x1ZmYyZVwwMjRcdWZmMmVcMDI1XHVmZjJlXDAzMiIgKwotICAgICJcdWZmMmVcMDM1XHVmZjJlXDA1M1x1ZmYyZVwwNTRcdWZmMmVcMDU1XHVmZjJlXDA1Nlx1ZmYyZVwwNTdcdWZmMmUiICsKLSAgICAiXDA2MFx1ZmYyZVwwNjFcdWZmMmVcMDYyXHVmZjJlXDA2M1x1ZmYyZVwwNjRcdWZmMmVcMDY1XHVmZjJlXDA2NiIgKwotICAgICJcdWZmMmVcMDY3XHVmZjJlXDA3MVx1ZmYyZVwwNzNcdWZmMmVcMDc0XHVmZjJlXDA3NVx1ZmYyZVwwNzdcdWZmMmUiICsKLSAgICAiXDEwMFx1ZmYyZVwxMDFcdWZmMmVcMTAyXHVmZjJlXDEwN1x1ZmYyZVwxMTBcdWZmMmVcMTExXHVmZjJlXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzRcMDAyXHVmZjJmXDAwNFx1ZmYyZlwwMDVcdWZmMmZcMDA2XHVmZjJmXDAwN1x1ZmYyZiIgKwotICAgICJcMDEwXHVmZjJmXDAxMVx1ZmYyZlwwMTJcdWZmMmZcMDEzXHVmZjJmXDAxNFx1ZmYyZlwwMTVcdWZmMmZcMDE2IiArCi0gICAgIlx1ZmYyZlwwMTdcdWZmMmZcMDIwXHVmZjJmXDAyMVx1ZmYyZlwwMjJcdWZmMmZcMDIzXHVmZjJmXDAyNFx1ZmYyZiIgKwotICAgICJcMDI1XHVmZjJmXDAzMlx1ZmYyZlwwMzVcdWZmMmZcMDUzXHVmZjJmXDA1NFx1ZmYyZlwwNTVcdWZmMmZcMDU2IiArCi0gICAgIlx1ZmYyZlwwNTdcdWZmMmZcMDYwXHVmZjJmXDA2MVx1ZmYyZlwwNjJcdWZmMmZcMDYzXHVmZjJmXDA2NFx1ZmYyZiIgKwotICAgICJcMDY1XHVmZjJmXDA2Nlx1ZmYyZlwwNjdcdWZmMmZcMDcxXHVmZjJmXDA3M1x1ZmYyZlwwNzRcdWZmMmZcMDc1IiArCi0gICAgIlx1ZmYyZlwwNzdcdWZmMmZcMTAwXHVmZjJmXDEwMVx1ZmYyZlwxMDJcdWZmMmZcMTA3XHVmZjJmXDExMFx1ZmYyZiIgKwotICAgICJcMTExXHVmZjJmXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmNDRcMDA0XHVmZjQ0XDAwNVx1ZmY0NFwwMDYiICsKLSAgICAiXHVmZjQ0XDAwN1x1ZmY0NFwwMTBcdWZmNDRcMDExXHVmZjQ0XDAxMlx1ZmY0NFwwMTNcdWZmNDRcMDE0XHVmZjQ0IiArCi0gICAgIlwwMTVcdWZmNDRcMDE2XHVmZjQ0XDAxN1x1ZmY0NFwwMjBcdWZmNDRcMDIxXHVmZjQ0XDAyMlx1ZmY0NFwwMjMiICsKLSAgICAiXHVmZjQ0XDAyNFx1ZmY0NFwwMjVcdWZmNDRcMDMyXHVmZjQ0XDAzNVx1ZmY0NFwwNTNcdWZmNDRcMDU0XHVmZjQ0IiArCi0gICAgIlwwNTVcdWZmNDRcMDU2XHVmZjQ0XDA1N1x1ZmY0NFwwNjBcdWZmNDRcMDYxXHVmZjQ0XDA2Mlx1ZmY0NFwwNjMiICsKLSAgICAiXHVmZjQ0XDA2NFx1ZmY0NFwwNjVcdWZmNDRcMDY2XHVmZjQ0XDA2N1x1ZmY0NFwwNzFcdWZmNDRcMDczXHVmZjQ0IiArCi0gICAgIlwwNzRcdWZmNDRcMDc1XHVmZjQ0XDA3N1x1ZmY0NFwxMDBcdWZmNDRcMTAxXHVmZjQ0XDEwMlx1ZmY0NFwxMDciICsKLSAgICAiXHVmZjQ0XDExMFx1ZmY0NFwxMTFcdWZmNDRcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmY0OVwwMDRcdWZmNDkiICsKLSAgICAiXDAwNVx1ZmY0OVwwMDZcdWZmNDlcMDA3XHVmZjQ5XDAxMFx1ZmY0OVwwMTFcdWZmNDlcMDEyXHVmZjQ5XDAxMyIgKwotICAgICJcdWZmNDlcMDE0XHVmZjQ5XDAxNVx1ZmY0OVwwMTZcdWZmNDlcMDE3XHVmZjQ5XDAyMFx1ZmY0OVwwMjFcdWZmNDkiICsKLSAgICAiXDAyMlx1ZmY0OVwwMjNcdWZmNDlcMDI0XHVmZjQ5XDAyNVx1ZmY0OVwwMzJcdWZmNDlcMDM1XHVmZjQ5XDA1MyIgKwotICAgICJcdWZmNDlcMDU0XHVmZjQ5XDA1NVx1ZmY0OVwwNTZcdWZmNDlcMDU3XHVmZjQ5XDA2MFx1ZmY0OVwwNjFcdWZmNDkiICsKLSAgICAiXDA2Mlx1ZmY0OVwwNjNcdWZmNDlcMDY0XHVmZjQ5XDA2NVx1ZmY0OVwwNjZcdWZmNDlcMDY3XHVmZjQ5XDA3MSIgKwotICAgICJcdWZmNDlcMDczXHVmZjQ5XDA3NFx1ZmY0OVwwNzVcdWZmNDlcMDc3XHVmZjQ5XDEwMFx1ZmY0OVwxMDFcdWZmNDkiICsKLSAgICAiXDEwMlx1ZmY0OVwxMDdcdWZmNDlcMTEwXHVmZjQ5XDExMVx1ZmY0OVwwMDFcMDAyXDAwMFwxMzRcMDAyIiArCi0gICAgIlx1ZmYzNVwwMDRcdWZmMzVcMDA1XHVmZjM1XDAwNlx1ZmYzNVwwMDdcdWZmMzVcMDEwXHVmZjM1XDAxMVx1ZmYzNSIgKwotICAgICJcMDEyXHVmZjM1XDAxM1x1ZmYzNVwwMTRcdWZmMzVcMDE1XHVmZjM1XDAxNlx1ZmYzNVwwMTdcdWZmMzVcMDIwIiArCi0gICAgIlx1ZmYzNVwwMjFcdWZmMzVcMDIyXHVmZjM1XDAyM1x1ZmYzNVwwMjRcdWZmMzVcMDI1XHVmZjM1XDAzMlx1ZmYzNSIgKwotICAgICJcMDM1XHVmZjM1XDA1M1x1ZmYzNVwwNTRcdWZmMzVcMDU1XHVmZjM1XDA1Nlx1ZmYzNVwwNTdcdWZmMzVcMDYwIiArCi0gICAgIlx1ZmYzNVwwNjFcdWZmMzVcMDYyXHVmZjM1XDA2M1x1ZmYzNVwwNjRcdWZmMzVcMDY1XHVmZjM1XDA2Nlx1ZmYzNSIgKwotICAgICJcMDY3XHVmZjM1XDA3MVx1ZmYzNVwwNzNcdWZmMzVcMDc0XHVmZjM1XDA3NVx1ZmYzNVwwNzdcdWZmMzVcMTAwIiArCi0gICAgIlx1ZmYzNVwxMDFcdWZmMzVcMTAyXHVmZjM1XDEwN1x1ZmYzNVwxMTBcdWZmMzVcMTExXHVmZjM1XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzRcMDAyXHVmZjE5XDAwNFx1ZmYxOVwwMDVcdWZmMTlcMDA2XHVmZjE5XDAwN1x1ZmYxOVwwMTAiICsKLSAgICAiXHVmZjE5XDAxMVx1ZmYxOVwwMTJcdWZmMTlcMDEzXHVmZjE5XDAxNFx1ZmYxOVwwMTVcdWZmMTlcMDE2XHVmZjE5IiArCi0gICAgIlwwMTdcdWZmMTlcMDIwXHVmZjE5XDAyMVx1ZmYxOVwwMjJcdWZmMTlcMDIzXHVmZjE5XDAyNFx1ZmYxOVwwMjUiICsKLSAgICAiXHVmZjE5XDAzMlx1ZmYxOVwwMzVcdWZmMTlcMDUzXHVmZjE5XDA1NFx1ZmYxOVwwNTVcdWZmMTlcMDU2XHVmZjE5IiArCi0gICAgIlwwNTdcdWZmMTlcMDYwXHVmZjE5XDA2MVx1ZmYxOVwwNjJcdWZmMTlcMDYzXHVmZjE5XDA2NFx1ZmYxOVwwNjUiICsKLSAgICAiXHVmZjE5XDA2Nlx1ZmYxOVwwNjdcdWZmMTlcMDcxXHVmZjE5XDA3M1x1ZmYxOVwwNzRcdWZmMTlcMDc1XHVmZjE5IiArCi0gICAgIlwwNzdcdWZmMTlcMTAwXHVmZjE5XDEwMVx1ZmYxOVwxMDJcdWZmMTlcMTA3XHVmZjE5XDExMFx1ZmYxOVwxMTEiICsKLSAgICAiXHVmZjE5XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2NcMDA0XHVmZjNjXDAwNVx1ZmYzY1wwMDZcdWZmM2MiICsKLSAgICAiXDAwN1x1ZmYzY1wwMTBcdWZmM2NcMDExXHVmZjNjXDAxMlx1ZmYzY1wwMTNcdWZmM2NcMDE0XHVmZjNjXDAxNSIgKwotICAgICJcdWZmM2NcMDE2XHVmZjNjXDAxN1x1ZmYzY1wwMjBcdWZmM2NcMDIxXHVmZjNjXDAyMlx1ZmYzY1wwMjNcdWZmM2MiICsKLSAgICAiXDAyNFx1ZmYzY1wwMjVcdWZmM2NcMDMyXHVmZjNjXDAzNVx1ZmYzY1wwNTNcdWZmM2NcMDU0XHVmZjNjXDA1NSIgKwotICAgICJcdWZmM2NcMDU2XHVmZjNjXDA1N1x1ZmYzY1wwNjBcdWZmM2NcMDYxXHVmZjNjXDA2Mlx1ZmYzY1wwNjNcdWZmM2MiICsKLSAgICAiXDA2NFx1ZmYzY1wwNjVcdWZmM2NcMDY2XHVmZjNjXDA2N1x1ZmYzY1wwNzFcdWZmM2NcMDczXHVmZjNjXDA3NCIgKwotICAgICJcdWZmM2NcMDc1XHVmZjNjXDA3N1x1ZmYzY1wxMDBcdWZmM2NcMTAxXHVmZjNjXDEwMlx1ZmYzY1wxMDdcdWZmM2MiICsKLSAgICAiXDExMFx1ZmYzY1wxMTFcdWZmM2NcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYzYlwwMDRcdWZmM2JcMDA1IiArCi0gICAgIlx1ZmYzYlwwMDZcdWZmM2JcMDA3XHVmZjNiXDAxMFx1ZmYzYlwwMTFcdWZmM2JcMDEyXHVmZjNiXDAxM1x1ZmYzYiIgKwotICAgICJcMDE0XHVmZjNiXDAxNVx1ZmYzYlwwMTZcdWZmM2JcMDE3XHVmZjNiXDAyMFx1ZmYzYlwwMjFcdWZmM2JcMDIyIiArCi0gICAgIlx1ZmYzYlwwMjNcdWZmM2JcMDI0XHVmZjNiXDAyNVx1ZmYzYlwwMzJcdWZmM2JcMDM1XHVmZjNiXDA1M1x1ZmYzYiIgKwotICAgICJcMDU0XHVmZjNiXDA1NVx1ZmYzYlwwNTZcdWZmM2JcMDU3XHVmZjNiXDA2MFx1ZmYzYlwwNjFcdWZmM2JcMDYyIiArCi0gICAgIlx1ZmYzYlwwNjNcdWZmM2JcMDY0XHVmZjNiXDA2NVx1ZmYzYlwwNjZcdWZmM2JcMDY3XHVmZjNiXDA3MVx1ZmYzYiIgKwotICAgICJcMDczXHVmZjNiXDA3NFx1ZmYzYlwwNzVcdWZmM2JcMDc3XHVmZjNiXDEwMFx1ZmYzYlwxMDFcdWZmM2JcMTAyIiArCi0gICAgIlx1ZmYzYlwxMDdcdWZmM2JcMTEwXHVmZjNiXDExMVx1ZmYzYlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjNlIiArCi0gICAgIlwwMDRcdWZmM2VcMDA1XHVmZjNlXDAwNlx1ZmYzZVwwMDdcdWZmM2VcMDEwXHVmZjNlXDAxMVx1ZmYzZVwwMTIiICsKLSAgICAiXHVmZjNlXDAxM1x1ZmYzZVwwMTRcdWZmM2VcMDE1XHVmZjNlXDAxNlx1ZmYzZVwwMTdcdWZmM2VcMDIwXHVmZjNlIiArCi0gICAgIlwwMjFcdWZmM2VcMDIyXHVmZjNlXDAyM1x1ZmYzZVwwMjRcdWZmM2VcMDI1XHVmZjNlXDAzMlx1ZmYzZVwwMzUiICsKLSAgICAiXHVmZjNlXDA1M1x1ZmYzZVwwNTRcdWZmM2VcMDU1XHVmZjNlXDA1Nlx1ZmYzZVwwNTdcdWZmM2VcMDYwXHVmZjNlIiArCi0gICAgIlwwNjFcdWZmM2VcMDYyXHVmZjNlXDA2M1x1ZmYzZVwwNjRcdWZmM2VcMDY1XHVmZjNlXDA2Nlx1ZmYzZVwwNjciICsKLSAgICAiXHVmZjNlXDA3MVx1ZmYzZVwwNzNcdWZmM2VcMDc0XHVmZjNlXDA3NVx1ZmYzZVwwNzdcdWZmM2VcMTAwXHVmZjNlIiArCi0gICAgIlwxMDFcdWZmM2VcMTAyXHVmZjNlXDEwN1x1ZmYzZVwxMTBcdWZmM2VcMTExXHVmZjNlXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzRcMDAyXHVmZjNhXDAwNFx1ZmYzYVwwMDVcdWZmM2FcMDA2XHVmZjNhXDAwN1x1ZmYzYVwwMTBcdWZmM2EiICsKLSAgICAiXDAxMVx1ZmYzYVwwMTJcdWZmM2FcMDEzXHVmZjNhXDAxNFx1ZmYzYVwwMTVcdWZmM2FcMDE2XHVmZjNhXDAxNyIgKwotICAgICJcdWZmM2FcMDIwXHVmZjNhXDAyMVx1ZmYzYVwwMjJcdWZmM2FcMDIzXHVmZjNhXDAyNFx1ZmYzYVwwMjVcdWZmM2EiICsKLSAgICAiXDAzMlx1ZmYzYVwwMzVcdWZmM2FcMDUzXHVmZjNhXDA1NFx1ZmYzYVwwNTVcdWZmM2FcMDU2XHVmZjNhXDA1NyIgKwotICAgICJcdWZmM2FcMDYwXHVmZjNhXDA2MVx1ZmYzYVwwNjJcdWZmM2FcMDYzXHVmZjNhXDA2NFx1ZmYzYVwwNjVcdWZmM2EiICsKLSAgICAiXDA2Nlx1ZmYzYVwwNjdcdWZmM2FcMDcxXHVmZjNhXDA3M1x1ZmYzYVwwNzRcdWZmM2FcMDc1XHVmZjNhXDA3NyIgKwotICAgICJcdWZmM2FcMTAwXHVmZjNhXDEwMVx1ZmYzYVwxMDJcdWZmM2FcMTA3XHVmZjNhXDExMFx1ZmYzYVwxMTFcdWZmM2EiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMjlcMDA0XHVmZjI5XDAwNVx1ZmYyOVwwMDZcdWZmMjlcMDA3IiArCi0gICAgIlx1ZmYyOVwwMTBcdWZmMjlcMDExXHVmZjI5XDAxMlx1ZmYyOVwwMTNcdWZmMjlcMDE0XHVmZjI5XDAxNVx1ZmYyOSIgKwotICAgICJcMDE2XHVmZjI5XDAxN1x1ZmYyOVwwMjBcdWZmMjlcMDIxXHVmZjI5XDAyMlx1ZmYyOVwwMjNcdWZmMjlcMDI0IiArCi0gICAgIlx1ZmYyOVwwMjVcdWZmMjlcMDMyXHVmZjI5XDAzNVx1ZmYyOVwwNTNcdWZmMjlcMDU0XHVmZjI5XDA1NVx1ZmYyOSIgKwotICAgICJcMDU2XHVmZjI5XDA1N1x1ZmYyOVwwNjBcdWZmMjlcMDYxXHVmZjI5XDA2Mlx1ZmYyOVwwNjNcdWZmMjlcMDY0IiArCi0gICAgIlx1ZmYyOVwwNjVcdWZmMjlcMDY2XHVmZjI5XDA2N1x1ZmYyOVwwNzFcdWZmMjlcMDczXHVmZjI5XDA3NFx1ZmYyOSIgKwotICAgICJcMDc1XHVmZjI5XDA3N1x1ZmYyOVwxMDBcdWZmMjlcMTAxXHVmZjI5XDEwMlx1ZmYyOVwxMDdcdWZmMjlcMTEwIiArCi0gICAgIlx1ZmYyOVwxMTFcdWZmMjlcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYyY1wwMDRcdWZmMmNcMDA1XHVmZjJjIiArCi0gICAgIlwwMDZcdWZmMmNcMDA3XHVmZjJjXDAxMFx1ZmYyY1wwMTFcdWZmMmNcMDEyXHVmZjJjXDAxM1x1ZmYyY1wwMTQiICsKLSAgICAiXHVmZjJjXDAxNVx1ZmYyY1wwMTZcdWZmMmNcMDE3XHVmZjJjXDAyMFx1ZmYyY1wwMjFcdWZmMmNcMDIyXHVmZjJjIiArCi0gICAgIlwwMjNcdWZmMmNcMDI0XHVmZjJjXDAyNVx1ZmYyY1wwMzJcdWZmMmNcMDM1XHVmZjJjXDA1M1x1ZmYyY1wwNTQiICsKLSAgICAiXHVmZjJjXDA1NVx1ZmYyY1wwNTZcdWZmMmNcMDU3XHVmZjJjXDA2MFx1ZmYyY1wwNjFcdWZmMmNcMDYyXHVmZjJjIiArCi0gICAgIlwwNjNcdWZmMmNcMDY0XHVmZjJjXDA2NVx1ZmYyY1wwNjZcdWZmMmNcMDY3XHVmZjJjXDA3MVx1ZmYyY1wwNzMiICsKLSAgICAiXHVmZjJjXDA3NFx1ZmYyY1wwNzVcdWZmMmNcMDc3XHVmZjJjXDEwMFx1ZmYyY1wxMDFcdWZmMmNcMTAyXHVmZjJjIiArCi0gICAgIlwxMDdcdWZmMmNcMTEwXHVmZjJjXDExMVx1ZmYyY1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjQ4XDAwNCIgKwotICAgICJcdWZmNDhcMDA1XHVmZjQ4XDAwNlx1ZmY0OFwwMDdcdWZmNDhcMDEwXHVmZjQ4XDAxMVx1ZmY0OFwwMTJcdWZmNDgiICsKLSAgICAiXDAxM1x1ZmY0OFwwMTRcdWZmNDhcMDE1XHVmZjQ4XDAxNlx1ZmY0OFwwMTdcdWZmNDhcMDIwXHVmZjQ4XDAyMSIgKwotICAgICJcdWZmNDhcMDIyXHVmZjQ4XDAyM1x1ZmY0OFwwMjRcdWZmNDhcMDI1XHVmZjQ4XDAzMlx1ZmY0OFwwMzVcdWZmNDgiICsKLSAgICAiXDA1M1x1ZmY0OFwwNTRcdWZmNDhcMDU1XHVmZjQ4XDA1Nlx1ZmY0OFwwNTdcdWZmNDhcMDYwXHVmZjQ4XDA2MSIgKwotICAgICJcdWZmNDhcMDYyXHVmZjQ4XDA2M1x1ZmY0OFwwNjRcdWZmNDhcMDY1XHVmZjQ4XDA2Nlx1ZmY0OFwwNjdcdWZmNDgiICsKLSAgICAiXDA3MVx1ZmY0OFwwNzNcdWZmNDhcMDc0XHVmZjQ4XDA3NVx1ZmY0OFwwNzdcdWZmNDhcMTAwXHVmZjQ4XDEwMSIgKwotICAgICJcdWZmNDhcMTAyXHVmZjQ4XDEwN1x1ZmY0OFwxMTBcdWZmNDhcMTExXHVmZjQ4XDAwMVwwMDJcMDAwXDEzNCIgKwotICAgICJcMDAyXHVmZjM0XDAwNFx1ZmYzNFwwMDVcdWZmMzRcMDA2XHVmZjM0XDAwN1x1ZmYzNFwwMTBcdWZmMzRcMDExIiArCi0gICAgIlx1ZmYzNFwwMTJcdWZmMzRcMDEzXHVmZjM0XDAxNFx1ZmYzNFwwMTVcdWZmMzRcMDE2XHVmZjM0XDAxN1x1ZmYzNCIgKwotICAgICJcMDIwXHVmZjM0XDAyMVx1ZmYzNFwwMjJcdWZmMzRcMDIzXHVmZjM0XDAyNFx1ZmYzNFwwMjVcdWZmMzRcMDMyIiArCi0gICAgIlx1ZmYzNFwwMzVcdWZmMzRcMDUzXHVmZjM0XDA1NFx1ZmYzNFwwNTVcdWZmMzRcMDU2XHVmZjM0XDA1N1x1ZmYzNCIgKwotICAgICJcMDYwXHVmZjM0XDA2MVx1ZmYzNFwwNjJcdWZmMzRcMDYzXHVmZjM0XDA2NFx1ZmYzNFwwNjVcdWZmMzRcMDY2IiArCi0gICAgIlx1ZmYzNFwwNjdcdWZmMzRcMDcxXHVmZjM0XDA3M1x1ZmYzNFwwNzRcdWZmMzRcMDc1XHVmZjM0XDA3N1x1ZmYzNCIgKwotICAgICJcMTAwXHVmZjM0XDEwMVx1ZmYzNFwxMDJcdWZmMzRcMTA3XHVmZjM0XDExMFx1ZmYzNFwxMTFcdWZmMzRcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNFwwMDJcdWZmMzdcMDA0XHVmZjM3XDAwNVx1ZmYzN1wwMDZcdWZmMzdcMDA3XHVmZjM3IiArCi0gICAgIlwwMTBcdWZmMzdcMDExXHVmZjM3XDAxMlx1ZmYzN1wwMTNcdWZmMzdcMDE0XHVmZjM3XDAxNVx1ZmYzN1wwMTYiICsKLSAgICAiXHVmZjM3XDAxN1x1ZmYzN1wwMjBcdWZmMzdcMDIxXHVmZjM3XDAyMlx1ZmYzN1wwMjNcdWZmMzdcMDI0XHVmZjM3IiArCi0gICAgIlwwMjVcdWZmMzdcMDMyXHVmZjM3XDAzNVx1ZmYzN1wwNTNcdWZmMzdcMDU0XHVmZjM3XDA1NVx1ZmYzN1wwNTYiICsKLSAgICAiXHVmZjM3XDA1N1x1ZmYzN1wwNjBcdWZmMzdcMDYxXHVmZjM3XDA2Mlx1ZmYzN1wwNjNcdWZmMzdcMDY0XHVmZjM3IiArCi0gICAgIlwwNjVcdWZmMzdcMDY2XHVmZjM3XDA2N1x1ZmYzN1wwNzFcdWZmMzdcMDczXHVmZjM3XDA3NFx1ZmYzN1wwNzUiICsKLSAgICAiXHVmZjM3XDA3N1x1ZmYzN1wxMDBcdWZmMzdcMTAxXHVmZjM3XDEwMlx1ZmYzN1wxMDdcdWZmMzdcMTEwXHVmZjM3IiArCi0gICAgIlwxMTFcdWZmMzdcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYyYVwwMDRcdWZmMmFcMDA1XHVmZjJhXDAwNiIgKwotICAgICJcdWZmMmFcMDA3XHVmZjJhXDAxMFx1ZmYyYVwwMTFcdWZmMmFcMDEyXHVmZjJhXDAxM1x1ZmYyYVwwMTRcdWZmMmEiICsKLSAgICAiXDAxNVx1ZmYyYVwwMTZcdWZmMmFcMDE3XHVmZjJhXDAyMFx1ZmYyYVwwMjFcdWZmMmFcMDIyXHVmZjJhXDAyMyIgKwotICAgICJcdWZmMmFcMDI0XHVmZjJhXDAyNVx1ZmYyYVwwMzJcdWZmMmFcMDM1XHVmZjJhXDA1M1x1ZmYyYVwwNTRcdWZmMmEiICsKLSAgICAiXDA1NVx1ZmYyYVwwNTZcdWZmMmFcMDU3XHVmZjJhXDA2MFx1ZmYyYVwwNjFcdWZmMmFcMDYyXHVmZjJhXDA2MyIgKwotICAgICJcdWZmMmFcMDY0XHVmZjJhXDA2NVx1ZmYyYVwwNjZcdWZmMmFcMDY3XHVmZjJhXDA3MVx1ZmYyYVwwNzNcdWZmMmEiICsKLSAgICAiXDA3NFx1ZmYyYVwwNzVcdWZmMmFcMDc3XHVmZjJhXDEwMFx1ZmYyYVwxMDFcdWZmMmFcMTAyXHVmZjJhXDEwNyIgKwotICAgICJcdWZmMmFcMTEwXHVmZjJhXDExMVx1ZmYyYVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjNmXDAwNFx1ZmYzZiIgKwotICAgICJcMDA1XHVmZjNmXDAwNlx1ZmYzZlwwMDdcdWZmM2ZcMDEwXHVmZjNmXDAxMVx1ZmYzZlwwMTJcdWZmM2ZcMDEzIiArCi0gICAgIlx1ZmYzZlwwMTRcdWZmM2ZcMDE1XHVmZjNmXDAxNlx1ZmYzZlwwMTdcdWZmM2ZcMDIwXHVmZjNmXDAyMVx1ZmYzZiIgKwotICAgICJcMDIyXHVmZjNmXDAyM1x1ZmYzZlwwMjRcdWZmM2ZcMDI1XHVmZjNmXDAzMlx1ZmYzZlwwMzVcdWZmM2ZcMDUzIiArCi0gICAgIlx1ZmYzZlwwNTRcdWZmM2ZcMDU1XHVmZjNmXDA1Nlx1ZmYzZlwwNTdcdWZmM2ZcMDYwXHVmZjNmXDA2MVx1ZmYzZiIgKwotICAgICJcMDYyXHVmZjNmXDA2M1x1ZmYzZlwwNjRcdWZmM2ZcMDY1XHVmZjNmXDA2Nlx1ZmYzZlwwNjdcdWZmM2ZcMDcxIiArCi0gICAgIlx1ZmYzZlwwNzNcdWZmM2ZcMDc0XHVmZjNmXDA3NVx1ZmYzZlwwNzdcdWZmM2ZcMTAwXHVmZjNmXDEwMVx1ZmYzZiIgKwotICAgICJcMTAyXHVmZjNmXDEwN1x1ZmYzZlwxMTBcdWZmM2ZcMTExXHVmZjNmXDAwMVwwMDJcMDAwXDEzNFwwMDIiICsKLSAgICAiXHVmZjQxXDAwNFx1ZmY0MVwwMDVcdWZmNDFcMDA2XHVmZjQxXDAwN1x1ZmY0MVwwMTBcdWZmNDFcMDExXHVmZjQxIiArCi0gICAgIlwwMTJcdWZmNDFcMDEzXHVmZjQxXDAxNFx1ZmY0MVwwMTVcdWZmNDFcMDE2XHVmZjQxXDAxN1x1ZmY0MVwwMjAiICsKLSAgICAiXHVmZjQxXDAyMVx1ZmY0MVwwMjJcdWZmNDFcMDIzXHVmZjQxXDAyNFx1ZmY0MVwwMjVcdWZmNDFcMDMyXHVmZjQxIiArCi0gICAgIlwwMzVcdWZmNDFcMDUzXHVmZjQxXDA1NFx1ZmY0MVwwNTVcdWZmNDFcMDU2XHVmZjQxXDA1N1x1ZmY0MVwwNjAiICsKLSAgICAiXHVmZjQxXDA2MVx1ZmY0MVwwNjJcdWZmNDFcMDYzXHVmZjQxXDA2NFx1ZmY0MVwwNjVcdWZmNDFcMDY2XHVmZjQxIiArCi0gICAgIlwwNjdcdWZmNDFcMDcxXHVmZjQxXDA3M1x1ZmY0MVwwNzRcdWZmNDFcMDc1XHVmZjQxXDA3N1x1ZmY0MVwxMDAiICsKLSAgICAiXHVmZjQxXDEwMVx1ZmY0MVwxMDJcdWZmNDFcMTA3XHVmZjQxXDExMFx1ZmY0MVwxMTFcdWZmNDFcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzNFwwMDJcdWZmMzlcMDA0XHVmZjM5XDAwNVx1ZmYzOVwwMDZcdWZmMzlcMDA3XHVmZjM5XDAxMCIgKwotICAgICJcdWZmMzlcMDExXHVmZjM5XDAxMlx1ZmYzOVwwMTNcdWZmMzlcMDE0XHVmZjM5XDAxNVx1ZmYzOVwwMTZcdWZmMzkiICsKLSAgICAiXDAxN1x1ZmYzOVwwMjBcdWZmMzlcMDIxXHVmZjM5XDAyMlx1ZmYzOVwwMjNcdWZmMzlcMDI0XHVmZjM5XDAyNSIgKwotICAgICJcdWZmMzlcMDMyXHVmZjM5XDAzNVx1ZmYzOVwwNTNcdWZmMzlcMDU0XHVmZjM5XDA1NVx1ZmYzOVwwNTZcdWZmMzkiICsKLSAgICAiXDA1N1x1ZmYzOVwwNjBcdWZmMzlcMDYxXHVmZjM5XDA2Mlx1ZmYzOVwwNjNcdWZmMzlcMDY0XHVmZjM5XDA2NSIgKwotICAgICJcdWZmMzlcMDY2XHVmZjM5XDA2N1x1ZmYzOVwwNzFcdWZmMzlcMDczXHVmZjM5XDA3NFx1ZmYzOVwwNzVcdWZmMzkiICsKLSAgICAiXDA3N1x1ZmYzOVwxMDBcdWZmMzlcMTAxXHVmZjM5XDEwMlx1ZmYzOVwxMDdcdWZmMzlcMTEwXHVmZjM5XDExMSIgKwotICAgICJcdWZmMzlcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY2NlwwMDRcdWZmNjZcMDA1XHVmZjY2XDAwN1x1ZmY2NiIgKwotICAgICJcMDEwXHVmZjY2XDAxMVx1ZmY2NlwwMTJcdWZmNjZcMDEzXHVmZjY2XDAxNFx1ZmY2NlwwMTVcdWZmNjZcMDE2IiArCi0gICAgIlx1ZmY2NlwwMTdcdWZmNjZcMDIwXHVmZjY2XDAyMVx1ZmY2NlwwMjJcdWZmNjZcMDIzXHVmZjY2XDAyNFx1ZmY2NiIgKwotICAgICJcMDI1XHVmZjY2XDAzMlx1ZmY2NlwwMzVcdWZmNjZcMDUzXHVmZjY2XDA1NFx1ZmY2NlwwNTVcdWZmNjZcMDU2IiArCi0gICAgIlx1ZmY2NlwwNTdcdWZmNjZcMDYwXHVmZjY2XDA2MVx1ZmY2NlwwNjJcdWZmNjZcMDYzXHVmZjY2XDA2NFx1ZmY2NiIgKwotICAgICJcMDY1XHVmZjY2XDA2Nlx1ZmY2NlwwNjdcdWZmNjZcMDcxXHVmZjY2XDA3M1x1ZmY2NlwwNzRcdWZmNjZcMDc1IiArCi0gICAgIlx1ZmY2NlwxMDBcdWZmNjZcMTAxXHVmZjY2XDEwMlx1ZmY2NlwxMDdcdWZmNjZcMTEwXHVmZjY2XDExMVx1ZmY2NiIgKwotICAgICJcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY2N1wwMDRcdWZmNjdcMDA1XHVmZjY3XDAwN1x1ZmY2N1wwMTAiICsKLSAgICAiXHVmZjY3XDAxMVx1ZmY2N1wwMTJcdWZmNjdcMDEzXHVmZjY3XDAxNFx1ZmY2N1wwMTVcdWZmNjdcMDE2XHVmZjY3IiArCi0gICAgIlwwMTdcdWZmNjdcMDIwXHVmZjY3XDAyMVx1ZmY2N1wwMjJcdWZmNjdcMDIzXHVmZjY3XDAyNFx1ZmY2N1wwMjUiICsKLSAgICAiXHVmZjY3XDAzMlx1ZmY2N1wwMzVcdWZmNjdcMDUzXHVmZjY3XDA1NFx1ZmY2N1wwNTVcdWZmNjdcMDU2XHVmZjY3IiArCi0gICAgIlwwNTdcdWZmNjdcMDYwXHVmZjY3XDA2MVx1ZmY2N1wwNjJcdWZmNjdcMDYzXHVmZjY3XDA2NFx1ZmY2N1wwNjUiICsKLSAgICAiXHVmZjY3XDA2Nlx1ZmY2N1wwNjdcdWZmNjdcMDcxXHVmZjY3XDA3M1x1ZmY2N1wwNzRcdWZmNjdcMDc1XHVmZjY3IiArCi0gICAgIlwxMDBcdWZmNjdcMTAxXHVmZjY3XDEwMlx1ZmY2N1wxMDdcdWZmNjdcMTEwXHVmZjY3XDExMVx1ZmY2N1wwMDEiICsKLSAgICAiXDAwMlwwMDBcMTQ2XDAxMlwyMzNcMDM2XDMyN1wwMzdcMzQzXDA0MFwyNTJcMDQxXDM0NiIgKwotICAgICJcMDQyXDM0MVwwNDNcMzM3XDA0NFwzNjVcMDQ1XDMyNVwwNDZcMzY0XDA0N1wzNTRcMDUwIiArCi0gICAgIlwzMjJcMDUxXDM1MlwwNTJcMzUzXDA2MVwzNDBcMDYyXDMzNlwwNjNcMzUxXDA2NFwzNTUiICsKLSAgICAiXDA2NVwzNjZcMDY2XDMyMVwwNjdcMzYyXDA3MFwzNDJcMDcxXDM1MFwwNzNcMzYxXDA3NCIgKwotICAgICJcMzIwXDA3NVwzMzJcMDc2XDMyNlwwNzdcMzM0XDEwMFwzNDVcMTAxXDM0NFwxMDJcMzYwIiArCi0gICAgIlwxMDNcMzIzXDEwNFwzNTdcMTA1XDIwNFwxMDZcMzYzXDEwN1wzNTZcMTEwXDMzMVwxMTEiICsKLSAgICAiXDMzNVwxMTJcMTMyXDExM1wxMjZcMTE0XDI1M1wxMTVcMjQ3XDExNlwyNTFcMTE3XDIyNyIgKwotICAgICJcMTIwXDIzNFwxMjFcMjMwXDEyMlwyNDVcMTIzXDIzNVwxMjRcMTUzXDEzMVwzNDdcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNFwwMDJcdWZmNGRcMDA0XHVmZjRkXDAwNVx1ZmY0ZFwwMDZcdWZmNGRcMDA3XHVmZjRkIiArCi0gICAgIlwwMTBcdWZmNGRcMDExXHVmZjRkXDAxMlx1ZmY0ZFwwMTNcdWZmNGRcMDE0XHVmZjRkXDAxNVx1ZmY0ZFwwMTYiICsKLSAgICAiXHVmZjRkXDAxN1x1ZmY0ZFwwMjBcdWZmNGRcMDIxXHVmZjRkXDAyMlx1ZmY0ZFwwMjNcdWZmNGRcMDI0XHVmZjRkIiArCi0gICAgIlwwMjVcdWZmNGRcMDMyXHVmZjRkXDAzNVx1ZmY0ZFwwNTNcdWZmNGRcMDU0XHVmZjRkXDA1NVx1ZmY0ZFwwNTYiICsKLSAgICAiXHVmZjRkXDA1N1x1ZmY0ZFwwNjBcdWZmNGRcMDYxXHVmZjRkXDA2Mlx1ZmY0ZFwwNjNcdWZmNGRcMDY0XHVmZjRkIiArCi0gICAgIlwwNjVcdWZmNGRcMDY2XHVmZjRkXDA2N1x1ZmY0ZFwwNzFcdWZmNGRcMDczXHVmZjRkXDA3NFx1ZmY0ZFwwNzUiICsKLSAgICAiXHVmZjRkXDA3N1x1ZmY0ZFwxMDBcdWZmNGRcMTAxXHVmZjRkXDEwMlx1ZmY0ZFwxMDdcdWZmNGRcMTEwXHVmZjRkIiArCi0gICAgIlwxMTFcdWZmNGRcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmY0YlwwMDRcdWZmNGJcMDA1XHVmZjRiXDAwNiIgKwotICAgICJcdWZmNGJcMDA3XHVmZjRiXDAxMFx1ZmY0YlwwMTFcdWZmNGJcMDEyXHVmZjRiXDAxM1x1ZmY0YlwwMTRcdWZmNGIiICsKLSAgICAiXDAxNVx1ZmY0YlwwMTZcdWZmNGJcMDE3XHVmZjRiXDAyMFx1ZmY0YlwwMjFcdWZmNGJcMDIyXHVmZjRiXDAyMyIgKwotICAgICJcdWZmNGJcMDI0XHVmZjRiXDAyNVx1ZmY0YlwwMzJcdWZmNGJcMDM1XHVmZjRiXDA1M1x1ZmY0YlwwNTRcdWZmNGIiICsKLSAgICAiXDA1NVx1ZmY0YlwwNTZcdWZmNGJcMDU3XHVmZjRiXDA2MFx1ZmY0YlwwNjFcdWZmNGJcMDYyXHVmZjRiXDA2MyIgKwotICAgICJcdWZmNGJcMDY0XHVmZjRiXDA2NVx1ZmY0YlwwNjZcdWZmNGJcMDY3XHVmZjRiXDA3MVx1ZmY0YlwwNzNcdWZmNGIiICsKLSAgICAiXDA3NFx1ZmY0YlwwNzVcdWZmNGJcMDc3XHVmZjRiXDEwMFx1ZmY0YlwxMDFcdWZmNGJcMTAyXHVmZjRiXDEwNyIgKwotICAgICJcdWZmNGJcMTEwXHVmZjRiXDExMVx1ZmY0YlwwMDFcMDAyXDAwMFwxMjBcMDAyXHVmZmQwXDAwNVx1ZmZkMCIgKwotICAgICJcMDA3XHVmZmQwXDAxMFx1ZmZkMFwwMTFcdWZmZDBcMDEyXHVmZmQwXDAxM1x1ZmZkMFwwMTRcdWZmZDBcMDE1IiArCi0gICAgIlx1ZmZkMFwwMTZcdWZmZDBcMDE3XHVmZmQwXDAyMFx1ZmZkMFwwMjFcdWZmZDBcMDIyXHVmZmQwXDAyM1x1ZmZkMCIgKwotICAgICJcMDMyXHVmZmQwXDA1M1x1ZmZkMFwwNTRcdWZmZDBcMDU1XHVmZmQwXDA1Nlx1ZmZkMFwwNTdcdWZmZDBcMDYwIiArCi0gICAgIlx1ZmZkMFwwNjFcdWZmZDBcMDYyXHVmZmQwXDA2M1x1ZmZkMFwwNjRcdWZmZDBcMDY1XHVmZmQwXDA2Nlx1ZmZkMCIgKwotICAgICJcMDY3XHVmZmQwXDA3MVx1ZmZkMFwwNzNcdWZmZDBcMDc0XHVmZmQwXDA3NVx1ZmZkMFwxMDBcdWZmZDBcMTAxIiArCi0gICAgIlx1ZmZkMFwxMDJcdWZmZDBcMTA3XHVmZmQwXDExMFx1ZmZkMFwxMTFcdWZmZDBcMDAxXDAwMlwwMDBcMTcwIiArCi0gICAgIlwwMDZcMTAxXDAxMlwxMDdcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzYiICsKLSAgICAiXDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMCIgKwotICAgICJcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxIiArCi0gICAgIlwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTAiICsKLSAgICAiXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3NyIgKwotICAgICJcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0IiArCi0gICAgIlwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTQiICsKLSAgICAiXDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MSIgKwotICAgICJcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxIiArCi0gICAgIlwxMjNcMDAxXDAwMlwwMDBcMTcwXDAwNlwxMDFcMDEyXDEwN1wwMjdcMDcwXDAzMFwxMTciICsKLSAgICAiXDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MiIgKwotICAgICJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwIiArCi0gICAgIlwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjUiICsKLSAgICAiXDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NCIgKwotICAgICJcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzIiArCi0gICAgIlwyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDMiICsKLSAgICAiXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMCIgKwotICAgICJcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1IiArCi0gICAgIlwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwxMjRcMDAyXHVmZmI4XDAwNSIgKwotICAgICJcdWZmYjhcMDA3XHVmZmI4XDAxMFx1ZmZiOFwwMTFcdWZmYjhcMDEyXHVmZmI4XDAxM1x1ZmZiOFwwMTRcdWZmYjgiICsKLSAgICAiXDAxNVx1ZmZiOFwwMTZcdWZmYjhcMDE3XHVmZmI4XDAyMFx1ZmZiOFwwMjFcdWZmYjhcMDIyXHVmZmI4XDAyMyIgKwotICAgICJcdWZmYjhcMDI0XHVmZmI4XDAyNVx1ZmZiOFwwMzJcdWZmYjhcMDUzXHVmZmI4XDA1NFx1ZmZiOFwwNTVcdWZmYjgiICsKLSAgICAiXDA1Nlx1ZmZiOFwwNTdcdWZmYjhcMDYwXHVmZmI4XDA2MVx1ZmZiOFwwNjJcdWZmYjhcMDYzXHVmZmI4XDA2NCIgKwotICAgICJcdWZmYjhcMDY1XHVmZmI4XDA2Nlx1ZmZiOFwwNjdcdWZmYjhcMDcxXHVmZmI4XDA3M1x1ZmZiOFwwNzRcdWZmYjgiICsKLSAgICAiXDA3NVx1ZmZiOFwxMDBcdWZmYjhcMTAxXHVmZmI4XDEwMlx1ZmZiOFwxMDdcdWZmYjhcMTEwXHVmZmI4XDExMSIgKwotICAgICJcdWZmYjhcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiOVwwMDVcdWZmYjlcMDA3XHVmZmI5XDAxMFx1ZmZiOSIgKwotICAgICJcMDExXHVmZmI5XDAxMlx1ZmZiOVwwMTNcdWZmYjlcMDE0XHVmZmI5XDAxNVx1ZmZiOVwwMTZcdWZmYjlcMDE3IiArCi0gICAgIlx1ZmZiOVwwMjBcdWZmYjlcMDIxXHVmZmI5XDAyMlx1ZmZiOVwwMjNcdWZmYjlcMDI0XHVmZmI5XDAyNVx1ZmZiOSIgKwotICAgICJcMDMyXHVmZmI5XDA1M1x1ZmZiOVwwNTRcdWZmYjlcMDU1XHVmZmI5XDA1Nlx1ZmZiOVwwNTdcdWZmYjlcMDYwIiArCi0gICAgIlx1ZmZiOVwwNjFcdWZmYjlcMDYyXHVmZmI5XDA2M1x1ZmZiOVwwNjRcdWZmYjlcMDY1XHVmZmI5XDA2Nlx1ZmZiOSIgKwotICAgICJcMDY3XHVmZmI5XDA3MVx1ZmZiOVwwNzNcdWZmYjlcMDc0XHVmZmI5XDA3NVx1ZmZiOVwxMDBcdWZmYjlcMTAxIiArCi0gICAgIlx1ZmZiOVwxMDJcdWZmYjlcMTA3XHVmZmI5XDExMFx1ZmZiOVwxMTFcdWZmYjlcMDAxXDAwMlwwMDBcMjAwIiArCi0gICAgIlwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjciICsKLSAgICAiXDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NSIgKwotICAgICJcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3IiArCi0gICAgIlwwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjciICsKLSAgICAiXDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3MyIgKwotICAgICJcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxIiArCi0gICAgIlwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTAiICsKLSAgICAiXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0NyIgKwotICAgICJcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1IiArCi0gICAgIlwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwyMDAiICsKLSAgICAiXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyNyIgKwotICAgICJcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1IiArCi0gICAgIlwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDciICsKLSAgICAiXDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2NyIgKwotICAgICJcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczIiArCi0gICAgIlwxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzEiICsKLSAgICAiXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMCIgKwotICAgICJcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3IiArCi0gICAgIlwxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjUiICsKLSAgICAiXDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDIwMCIgKwotICAgICJcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3IiArCi0gICAgIlwwNzBcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDUiICsKLSAgICAiXDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0NyIgKwotICAgICJcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3IiArCi0gICAgIlwwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzMiICsKLSAgICAiXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MSIgKwotICAgICJcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwIiArCi0gICAgIlwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDciICsKLSAgICAiXDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNSIgKwotICAgICJcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMjAwIiArCi0gICAgIlwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjciICsKLSAgICAiXDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NSIgKwotICAgICJcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3IiArCi0gICAgIlwwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjciICsKLSAgICAiXDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3MyIgKwotICAgICJcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxIiArCi0gICAgIlwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTAiICsKLSAgICAiXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0NyIgKwotICAgICJcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1IiArCi0gICAgIlwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwxMDQiICsKLSAgICAiXDAwMlx1ZmZlMVwwMDVcdWZmZTFcMDA3XHVmZmUxXDAxMFx1ZmZlMVwwMTFcdWZmZTFcMDEyXHVmZmUxXDAxMyIgKwotICAgICJcdTAxMDdcMDE0XHVmZmUxXDAxNVx1ZmZlMVwwMTZcdWZmZTFcMDE3XHVmZmUxXDAyMFx1ZmZlMVwwMjFcdWZmZTEiICsKLSAgICAiXDAyMlx1ZmZlMVwwMjNcdWZmZTFcMDMyXHVmZmUxXDA1M1x1ZmZlMVwwNTRcdWZmZTFcMDU1XHVmZmUxXDA1NiIgKwotICAgICJcdWZmZTFcMDU3XHVmZmUxXDA2MFx1ZmZlMVwwNjFcdWZmZTFcMDYyXHVmZmUxXDA2M1x1ZmZlMVwwNjRcdTAxMDYiICsKLSAgICAiXDA3NVx1ZmZlMVwxMDBcdWZmZTFcMTAxXHVmZmUxXDEwMlx1ZmZlMVwxMDdcdWZmZTFcMTEwXHVmZmUxXDExMSIgKwotICAgICJcdWZmZTFcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDciICsKLSAgICAiXDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNiIgKwotICAgICJcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwIiArCi0gICAgIlwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjEiICsKLSAgICAiXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MCIgKwotICAgICJcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3IiArCi0gICAgIlwxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDQiICsKLSAgICAiXDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNCIgKwotICAgICJcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxIiArCi0gICAgIlwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzEiICsKLSAgICAiXDEyM1wwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwNyIgKwotICAgICJcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2IiArCi0gICAgIlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTAiICsKLSAgICAiXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MSIgKwotICAgICJcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwIiArCi0gICAgIlwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzciICsKLSAgICAiXDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNCIgKwotICAgICJcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0IiArCi0gICAgIlwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTEiICsKLSAgICAiXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMSIgKwotICAgICJcMTIzXDAwMVwwMDJcMDAwXDExMFwwMDJcdWZmZGRcMDA1XHVmZmRkXDAwN1x1ZmZkZFwwMTBcdWZmZGQiICsKLSAgICAiXDAxMVx1ZmZkZFwwMTJcdWZmZGRcMDEzXHVmZmRkXDAxNFx1ZmZkZFwwMTVcdWZmZGRcMDE2XHVmZmRkXDAxNyIgKwotICAgICJcdWZmZGRcMDIwXHVmZmRkXDAyMVx1ZmZkZFwwMjJcdWZmZGRcMDIzXHVmZmRkXDAzMlx1ZmZkZFwwNTNcdWZmZGQiICsKLSAgICAiXDA1NFx1ZmZkZFwwNTVcdWZmZGRcMDU2XHVmZmRkXDA1N1x1ZmZkZFwwNjBcdWZmZGRcMDYxXHVmZmRkXDA2MiIgKwotICAgICJcdWZmZGRcMDYzXHVmZmRkXDA2NFx1ZmZkZFwwNjVcMjA3XDA2NlwyMDZcMDc1XHVmZmRkXDEwMFx1ZmZkZCIgKwotICAgICJcMTAxXHVmZmRkXDEwMlx1ZmZkZFwxMDdcdWZmZGRcMTEwXHVmZmRkXDExMVx1ZmZkZFwwMDFcMDAyXDAwMCIgKwotICAgICJcMTEwXDAwMlx1ZmZkZVwwMDVcdWZmZGVcMDA3XHVmZmRlXDAxMFx1ZmZkZVwwMTFcdWZmZGVcMDEyXHVmZmRlIiArCi0gICAgIlwwMTNcdWZmZGVcMDE0XHVmZmRlXDAxNVx1ZmZkZVwwMTZcdWZmZGVcMDE3XHVmZmRlXDAyMFx1ZmZkZVwwMjEiICsKLSAgICAiXHVmZmRlXDAyMlx1ZmZkZVwwMjNcdWZmZGVcMDMyXHVmZmRlXDA1M1x1ZmZkZVwwNTRcdWZmZGVcMDU1XHVmZmRlIiArCi0gICAgIlwwNTZcdWZmZGVcMDU3XHVmZmRlXDA2MFx1ZmZkZVwwNjFcdWZmZGVcMDYyXHVmZmRlXDA2M1x1ZmZkZVwwNjQiICsKLSAgICAiXHVmZmRlXDA2NVwyMDdcMDY2XDIwNlwwNzVcdWZmZGVcMTAwXHVmZmRlXDEwMVx1ZmZkZVwxMDJcdWZmZGUiICsKLSAgICAiXDEwN1x1ZmZkZVwxMTBcdWZmZGVcMTExXHVmZmRlXDAwMVwwMDJcMDAwXDEwNFwwMDJcdWZmZTJcMDA1IiArCi0gICAgIlx1ZmZlMlwwMDdcdWZmZTJcMDEwXHVmZmUyXDAxMVx1ZmZlMlwwMTJcdWZmZTJcMDEzXHUwMTA3XDAxNFx1ZmZlMiIgKwotICAgICJcMDE1XHVmZmUyXDAxNlx1ZmZlMlwwMTdcdWZmZTJcMDIwXHVmZmUyXDAyMVx1ZmZlMlwwMjJcdWZmZTJcMDIzIiArCi0gICAgIlx1ZmZlMlwwMzJcdWZmZTJcMDUzXHVmZmUyXDA1NFx1ZmZlMlwwNTVcdWZmZTJcMDU2XHVmZmUyXDA1N1x1ZmZlMiIgKwotICAgICJcMDYwXHVmZmUyXDA2MVx1ZmZlMlwwNjJcdWZmZTJcMDYzXHVmZmUyXDA2NFx1MDEwNlwwNzVcdWZmZTJcMTAwIiArCi0gICAgIlx1ZmZlMlwxMDFcdWZmZTJcMTAyXHVmZmUyXDEwN1x1ZmZlMlwxMTBcdWZmZTJcMTExXHVmZmUyXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMDRcMDAyXHVmZmUwXDAwNVx1ZmZlMFwwMDdcdWZmZTBcMDEwXHVmZmUwXDAxMVx1ZmZlMFwwMTIiICsKLSAgICAiXHVmZmUwXDAxM1x1MDEwN1wwMTRcdWZmZTBcMDE1XHVmZmUwXDAxNlx1ZmZlMFwwMTdcdWZmZTBcMDIwXHVmZmUwIiArCi0gICAgIlwwMjFcdWZmZTBcMDIyXHVmZmUwXDAyM1x1ZmZlMFwwMzJcdWZmZTBcMDUzXHVmZmUwXDA1NFx1ZmZlMFwwNTUiICsKLSAgICAiXHVmZmUwXDA1Nlx1ZmZlMFwwNTdcdWZmZTBcMDYwXHVmZmUwXDA2MVx1ZmZlMFwwNjJcdWZmZTBcMDYzXHVmZmUwIiArCi0gICAgIlwwNjRcdTAxMDZcMDc1XHVmZmUwXDEwMFx1ZmZlMFwxMDFcdWZmZTBcMTAyXHVmZmUwXDEwN1x1ZmZlMFwxMTAiICsKLSAgICAiXHVmZmUwXDExMVx1ZmZlMFwwMDFcMDAyXDAwMFwxMDRcMDAyXHVmZmUzXDAwNVx1ZmZlM1wwMDdcdWZmZTMiICsKLSAgICAiXDAxMFx1ZmZlM1wwMTFcdWZmZTNcMDEyXHVmZmUzXDAxM1x1MDEwN1wwMTRcdWZmZTNcMDE1XHVmZmUzXDAxNiIgKwotICAgICJcdWZmZTNcMDE3XHVmZmUzXDAyMFx1ZmZlM1wwMjFcdWZmZTNcMDIyXHVmZmUzXDAyM1x1ZmZlM1wwMzJcdWZmZTMiICsKLSAgICAiXDA1M1x1ZmZlM1wwNTRcdWZmZTNcMDU1XHVmZmUzXDA1Nlx1ZmZlM1wwNTdcdWZmZTNcMDYwXHVmZmUzXDA2MSIgKwotICAgICJcdWZmZTNcMDYyXHVmZmUzXDA2M1x1ZmZlM1wwNjRcdTAxMDZcMDc1XHVmZmUzXDEwMFx1ZmZlM1wxMDFcdWZmZTMiICsKLSAgICAiXDEwMlx1ZmZlM1wxMDdcdWZmZTNcMTEwXHVmZmUzXDExMVx1ZmZlM1wwMDFcMDAyXDAwMFwwMDRcMDA3IiArCi0gICAgIlx1MDEwZVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjY5XDAwNFx1ZmY2OVwwMDVcdWZmNjlcMDA3XHVmZjY5IiArCi0gICAgIlwwMTBcdWZmNjlcMDExXHVmZjY5XDAxMlx1ZmY2OVwwMTNcdWZmNjlcMDE0XHVmZjY5XDAxNVx1ZmY2OVwwMTYiICsKLSAgICAiXHVmZjY5XDAxN1x1ZmY2OVwwMjBcdWZmNjlcMDIxXHVmZjY5XDAyMlx1ZmY2OVwwMjNcdWZmNjlcMDI0XHVmZjY5IiArCi0gICAgIlwwMjVcdWZmNjlcMDMyXHVmZjY5XDAzNVx1ZmY2OVwwNTNcdWZmNjlcMDU0XHVmZjY5XDA1NVx1ZmY2OVwwNTYiICsKLSAgICAiXHVmZjY5XDA1N1x1ZmY2OVwwNjBcdWZmNjlcMDYxXHVmZjY5XDA2Mlx1ZmY2OVwwNjNcdWZmNjlcMDY0XHVmZjY5IiArCi0gICAgIlwwNjVcdWZmNjlcMDY2XHVmZjY5XDA2N1x1ZmY2OVwwNzFcdWZmNjlcMDczXHVmZjY5XDA3NFx1ZmY2OVwwNzUiICsKLSAgICAiXHVmZjY5XDEwMFx1ZmY2OVwxMDFcdWZmNjlcMTAyXHVmZjY5XDEwN1x1ZmY2OVwxMTBcdWZmNjlcMTExXHVmZjY5IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxNDZcMDEyXHVmZmEzXDAzNlx1ZmZhM1wwMzdcdWZmYTNcMDQwXHVmZmEzXDA0MSIgKwotICAgICJcdWZmYTNcMDQyXHVmZmEzXDA0M1x1ZmZhM1wwNDRcdWZmYTNcMDQ1XHVmZmEzXDA0Nlx1ZmZhM1wwNDdcdWZmYTMiICsKLSAgICAiXDA1MFx1ZmZhM1wwNTFcdWZmYTNcMDUyXHVmZmEzXDA2MVx1ZmZhM1wwNjJcdWZmYTNcMDYzXHVmZmEzXDA2NCIgKwotICAgICJcdWZmYTNcMDY1XHVmZmEzXDA2Nlx1ZmZhM1wwNjdcdWZmYTNcMDcwXHVmZmEzXDA3MVx1ZmZhM1wwNzNcdWZmYTMiICsKLSAgICAiXDA3NFx1ZmZhM1wwNzVcdWZmYTNcMDc2XHVmZmEzXDA3N1x1ZmZhM1wxMDBcdWZmYTNcMTAxXHVmZmEzXDEwMiIgKwotICAgICJcdWZmYTNcMTAzXHVmZmEzXDEwNFx1ZmZhM1wxMDVcdWZmYTNcMTA2XHVmZmEzXDEwN1x1ZmZhM1wxMTBcdWZmYTMiICsKLSAgICAiXDExMVx1ZmZhM1wxMTJcdWZmYTNcMTEzXHVmZmEzXDExNFx1ZmZhM1wxMTVcdWZmYTNcMTE2XHVmZmEzXDExNyIgKwotICAgICJcdWZmYTNcMTIwXHVmZmEzXDEyMVx1ZmZhM1wxMjJcdWZmYTNcMTIzXHVmZmEzXDEyNFx1ZmZhM1wxMzFcdWZmYTMiICsKLSAgICAiXDAwMVwwMDJcMDAwXDE0NlwwMTJcMjMzXDAzNlwzMjdcMDM3XDM0M1wwNDBcMjUyXDA0MSIgKwotICAgICJcMzQ2XDA0MlwzNDFcMDQzXDMzN1wwNDRcMzY1XDA0NVwzMjVcMDQ2XDM2NFwwNDdcMzU0IiArCi0gICAgIlwwNTBcMzIyXDA1MVwzNTJcMDUyXDM1M1wwNjFcMzQwXDA2MlwzMzZcMDYzXDM1MVwwNjQiICsKLSAgICAiXDM1NVwwNjVcMzY2XDA2NlwzMjFcMDY3XDM2MlwwNzBcMzQyXDA3MVwzNTBcMDczXDM2MSIgKwotICAgICJcMDc0XDMyMFwwNzVcMzMyXDA3NlwzMjZcMDc3XDMzNFwxMDBcMzQ1XDEwMVwzNDRcMTAyIiArCi0gICAgIlwzNjBcMTAzXDMyM1wxMDRcMzU3XDEwNVwyMDRcMTA2XDM2M1wxMDdcMzU2XDExMFwzMzEiICsKLSAgICAiXDExMVwzMzVcMTEyXDEzMlwxMTNcMTI2XDExNFwyNTNcMTE1XDI0N1wxMTZcMjUxXDExNyIgKwotICAgICJcMjI3XDEyMFwyMzRcMTIxXDIzMFwxMjJcMjQ1XDEyM1wyMzVcMTI0XDE1M1wxMzFcMzQ3IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjlhXDAwNFx1ZmY5YVwwMDVcdWZmOWFcMDA3XHVmZjlhXDAxMCIgKwotICAgICJcdWZmOWFcMDExXHVmZjlhXDAxMlx1ZmY5YVwwMTNcdWZmOWFcMDE0XHVmZjlhXDAxNVx1ZmY5YVwwMTZcdWZmOWEiICsKLSAgICAiXDAxN1x1ZmY5YVwwMjBcdWZmOWFcMDIxXHVmZjlhXDAyMlx1ZmY5YVwwMjNcdWZmOWFcMDI0XHVmZjlhXDAyNSIgKwotICAgICJcdWZmOWFcMDMyXHVmZjlhXDA1M1x1ZmY5YVwwNTRcdWZmOWFcMDU1XHVmZjlhXDA1Nlx1ZmY5YVwwNTdcdWZmOWEiICsKLSAgICAiXDA2MFx1ZmY5YVwwNjFcdWZmOWFcMDYyXHVmZjlhXDA2M1x1ZmY5YVwwNjRcdWZmOWFcMDY1XHVmZjlhXDA2NiIgKwotICAgICJcdWZmOWFcMDY3XHVmZjlhXDA3MVx1ZmY5YVwwNzNcdWZmOWFcMDc0XHVmZjlhXDA3NVx1ZmY5YVwxMDBcdWZmOWEiICsKLSAgICAiXDEwMVx1ZmY5YVwxMDJcdWZmOWFcMTA3XHVmZjlhXDExMFx1ZmY5YVwxMTFcdWZmOWFcMDAxXDAwMlwwMDAiICsKLSAgICAiXDE0NlwwMTJcMjMzXDAzNlwyMzJcMDM3XDI0MFwwNDBcMjUyXDA0MVwyNDFcMDQyXDIzNyIgKwotICAgICJcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0XDA1MFwyMjVcMDUxIiArCi0gICAgIlwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjUiICsKLSAgICAiXDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NSIgKwotICAgICJcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1IiArCi0gICAgIlwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTIiICsKLSAgICAiXDEzMlwxMTNcMTI2XDExNFwyNTNcMTE1XDI0N1wxMTZcMjUxXDExN1wyMjdcMTIwXDIzNCIgKwotICAgICJcMTIxXDIzMFwxMjJcMjQ1XDEyM1wyMzVcMTI0XDE1M1wxMzFcMTIzXDAwMVwwMDJcMDAwIiArCi0gICAgIlwwMDRcMDc3XHUwMTE0XDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNCIgKwotICAgICJcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0IiArCi0gICAgIlwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDEiICsKLSAgICAiXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MiIgKwotICAgICJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyIiArCi0gICAgIlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzYiICsKLSAgICAiXDEwNlwwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wxNTdcMTA0XDA0NiIgKwotICAgICJcMTA1XDE0N1wxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzIiArCi0gICAgIlwxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTYiICsKLSAgICAiXDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMCIgKwotICAgICJcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMDA2XDAzMlx1ZmZmOFwxMDBcdWZmZjhcMDAxXDAwMiIgKwotICAgICJcMDAwXDIwMlwwMDZcMTAxXDAwN1x1MDExOVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjQiICsKLSAgICAiXDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MCIgKwotICAgICJcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1IiArCi0gICAgIlwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTEiICsKLSAgICAiXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MCIgKwotICAgICJcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDEwNlwwNzdcMTQyIiArCi0gICAgIlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMTU3XDEwNFwwNDZcMTA1XDE0N1wxMDYiICsKLSAgICAiXDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNCIgKwotICAgICJcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzIiArCi0gICAgIlwwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjMiICsKLSAgICAiXDAwMVwwMDJcMDAwXDAwNlwwMDdcdTAxMWJcMDMyXHUwMTFhXDAwMVwwMDJcMDAwXDAwNlwwMDciICsKLSAgICAiXHVmZjg1XDAzMlx1ZmY4NVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjg3XDAwNFx1ZmY4N1wwMDVcdWZmODciICsKLSAgICAiXDAwN1x1ZmY4N1wwMTBcdWZmODdcMDExXHVmZjg3XDAxMlx1ZmY4N1wwMTNcdWZmODdcMDE0XHVmZjg3XDAxNSIgKwotICAgICJcdWZmODdcMDE2XHVmZjg3XDAxN1x1ZmY4N1wwMjBcdWZmODdcMDIxXHVmZjg3XDAyMlx1ZmY4N1wwMjNcdWZmODciICsKLSAgICAiXDAyNFx1ZmY4N1wwMjVcdWZmODdcMDMyXHVmZjg3XDA1M1x1ZmY4N1wwNTRcdWZmODdcMDU1XHVmZjg3XDA1NiIgKwotICAgICJcdWZmODdcMDU3XHVmZjg3XDA2MFx1ZmY4N1wwNjFcdWZmODdcMDYyXHVmZjg3XDA2M1x1ZmY4N1wwNjRcdWZmODciICsKLSAgICAiXDA2NVx1ZmY4N1wwNjZcdWZmODdcMDY3XHVmZjg3XDA3MVx1ZmY4N1wwNzNcdWZmODdcMDc0XHVmZjg3XDA3NSIgKwotICAgICJcdWZmODdcMTAwXHVmZjg3XDEwMVx1ZmY4N1wxMDJcdWZmODdcMTA3XHVmZjg3XDExMFx1ZmY4N1wxMTFcdWZmODciICsKLSAgICAiXDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNCIgKwotICAgICJcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwIiArCi0gICAgIlwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDUiICsKLSAgICAiXDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMSIgKwotICAgICJcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwIiArCi0gICAgIlwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMTA2XDA3N1wxNDIiICsKLSAgICAiXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wxNTdcMTA0XDA0NlwxMDVcMTQ3XDEwNiIgKwotICAgICJcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0IiArCi0gICAgIlwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjMiICsKLSAgICAiXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyMyIgKwotICAgICJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY4NlwwMDRcdWZmODZcMDA1XHVmZjg2XDAwN1x1ZmY4NlwwMTAiICsKLSAgICAiXHVmZjg2XDAxMVx1ZmY4NlwwMTJcdWZmODZcMDEzXHVmZjg2XDAxNFx1ZmY4NlwwMTVcdWZmODZcMDE2XHVmZjg2IiArCi0gICAgIlwwMTdcdWZmODZcMDIwXHVmZjg2XDAyMVx1ZmY4NlwwMjJcdWZmODZcMDIzXHVmZjg2XDAyNFx1ZmY4NlwwMjUiICsKLSAgICAiXHVmZjg2XDAzMlx1ZmY4NlwwNTNcdWZmODZcMDU0XHVmZjg2XDA1NVx1ZmY4NlwwNTZcdWZmODZcMDU3XHVmZjg2IiArCi0gICAgIlwwNjBcdWZmODZcMDYxXHVmZjg2XDA2Mlx1ZmY4NlwwNjNcdWZmODZcMDY0XHVmZjg2XDA2NVx1ZmY4NlwwNjYiICsKLSAgICAiXHVmZjg2XDA2N1x1ZmY4NlwwNzFcdWZmODZcMDczXHVmZjg2XDA3NFx1ZmY4NlwwNzVcdWZmODZcMTAwXHVmZjg2IiArCi0gICAgIlwxMDFcdWZmODZcMTAyXHVmZjg2XDEwN1x1ZmY4NlwxMTBcdWZmODZcMTExXHVmZjg2XDAwMVwwMDJcMDAwIiArCi0gICAgIlwwMDZcMDA3XHVmZjg0XDAzMlx1ZmY4NFwwMDFcMDAyXDAwMFwwMDZcMDA3XHUwMTFmXDAzMlwyMTYiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOGFcMDA0XHVmZjhhXDAwNVx1ZmY4YVwwMDdcdWZmOGFcMDEwIiArCi0gICAgIlx1ZmY4YVwwMTFcdWZmOGFcMDEyXHVmZjhhXDAxM1x1ZmY4YVwwMTRcdWZmOGFcMDE1XHVmZjhhXDAxNlx1ZmY4YSIgKwotICAgICJcMDE3XHVmZjhhXDAyMFx1ZmY4YVwwMjFcdWZmOGFcMDIyXHVmZjhhXDAyM1x1ZmY4YVwwMjRcdWZmOGFcMDI1IiArCi0gICAgIlx1ZmY4YVwwMzJcdWZmOGFcMDUzXHVmZjhhXDA1NFx1ZmY4YVwwNTVcdWZmOGFcMDU2XHVmZjhhXDA1N1x1ZmY4YSIgKwotICAgICJcMDYwXHVmZjhhXDA2MVx1ZmY4YVwwNjJcdWZmOGFcMDYzXHVmZjhhXDA2NFx1ZmY4YVwwNjVcdWZmOGFcMDY2IiArCi0gICAgIlx1ZmY4YVwwNjdcdWZmOGFcMDcxXHVmZjhhXDA3M1x1ZmY4YVwwNzRcdWZmOGFcMDc1XHVmZjhhXDEwMFx1ZmY4YSIgKwotICAgICJcMTAxXHVmZjhhXDEwMlx1ZmY4YVwxMDdcdWZmOGFcMTEwXHVmZjhhXDExMVx1ZmY4YVwwMDFcMDAyXDAwMCIgKwotICAgICJcMTI2XDAwMlx1ZmY4OVwwMDRcdWZmODlcMDA1XHVmZjg5XDAwN1x1ZmY4OVwwMTBcdWZmODlcMDExXHVmZjg5IiArCi0gICAgIlwwMTJcdWZmODlcMDEzXHVmZjg5XDAxNFx1ZmY4OVwwMTVcdWZmODlcMDE2XHVmZjg5XDAxN1x1ZmY4OVwwMjAiICsKLSAgICAiXHVmZjg5XDAyMVx1ZmY4OVwwMjJcdWZmODlcMDIzXHVmZjg5XDAyNFx1ZmY4OVwwMjVcdWZmODlcMDMyXHVmZjg5IiArCi0gICAgIlwwNTNcdWZmODlcMDU0XHVmZjg5XDA1NVx1ZmY4OVwwNTZcdWZmODlcMDU3XHVmZjg5XDA2MFx1ZmY4OVwwNjEiICsKLSAgICAiXHVmZjg5XDA2Mlx1ZmY4OVwwNjNcdWZmODlcMDY0XHVmZjg5XDA2NVx1ZmY4OVwwNjZcdWZmODlcMDY3XHVmZjg5IiArCi0gICAgIlwwNzFcdWZmODlcMDczXHVmZjg5XDA3NFx1ZmY4OVwwNzVcdWZmODlcMTAwXHVmZjg5XDEwMVx1ZmY4OVwxMDIiICsKLSAgICAiXHVmZjg5XDEwN1x1ZmY4OVwxMTBcdWZmODlcMTExXHVmZjg5XDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmYjUiICsKLSAgICAiXDAwNFwyMTRcMDA1XHVmZmI1XDAwN1x1ZmZiNVwwMTBcdWZmYjVcMDExXHVmZmI1XDAxMlx1ZmZiNVwwMTMiICsKLSAgICAiXHVmZmI1XDAxNFx1ZmZiNVwwMTVcdWZmYjVcMDE2XHVmZmI1XDAxN1x1ZmZiNVwwMjBcdWZmYjVcMDIxXHVmZmI1IiArCi0gICAgIlwwMjJcdWZmYjVcMDIzXHVmZmI1XDAyNFx1ZmZiNVwwMjVcdWZmYjVcMDMyXHVmZmI1XDA1M1x1ZmZiNVwwNTQiICsKLSAgICAiXHVmZmI1XDA1NVx1ZmZiNVwwNTZcdWZmYjVcMDU3XHVmZmI1XDA2MFx1ZmZiNVwwNjFcdWZmYjVcMDYyXHVmZmI1IiArCi0gICAgIlwwNjNcdWZmYjVcMDY0XHVmZmI1XDA2NVx1ZmZiNVwwNjZcdWZmYjVcMDY3XHVmZmI1XDA3MVx1ZmZiNVwwNzMiICsKLSAgICAiXHVmZmI1XDA3NFx1ZmZiNVwwNzVcdWZmYjVcMTAwXHVmZmI1XDEwMVx1ZmZiNVwxMDJcdWZmYjVcMTA3XHVmZmI1IiArCi0gICAgIlwxMTBcdWZmYjVcMTExXHVmZmI1XDAwMVwwMDJcMDAwXDEyMFwwMDJcdWZmY2ZcMDA1XHVmZmNmXDAwNyIgKwotICAgICJcdWZmY2ZcMDEwXHVmZmNmXDAxMVx1ZmZjZlwwMTJcdWZmY2ZcMDEzXHVmZmNmXDAxNFx1ZmZjZlwwMTVcdWZmY2YiICsKLSAgICAiXDAxNlx1ZmZjZlwwMTdcdWZmY2ZcMDIwXHVmZmNmXDAyMVx1ZmZjZlwwMjJcdWZmY2ZcMDIzXHVmZmNmXDAzMiIgKwotICAgICJcdWZmY2ZcMDUzXHVmZmNmXDA1NFx1ZmZjZlwwNTVcdWZmY2ZcMDU2XHVmZmNmXDA1N1x1ZmZjZlwwNjBcdWZmY2YiICsKLSAgICAiXDA2MVx1ZmZjZlwwNjJcdWZmY2ZcMDYzXHVmZmNmXDA2NFx1ZmZjZlwwNjVcdWZmY2ZcMDY2XHVmZmNmXDA2NyIgKwotICAgICJcdWZmY2ZcMDcxXHVmZmNmXDA3M1x1ZmZjZlwwNzRcdWZmY2ZcMDc1XHVmZmNmXDEwMFx1ZmZjZlwxMDFcdWZmY2YiICsKLSAgICAiXDEwMlx1ZmZjZlwxMDdcdWZmY2ZcMTEwXHVmZmNmXDExMVx1ZmZjZlwwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmY4YlwwMDRcdWZmOGJcMDA1XHVmZjhiXDAwN1x1ZmY4YlwwMTBcdWZmOGJcMDExXHVmZjhiXDAxMlx1ZmY4YiIgKwotICAgICJcMDEzXHVmZjhiXDAxNFx1ZmY4YlwwMTVcdWZmOGJcMDE2XHVmZjhiXDAxN1x1ZmY4YlwwMjBcdWZmOGJcMDIxIiArCi0gICAgIlx1ZmY4YlwwMjJcdWZmOGJcMDIzXHVmZjhiXDAyNFx1ZmY4YlwwMjVcdWZmOGJcMDMyXHVmZjhiXDA1M1x1ZmY4YiIgKwotICAgICJcMDU0XHVmZjhiXDA1NVx1ZmY4YlwwNTZcdWZmOGJcMDU3XHVmZjhiXDA2MFx1ZmY4YlwwNjFcdWZmOGJcMDYyIiArCi0gICAgIlx1ZmY4YlwwNjNcdWZmOGJcMDY0XHVmZjhiXDA2NVx1ZmY4YlwwNjZcdWZmOGJcMDY3XHVmZjhiXDA3MVx1ZmY4YiIgKwotICAgICJcMDczXHVmZjhiXDA3NFx1ZmY4YlwwNzVcdWZmOGJcMTAwXHVmZjhiXDEwMVx1ZmY4YlwxMDJcdWZmOGJcMTA3IiArCi0gICAgIlx1ZmY4YlwxMTBcdWZmOGJcMTExXHVmZjhiXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmYTlcMDA0XHVmZmE5IiArCi0gICAgIlwwMDVcdWZmYTlcMDA3XHVmZmE5XDAxMFx1ZmZhOVwwMTFcdWZmYTlcMDEyXHVmZmE5XDAxM1x1ZmZhOVwwMTQiICsKLSAgICAiXHVmZmE5XDAxNVx1ZmZhOVwwMTZcdWZmYTlcMDE3XHVmZmE5XDAyMFx1ZmZhOVwwMjFcdWZmYTlcMDIyXHVmZmE5IiArCi0gICAgIlwwMjNcdWZmYTlcMDI0XHVmZmE5XDAyNVx1ZmZhOVwwMzJcdWZmYTlcMDUzXHVmZmE5XDA1NFx1ZmZhOVwwNTUiICsKLSAgICAiXHVmZmE5XDA1Nlx1ZmZhOVwwNTdcdWZmYTlcMDYwXHVmZmE5XDA2MVx1ZmZhOVwwNjJcdWZmYTlcMDYzXHVmZmE5IiArCi0gICAgIlwwNjRcdWZmYTlcMDY1XHVmZmE5XDA2Nlx1ZmZhOVwwNjdcdWZmYTlcMDcxXHVmZmE5XDA3M1x1ZmZhOVwwNzQiICsKLSAgICAiXHVmZmE5XDA3NVx1ZmZhOVwxMDBcdWZmYTlcMTAxXHVmZmE5XDEwMlx1ZmZhOVwxMDdcdWZmYTlcMTEwXHVmZmE5IiArCi0gICAgIlwxMTFcdWZmYTlcMDAxXDAwMlwwMDBcMDA2XDAwNlwzMDRcMDMxXHVmZjQ1XDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMjZcMDAyXHVmZjlkXDAwNFx1ZmY5ZFwwMDVcdWZmOWRcMDA3XHVmZjlkXDAxMFx1ZmY5ZFwwMTFcdWZmOWQiICsKLSAgICAiXDAxMlx1ZmY5ZFwwMTNcdWZmOWRcMDE0XHVmZjlkXDAxNVx1ZmY5ZFwwMTZcdWZmOWRcMDE3XHVmZjlkXDAyMCIgKwotICAgICJcdWZmOWRcMDIxXHVmZjlkXDAyMlx1ZmY5ZFwwMjNcdWZmOWRcMDI0XHVmZjlkXDAyNVx1ZmY5ZFwwMzJcdWZmOWQiICsKLSAgICAiXDA1M1x1ZmY5ZFwwNTRcdWZmOWRcMDU1XHVmZjlkXDA1Nlx1ZmY5ZFwwNTdcdWZmOWRcMDYwXHVmZjlkXDA2MSIgKwotICAgICJcdWZmOWRcMDYyXHVmZjlkXDA2M1x1ZmY5ZFwwNjRcdWZmOWRcMDY1XHVmZjlkXDA2Nlx1ZmY5ZFwwNjdcdWZmOWQiICsKLSAgICAiXDA3MVx1ZmY5ZFwwNzNcdWZmOWRcMDc0XHVmZjlkXDA3NVx1ZmY5ZFwxMDBcdWZmOWRcMTAxXHVmZjlkXDEwMiIgKwotICAgICJcdWZmOWRcMTA3XHVmZjlkXDExMFx1ZmY5ZFwxMTFcdWZmOWRcMDAxXDAwMlwwMDBcMDA0XDAxMlx1MDEyNyIgKwotICAgICJcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmVmM1wwMDRcdWZlZjNcMDA1XHVmZWYzXDAwNlx1ZmVmM1wwMDciICsKLSAgICAiXHVmZWYzXDAxMFx1ZmVmM1wwMTFcdWZlZjNcMDEyXHVmZWYzXDAxM1x1ZmVmM1wwMTRcdWZlZjNcMDE1XHVmZWYzIiArCi0gICAgIlwwMTZcdWZlZjNcMDE3XHVmZWYzXDAyMFx1ZmVmM1wwMjFcdWZlZjNcMDIyXHVmZWYzXDAyM1x1ZmVmM1wwMjQiICsKLSAgICAiXHVmZWYzXDAyNVx1ZmVmM1wwMzJcdWZlZjNcMDM1XHVmZWYzXDA1M1x1ZmVmM1wwNTRcdWZlZjNcMDU1XHVmZWYzIiArCi0gICAgIlwwNTZcdWZlZjNcMDU3XHVmZWYzXDA2MFx1ZmVmM1wwNjFcdWZlZjNcMDYyXHVmZWYzXDA2M1x1ZmVmM1wwNjQiICsKLSAgICAiXHVmZWYzXDA2NVx1ZmVmM1wwNjZcdWZlZjNcMDY3XHVmZWYzXDA3MVx1ZmVmM1wwNzNcdWZlZjNcMDc0XHVmZWYzIiArCi0gICAgIlwwNzVcdWZlZjNcMDc3XHVmZWYzXDEwMFx1ZmVmM1wxMDFcdWZlZjNcMTAyXHVmZWYzXDEwN1x1ZmVmM1wxMTAiICsKLSAgICAiXHVmZWYzXDExMVx1ZmVmM1wwMDFcMDAyXDAwMFwxNDZcMDEyXHVmZmEyXDAzNlx1ZmZhMlwwMzdcdWZmYTIiICsKLSAgICAiXDA0MFx1ZmZhMlwwNDFcdWZmYTJcMDQyXHVmZmEyXDA0M1x1ZmZhMlwwNDRcdWZmYTJcMDQ1XHVmZmEyXDA0NiIgKwotICAgICJcdWZmYTJcMDQ3XHVmZmEyXDA1MFx1ZmZhMlwwNTFcdWZmYTJcMDUyXHVmZmEyXDA2MVx1ZmZhMlwwNjJcdWZmYTIiICsKLSAgICAiXDA2M1x1ZmZhMlwwNjRcdWZmYTJcMDY1XHVmZmEyXDA2Nlx1ZmZhMlwwNjdcdWZmYTJcMDcwXHVmZmEyXDA3MSIgKwotICAgICJcdWZmYTJcMDczXHVmZmEyXDA3NFx1ZmZhMlwwNzVcdWZmYTJcMDc2XHVmZmEyXDA3N1x1ZmZhMlwxMDBcdWZmYTIiICsKLSAgICAiXDEwMVx1ZmZhMlwxMDJcdWZmYTJcMTAzXHVmZmEyXDEwNFx1ZmZhMlwxMDVcdWZmYTJcMTA2XHVmZmEyXDEwNyIgKwotICAgICJcdWZmYTJcMTEwXHVmZmEyXDExMVx1ZmZhMlwxMTJcdWZmYTJcMTEzXHVmZmEyXDExNFx1ZmZhMlwxMTVcdWZmYTIiICsKLSAgICAiXDExNlx1ZmZhMlwxMTdcdWZmYTJcMTIwXHVmZmEyXDEyMVx1ZmZhMlwxMjJcdWZmYTJcMTIzXHVmZmEyXDEyNCIgKwotICAgICJcdWZmYTJcMTMxXHVmZmEyXDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmYzFcMDEwXHVmZmMxXDAxMVx1ZmZjMSIgKwotICAgICJcMDEyXHVmZmMxXDAyNFx1ZmZjMVwwMjVcdWZmYzFcMDI3XHVmZmMxXDAzMFx1ZmZjMVwwMzNcdWZmYzFcMDM0IiArCi0gICAgIlx1ZmZjMVwwMzZcdWZmYzFcMDM3XHVmZmMxXDA0MFx1ZmZjMVwwNDFcdWZmYzFcMDQyXHVmZmMxXDA0M1x1ZmZjMSIgKwotICAgICJcMDQ0XHVmZmMxXDA0NVx1ZmZjMVwwNDZcdWZmYzFcMDQ3XHVmZmMxXDA1MFx1ZmZjMVwwNTFcdWZmYzFcMDUyIiArCi0gICAgIlx1ZmZjMVwwNjFcdWZmYzFcMDYyXHVmZmMxXDA2M1x1ZmZjMVwwNjRcdWZmYzFcMDY1XHVmZmMxXDA2Nlx1ZmZjMSIgKwotICAgICJcMDY3XHVmZmMxXDA3MFx1ZmZjMVwwNzFcdWZmYzFcMDczXHVmZmMxXDA3NFx1ZmZjMVwwNzVcdWZmYzFcMDc2IiArCi0gICAgIlx1ZmZjMVwwNzdcdWZmYzFcMTAwXHVmZmMxXDEwMVx1ZmZjMVwxMDJcdWZmYzFcMTAzXHVmZmMxXDEwNFx1ZmZjMSIgKwotICAgICJcMTA1XHVmZmMxXDEwNlx1ZmZjMVwxMDdcdWZmYzFcMTEwXHVmZmMxXDExMVx1ZmZjMVwxMTJcdWZmYzFcMTEzIiArCi0gICAgIlx1ZmZjMVwxMTRcdWZmYzFcMTE1XHVmZmMxXDExNlx1ZmZjMVwxMTdcdWZmYzFcMTIwXHVmZmMxXDEyMVx1ZmZjMSIgKwotICAgICJcMTIyXHVmZmMxXDEyM1x1ZmZjMVwxMjRcdWZmYzFcMTI1XHVmZmMxXDEyNlx1ZmZjMVwxMjdcdWZmYzFcMTMwIiArCi0gICAgIlx1ZmZjMVwxMzFcdWZmYzFcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZjNVwwMTBcdWZmYzVcMDExXHVmZmM1IiArCi0gICAgIlwwMTJcdWZmYzVcMDI0XHVmZmM1XDAyNVx1ZmZjNVwwMjdcdWZmYzVcMDMwXHVmZmM1XDAzM1x1ZmZjNVwwMzQiICsKLSAgICAiXHVmZmM1XDAzNlx1ZmZjNVwwMzdcdWZmYzVcMDQwXHVmZmM1XDA0MVx1ZmZjNVwwNDJcdWZmYzVcMDQzXHVmZmM1IiArCi0gICAgIlwwNDRcdWZmYzVcMDQ1XHVmZmM1XDA0Nlx1ZmZjNVwwNDdcdWZmYzVcMDUwXHVmZmM1XDA1MVx1ZmZjNVwwNTIiICsKLSAgICAiXHVmZmM1XDA2MVx1ZmZjNVwwNjJcdWZmYzVcMDYzXHVmZmM1XDA2NFx1ZmZjNVwwNjVcdWZmYzVcMDY2XHVmZmM1IiArCi0gICAgIlwwNjdcdWZmYzVcMDcwXHVmZmM1XDA3MVx1ZmZjNVwwNzNcdWZmYzVcMDc0XHVmZmM1XDA3NVx1ZmZjNVwwNzYiICsKLSAgICAiXHVmZmM1XDA3N1x1ZmZjNVwxMDBcdWZmYzVcMTAxXHVmZmM1XDEwMlx1ZmZjNVwxMDNcdWZmYzVcMTA0XHVmZmM1IiArCi0gICAgIlwxMDVcdWZmYzVcMTA2XHVmZmM1XDEwN1x1ZmZjNVwxMTBcdWZmYzVcMTExXHVmZmM1XDExMlx1ZmZjNVwxMTMiICsKLSAgICAiXHVmZmM1XDExNFx1ZmZjNVwxMTVcdWZmYzVcMTE2XHVmZmM1XDExN1x1ZmZjNVwxMjBcdWZmYzVcMTIxXHVmZmM1IiArCi0gICAgIlwxMjJcdWZmYzVcMTIzXHVmZmM1XDEyNFx1ZmZjNVwxMjVcdWZmYzVcMTI2XHVmZmM1XDEyN1x1ZmZjNVwxMzAiICsKLSAgICAiXHVmZmM1XDEzMVx1ZmZjNVwwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmM2XDAxMFx1ZmZjNlwwMTFcdWZmYzYiICsKLSAgICAiXDAxMlx1ZmZjNlwwMjRcdWZmYzZcMDI1XHVmZmM2XDAyN1x1ZmZjNlwwMzBcdWZmYzZcMDMzXHVmZmM2XDAzNCIgKwotICAgICJcdWZmYzZcMDM2XHVmZmM2XDAzN1x1ZmZjNlwwNDBcdWZmYzZcMDQxXHVmZmM2XDA0Mlx1ZmZjNlwwNDNcdWZmYzYiICsKLSAgICAiXDA0NFx1ZmZjNlwwNDVcdWZmYzZcMDQ2XHVmZmM2XDA0N1x1ZmZjNlwwNTBcdWZmYzZcMDUxXHVmZmM2XDA1MiIgKwotICAgICJcdWZmYzZcMDYxXHVmZmM2XDA2Mlx1ZmZjNlwwNjNcdWZmYzZcMDY0XHVmZmM2XDA2NVx1ZmZjNlwwNjZcdWZmYzYiICsKLSAgICAiXDA2N1x1ZmZjNlwwNzBcdWZmYzZcMDcxXHVmZmM2XDA3M1x1ZmZjNlwwNzRcdWZmYzZcMDc1XHVmZmM2XDA3NiIgKwotICAgICJcdWZmYzZcMDc3XHVmZmM2XDEwMFx1ZmZjNlwxMDFcdWZmYzZcMTAyXHVmZmM2XDEwM1x1ZmZjNlwxMDRcdWZmYzYiICsKLSAgICAiXDEwNVx1ZmZjNlwxMDZcdWZmYzZcMTA3XHVmZmM2XDExMFx1ZmZjNlwxMTFcdWZmYzZcMTEyXHVmZmM2XDExMyIgKwotICAgICJcdWZmYzZcMTE0XHVmZmM2XDExNVx1ZmZjNlwxMTZcdWZmYzZcMTE3XHVmZmM2XDEyMFx1ZmZjNlwxMjFcdWZmYzYiICsKLSAgICAiXDEyMlx1ZmZjNlwxMjNcdWZmYzZcMTI0XHVmZmM2XDEyNVx1ZmZjNlwxMjZcdWZmYzZcMTI3XHVmZmM2XDEzMCIgKwotICAgICJcdWZmYzZcMTMxXHVmZmM2XDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmYmZcMDEwXHVmZmJmXDAxMVx1ZmZiZiIgKwotICAgICJcMDEyXHVmZmJmXDAyNFx1ZmZiZlwwMjVcdWZmYmZcMDI3XHVmZmJmXDAzMFx1ZmZiZlwwMzNcdWZmYmZcMDM0IiArCi0gICAgIlx1ZmZiZlwwMzZcdWZmYmZcMDM3XHVmZmJmXDA0MFx1ZmZiZlwwNDFcdWZmYmZcMDQyXHVmZmJmXDA0M1x1ZmZiZiIgKwotICAgICJcMDQ0XHVmZmJmXDA0NVx1ZmZiZlwwNDZcdWZmYmZcMDQ3XHVmZmJmXDA1MFx1ZmZiZlwwNTFcdWZmYmZcMDUyIiArCi0gICAgIlx1ZmZiZlwwNjFcdWZmYmZcMDYyXHVmZmJmXDA2M1x1ZmZiZlwwNjRcdWZmYmZcMDY1XHVmZmJmXDA2Nlx1ZmZiZiIgKwotICAgICJcMDY3XHVmZmJmXDA3MFx1ZmZiZlwwNzFcdWZmYmZcMDczXHVmZmJmXDA3NFx1ZmZiZlwwNzVcdWZmYmZcMDc2IiArCi0gICAgIlx1ZmZiZlwwNzdcdWZmYmZcMTAwXHVmZmJmXDEwMVx1ZmZiZlwxMDJcdWZmYmZcMTAzXHVmZmJmXDEwNFx1ZmZiZiIgKwotICAgICJcMTA1XHVmZmJmXDEwNlx1ZmZiZlwxMDdcdWZmYmZcMTEwXHVmZmJmXDExMVx1ZmZiZlwxMTJcdWZmYmZcMTEzIiArCi0gICAgIlx1ZmZiZlwxMTRcdWZmYmZcMTE1XHVmZmJmXDExNlx1ZmZiZlwxMTdcdWZmYmZcMTIwXHVmZmJmXDEyMVx1ZmZiZiIgKwotICAgICJcMTIyXHVmZmJmXDEyM1x1ZmZiZlwxMjRcdWZmYmZcMTI1XHVmZmJmXDEyNlx1ZmZiZlwxMjdcdWZmYmZcMTMwIiArCi0gICAgIlx1ZmZiZlwxMzFcdWZmYmZcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZjOVwwMTBcdWZmYzlcMDExXHVmZmM5IiArCi0gICAgIlwwMTJcdWZmYzlcMDI0XHVmZmM5XDAyNVx1ZmZjOVwwMjdcdWZmYzlcMDMwXHVmZmM5XDAzM1x1ZmZjOVwwMzQiICsKLSAgICAiXHVmZmM5XDAzNlx1ZmZjOVwwMzdcdWZmYzlcMDQwXHVmZmM5XDA0MVx1ZmZjOVwwNDJcdWZmYzlcMDQzXHVmZmM5IiArCi0gICAgIlwwNDRcdWZmYzlcMDQ1XHVmZmM5XDA0Nlx1ZmZjOVwwNDdcdWZmYzlcMDUwXHVmZmM5XDA1MVx1ZmZjOVwwNTIiICsKLSAgICAiXHVmZmM5XDA2MVx1ZmZjOVwwNjJcdWZmYzlcMDYzXHVmZmM5XDA2NFx1ZmZjOVwwNjVcdWZmYzlcMDY2XHVmZmM5IiArCi0gICAgIlwwNjdcdWZmYzlcMDcwXHVmZmM5XDA3MVx1ZmZjOVwwNzNcdWZmYzlcMDc0XHVmZmM5XDA3NVx1ZmZjOVwwNzYiICsKLSAgICAiXHVmZmM5XDA3N1x1ZmZjOVwxMDBcdWZmYzlcMTAxXHVmZmM5XDEwMlx1ZmZjOVwxMDNcdWZmYzlcMTA0XHVmZmM5IiArCi0gICAgIlwxMDVcdWZmYzlcMTA2XHVmZmM5XDEwN1x1ZmZjOVwxMTBcdWZmYzlcMTExXHVmZmM5XDExMlx1ZmZjOVwxMTMiICsKLSAgICAiXHVmZmM5XDExNFx1ZmZjOVwxMTVcdWZmYzlcMTE2XHVmZmM5XDExN1x1ZmZjOVwxMjBcdWZmYzlcMTIxXHVmZmM5IiArCi0gICAgIlwxMjJcdWZmYzlcMTIzXHVmZmM5XDEyNFx1ZmZjOVwxMjVcdWZmYzlcMTI2XHVmZmM5XDEyN1x1ZmZjOVwxMzAiICsKLSAgICAiXHVmZmM5XDEzMVx1ZmZjOVwwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmMzXDAxMFx1ZmZjM1wwMTFcdWZmYzMiICsKLSAgICAiXDAxMlx1ZmZjM1wwMjRcdWZmYzNcMDI1XHVmZmMzXDAyN1x1ZmZjM1wwMzBcdWZmYzNcMDMzXHVmZmMzXDAzNCIgKwotICAgICJcdWZmYzNcMDM2XHVmZmMzXDAzN1x1ZmZjM1wwNDBcdWZmYzNcMDQxXHVmZmMzXDA0Mlx1ZmZjM1wwNDNcdWZmYzMiICsKLSAgICAiXDA0NFx1ZmZjM1wwNDVcdWZmYzNcMDQ2XHVmZmMzXDA0N1x1ZmZjM1wwNTBcdWZmYzNcMDUxXHVmZmMzXDA1MiIgKwotICAgICJcdWZmYzNcMDYxXHVmZmMzXDA2Mlx1ZmZjM1wwNjNcdWZmYzNcMDY0XHVmZmMzXDA2NVx1ZmZjM1wwNjZcdWZmYzMiICsKLSAgICAiXDA2N1x1ZmZjM1wwNzBcdWZmYzNcMDcxXHVmZmMzXDA3M1x1ZmZjM1wwNzRcdWZmYzNcMDc1XHVmZmMzXDA3NiIgKwotICAgICJcdWZmYzNcMDc3XHVmZmMzXDEwMFx1ZmZjM1wxMDFcdWZmYzNcMTAyXHVmZmMzXDEwM1x1ZmZjM1wxMDRcdWZmYzMiICsKLSAgICAiXDEwNVx1ZmZjM1wxMDZcdWZmYzNcMTA3XHVmZmMzXDExMFx1ZmZjM1wxMTFcdWZmYzNcMTEyXHVmZmMzXDExMyIgKwotICAgICJcdWZmYzNcMTE0XHVmZmMzXDExNVx1ZmZjM1wxMTZcdWZmYzNcMTE3XHVmZmMzXDEyMFx1ZmZjM1wxMjFcdWZmYzMiICsKLSAgICAiXDEyMlx1ZmZjM1wxMjNcdWZmYzNcMTI0XHVmZmMzXDEyNVx1ZmZjM1wxMjZcdWZmYzNcMTI3XHVmZmMzXDEzMCIgKwotICAgICJcdWZmYzNcMTMxXHVmZmMzXDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmY2FcMDEwXHVmZmNhXDAxMVx1ZmZjYSIgKwotICAgICJcMDEyXHVmZmNhXDAyNFx1ZmZjYVwwMjVcdWZmY2FcMDI3XHVmZmNhXDAzMFx1ZmZjYVwwMzNcdWZmY2FcMDM0IiArCi0gICAgIlx1ZmZjYVwwMzZcdWZmY2FcMDM3XHVmZmNhXDA0MFx1ZmZjYVwwNDFcdWZmY2FcMDQyXHVmZmNhXDA0M1x1ZmZjYSIgKwotICAgICJcMDQ0XHVmZmNhXDA0NVx1ZmZjYVwwNDZcdWZmY2FcMDQ3XHVmZmNhXDA1MFx1ZmZjYVwwNTFcdWZmY2FcMDUyIiArCi0gICAgIlx1ZmZjYVwwNjFcdWZmY2FcMDYyXHVmZmNhXDA2M1x1ZmZjYVwwNjRcdWZmY2FcMDY1XHVmZmNhXDA2Nlx1ZmZjYSIgKwotICAgICJcMDY3XHVmZmNhXDA3MFx1ZmZjYVwwNzFcdWZmY2FcMDczXHVmZmNhXDA3NFx1ZmZjYVwwNzVcdWZmY2FcMDc2IiArCi0gICAgIlx1ZmZjYVwwNzdcdWZmY2FcMTAwXHVmZmNhXDEwMVx1ZmZjYVwxMDJcdWZmY2FcMTAzXHVmZmNhXDEwNFx1ZmZjYSIgKwotICAgICJcMTA1XHVmZmNhXDEwNlx1ZmZjYVwxMDdcdWZmY2FcMTEwXHVmZmNhXDExMVx1ZmZjYVwxMTJcdWZmY2FcMTEzIiArCi0gICAgIlx1ZmZjYVwxMTRcdWZmY2FcMTE1XHVmZmNhXDExNlx1ZmZjYVwxMTdcdWZmY2FcMTIwXHVmZmNhXDEyMVx1ZmZjYSIgKwotICAgICJcMTIyXHVmZmNhXDEyM1x1ZmZjYVwxMjRcdWZmY2FcMTI1XHVmZmNhXDEyNlx1ZmZjYVwxMjdcdWZmY2FcMTMwIiArCi0gICAgIlx1ZmZjYVwxMzFcdWZmY2FcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZjNFwwMTBcdWZmYzRcMDExXHVmZmM0IiArCi0gICAgIlwwMTJcdWZmYzRcMDI0XHVmZmM0XDAyNVx1ZmZjNFwwMjdcdWZmYzRcMDMwXHVmZmM0XDAzM1x1ZmZjNFwwMzQiICsKLSAgICAiXHVmZmM0XDAzNlx1ZmZjNFwwMzdcdWZmYzRcMDQwXHVmZmM0XDA0MVx1ZmZjNFwwNDJcdWZmYzRcMDQzXHVmZmM0IiArCi0gICAgIlwwNDRcdWZmYzRcMDQ1XHVmZmM0XDA0Nlx1ZmZjNFwwNDdcdWZmYzRcMDUwXHVmZmM0XDA1MVx1ZmZjNFwwNTIiICsKLSAgICAiXHVmZmM0XDA2MVx1ZmZjNFwwNjJcdWZmYzRcMDYzXHVmZmM0XDA2NFx1ZmZjNFwwNjVcdWZmYzRcMDY2XHVmZmM0IiArCi0gICAgIlwwNjdcdWZmYzRcMDcwXHVmZmM0XDA3MVx1ZmZjNFwwNzNcdWZmYzRcMDc0XHVmZmM0XDA3NVx1ZmZjNFwwNzYiICsKLSAgICAiXHVmZmM0XDA3N1x1ZmZjNFwxMDBcdWZmYzRcMTAxXHVmZmM0XDEwMlx1ZmZjNFwxMDNcdWZmYzRcMTA0XHVmZmM0IiArCi0gICAgIlwxMDVcdWZmYzRcMTA2XHVmZmM0XDEwN1x1ZmZjNFwxMTBcdWZmYzRcMTExXHVmZmM0XDExMlx1ZmZjNFwxMTMiICsKLSAgICAiXHVmZmM0XDExNFx1ZmZjNFwxMTVcdWZmYzRcMTE2XHVmZmM0XDExN1x1ZmZjNFwxMjBcdWZmYzRcMTIxXHVmZmM0IiArCi0gICAgIlwxMjJcdWZmYzRcMTIzXHVmZmM0XDEyNFx1ZmZjNFwxMjVcdWZmYzRcMTI2XHVmZmM0XDEyN1x1ZmZjNFwxMzAiICsKLSAgICAiXHVmZmM0XDEzMVx1ZmZjNFwwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmNkXDAxMFx1ZmZjZFwwMTFcdWZmY2QiICsKLSAgICAiXDAxMlx1ZmZjZFwwMjRcdWZmY2RcMDI1XHVmZmNkXDAyN1x1ZmZjZFwwMzBcdWZmY2RcMDMzXHVmZmNkXDAzNCIgKwotICAgICJcdWZmY2RcMDM2XHVmZmNkXDAzN1x1ZmZjZFwwNDBcdWZmY2RcMDQxXHVmZmNkXDA0Mlx1ZmZjZFwwNDNcdWZmY2QiICsKLSAgICAiXDA0NFx1ZmZjZFwwNDVcdWZmY2RcMDQ2XHVmZmNkXDA0N1x1ZmZjZFwwNTBcdWZmY2RcMDUxXHVmZmNkXDA1MiIgKwotICAgICJcdWZmY2RcMDYxXHVmZmNkXDA2Mlx1ZmZjZFwwNjNcdWZmY2RcMDY0XHVmZmNkXDA2NVx1ZmZjZFwwNjZcdWZmY2QiICsKLSAgICAiXDA2N1x1ZmZjZFwwNzBcdWZmY2RcMDcxXHVmZmNkXDA3M1x1ZmZjZFwwNzRcdWZmY2RcMDc1XHVmZmNkXDA3NiIgKwotICAgICJcdWZmY2RcMDc3XHVmZmNkXDEwMFx1ZmZjZFwxMDFcdWZmY2RcMTAyXHVmZmNkXDEwM1x1ZmZjZFwxMDRcdWZmY2QiICsKLSAgICAiXDEwNVx1ZmZjZFwxMDZcdWZmY2RcMTA3XHVmZmNkXDExMFx1ZmZjZFwxMTFcdWZmY2RcMTEyXHVmZmNkXDExMyIgKwotICAgICJcdWZmY2RcMTE0XHVmZmNkXDExNVx1ZmZjZFwxMTZcdWZmY2RcMTE3XHVmZmNkXDEyMFx1ZmZjZFwxMjFcdWZmY2QiICsKLSAgICAiXDEyMlx1ZmZjZFwxMjNcdWZmY2RcMTI0XHVmZmNkXDEyNVx1ZmZjZFwxMjZcdWZmY2RcMTI3XHVmZmNkXDEzMCIgKwotICAgICJcdWZmY2RcMTMxXHVmZmNkXDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmY2NcMDEwXHVmZmNjXDAxMVx1ZmZjYyIgKwotICAgICJcMDEyXHVmZmNjXDAyNFx1ZmZjY1wwMjVcdWZmY2NcMDI3XHVmZmNjXDAzMFx1ZmZjY1wwMzNcdWZmY2NcMDM0IiArCi0gICAgIlx1ZmZjY1wwMzZcdWZmY2NcMDM3XHVmZmNjXDA0MFx1ZmZjY1wwNDFcdWZmY2NcMDQyXHVmZmNjXDA0M1x1ZmZjYyIgKwotICAgICJcMDQ0XHVmZmNjXDA0NVx1ZmZjY1wwNDZcdWZmY2NcMDQ3XHVmZmNjXDA1MFx1ZmZjY1wwNTFcdWZmY2NcMDUyIiArCi0gICAgIlx1ZmZjY1wwNjFcdWZmY2NcMDYyXHVmZmNjXDA2M1x1ZmZjY1wwNjRcdWZmY2NcMDY1XHVmZmNjXDA2Nlx1ZmZjYyIgKwotICAgICJcMDY3XHVmZmNjXDA3MFx1ZmZjY1wwNzFcdWZmY2NcMDczXHVmZmNjXDA3NFx1ZmZjY1wwNzVcdWZmY2NcMDc2IiArCi0gICAgIlx1ZmZjY1wwNzdcdWZmY2NcMTAwXHVmZmNjXDEwMVx1ZmZjY1wxMDJcdWZmY2NcMTAzXHVmZmNjXDEwNFx1ZmZjYyIgKwotICAgICJcMTA1XHVmZmNjXDEwNlx1ZmZjY1wxMDdcdWZmY2NcMTEwXHVmZmNjXDExMVx1ZmZjY1wxMTJcdWZmY2NcMTEzIiArCi0gICAgIlx1ZmZjY1wxMTRcdWZmY2NcMTE1XHVmZmNjXDExNlx1ZmZjY1wxMTdcdWZmY2NcMTIwXHVmZmNjXDEyMVx1ZmZjYyIgKwotICAgICJcMTIyXHVmZmNjXDEyM1x1ZmZjY1wxMjRcdWZmY2NcMTI1XHVmZmNjXDEyNlx1ZmZjY1wxMjdcdWZmY2NcMTMwIiArCi0gICAgIlx1ZmZjY1wxMzFcdWZmY2NcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZjYlwwMTBcdWZmY2JcMDExXHVmZmNiIiArCi0gICAgIlwwMTJcdWZmY2JcMDI0XHVmZmNiXDAyNVx1ZmZjYlwwMjdcdWZmY2JcMDMwXHVmZmNiXDAzM1x1ZmZjYlwwMzQiICsKLSAgICAiXHVmZmNiXDAzNlx1ZmZjYlwwMzdcdWZmY2JcMDQwXHVmZmNiXDA0MVx1ZmZjYlwwNDJcdWZmY2JcMDQzXHVmZmNiIiArCi0gICAgIlwwNDRcdWZmY2JcMDQ1XHVmZmNiXDA0Nlx1ZmZjYlwwNDdcdWZmY2JcMDUwXHVmZmNiXDA1MVx1ZmZjYlwwNTIiICsKLSAgICAiXHVmZmNiXDA2MVx1ZmZjYlwwNjJcdWZmY2JcMDYzXHVmZmNiXDA2NFx1ZmZjYlwwNjVcdWZmY2JcMDY2XHVmZmNiIiArCi0gICAgIlwwNjdcdWZmY2JcMDcwXHVmZmNiXDA3MVx1ZmZjYlwwNzNcdWZmY2JcMDc0XHVmZmNiXDA3NVx1ZmZjYlwwNzYiICsKLSAgICAiXHVmZmNiXDA3N1x1ZmZjYlwxMDBcdWZmY2JcMTAxXHVmZmNiXDEwMlx1ZmZjYlwxMDNcdWZmY2JcMTA0XHVmZmNiIiArCi0gICAgIlwxMDVcdWZmY2JcMTA2XHVmZmNiXDEwN1x1ZmZjYlwxMTBcdWZmY2JcMTExXHVmZmNiXDExMlx1ZmZjYlwxMTMiICsKLSAgICAiXHVmZmNiXDExNFx1ZmZjYlwxMTVcdWZmY2JcMTE2XHVmZmNiXDExN1x1ZmZjYlwxMjBcdWZmY2JcMTIxXHVmZmNiIiArCi0gICAgIlwxMjJcdWZmY2JcMTIzXHVmZmNiXDEyNFx1ZmZjYlwxMjVcdWZmY2JcMTI2XHVmZmNiXDEyN1x1ZmZjYlwxMzAiICsKLSAgICAiXHVmZmNiXDEzMVx1ZmZjYlwwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzQiICsKLSAgICAiXDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNCIgKwotICAgICJcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxIiArCi0gICAgIlwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTIiICsKLSAgICAiXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MiIgKwotICAgICJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2IiArCi0gICAgIlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDEiICsKLSAgICAiXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExMyIgKwotICAgICJcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2IiArCi0gICAgIlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzAiICsKLSAgICAiXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmYzJcMDEwXHVmZmMyXDAxMVx1ZmZjMiIgKwotICAgICJcMDEyXHVmZmMyXDAyNFx1ZmZjMlwwMjVcdWZmYzJcMDI3XHVmZmMyXDAzMFx1ZmZjMlwwMzNcdWZmYzJcMDM0IiArCi0gICAgIlx1ZmZjMlwwMzZcdWZmYzJcMDM3XHVmZmMyXDA0MFx1ZmZjMlwwNDFcdWZmYzJcMDQyXHVmZmMyXDA0M1x1ZmZjMiIgKwotICAgICJcMDQ0XHVmZmMyXDA0NVx1ZmZjMlwwNDZcdWZmYzJcMDQ3XHVmZmMyXDA1MFx1ZmZjMlwwNTFcdWZmYzJcMDUyIiArCi0gICAgIlx1ZmZjMlwwNjFcdWZmYzJcMDYyXHVmZmMyXDA2M1x1ZmZjMlwwNjRcdWZmYzJcMDY1XHVmZmMyXDA2Nlx1ZmZjMiIgKwotICAgICJcMDY3XHVmZmMyXDA3MFx1ZmZjMlwwNzFcdWZmYzJcMDczXHVmZmMyXDA3NFx1ZmZjMlwwNzVcdWZmYzJcMDc2IiArCi0gICAgIlx1ZmZjMlwwNzdcdWZmYzJcMTAwXHVmZmMyXDEwMVx1ZmZjMlwxMDJcdWZmYzJcMTAzXHVmZmMyXDEwNFx1ZmZjMiIgKwotICAgICJcMTA1XHVmZmMyXDEwNlx1ZmZjMlwxMDdcdWZmYzJcMTEwXHVmZmMyXDExMVx1ZmZjMlwxMTJcdWZmYzJcMTEzIiArCi0gICAgIlx1ZmZjMlwxMTRcdWZmYzJcMTE1XHVmZmMyXDExNlx1ZmZjMlwxMTdcdWZmYzJcMTIwXHVmZmMyXDEyMVx1ZmZjMiIgKwotICAgICJcMTIyXHVmZmMyXDEyM1x1ZmZjMlwxMjRcdWZmYzJcMTI1XHVmZmMyXDEyNlx1ZmZjMlwxMjdcdWZmYzJcMTMwIiArCi0gICAgIlx1ZmZjMlwxMzFcdWZmYzJcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZjN1wwMTBcdWZmYzdcMDExXHVmZmM3IiArCi0gICAgIlwwMTJcdWZmYzdcMDI0XHVmZmM3XDAyNVx1ZmZjN1wwMjdcdWZmYzdcMDMwXHVmZmM3XDAzM1x1ZmZjN1wwMzQiICsKLSAgICAiXHVmZmM3XDAzNlx1ZmZjN1wwMzdcdWZmYzdcMDQwXHVmZmM3XDA0MVx1ZmZjN1wwNDJcdWZmYzdcMDQzXHVmZmM3IiArCi0gICAgIlwwNDRcdWZmYzdcMDQ1XHVmZmM3XDA0Nlx1ZmZjN1wwNDdcdWZmYzdcMDUwXHVmZmM3XDA1MVx1ZmZjN1wwNTIiICsKLSAgICAiXHVmZmM3XDA2MVx1ZmZjN1wwNjJcdWZmYzdcMDYzXHVmZmM3XDA2NFx1ZmZjN1wwNjVcdWZmYzdcMDY2XHVmZmM3IiArCi0gICAgIlwwNjdcdWZmYzdcMDcwXHVmZmM3XDA3MVx1ZmZjN1wwNzNcdWZmYzdcMDc0XHVmZmM3XDA3NVx1ZmZjN1wwNzYiICsKLSAgICAiXHVmZmM3XDA3N1x1ZmZjN1wxMDBcdWZmYzdcMTAxXHVmZmM3XDEwMlx1ZmZjN1wxMDNcdWZmYzdcMTA0XHVmZmM3IiArCi0gICAgIlwxMDVcdWZmYzdcMTA2XHVmZmM3XDEwN1x1ZmZjN1wxMTBcdWZmYzdcMTExXHVmZmM3XDExMlx1ZmZjN1wxMTMiICsKLSAgICAiXHVmZmM3XDExNFx1ZmZjN1wxMTVcdWZmYzdcMTE2XHVmZmM3XDExN1x1ZmZjN1wxMjBcdWZmYzdcMTIxXHVmZmM3IiArCi0gICAgIlwxMjJcdWZmYzdcMTIzXHVmZmM3XDEyNFx1ZmZjN1wxMjVcdWZmYzdcMTI2XHVmZmM3XDEyN1x1ZmZjN1wxMzAiICsKLSAgICAiXHVmZmM3XDEzMVx1ZmZjN1wwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmMwXDAxMFx1ZmZjMFwwMTFcdWZmYzAiICsKLSAgICAiXDAxMlx1ZmZjMFwwMjRcdWZmYzBcMDI1XHVmZmMwXDAyN1x1ZmZjMFwwMzBcdWZmYzBcMDMzXHVmZmMwXDAzNCIgKwotICAgICJcdWZmYzBcMDM2XHVmZmMwXDAzN1x1ZmZjMFwwNDBcdWZmYzBcMDQxXHVmZmMwXDA0Mlx1ZmZjMFwwNDNcdWZmYzAiICsKLSAgICAiXDA0NFx1ZmZjMFwwNDVcdWZmYzBcMDQ2XHVmZmMwXDA0N1x1ZmZjMFwwNTBcdWZmYzBcMDUxXHVmZmMwXDA1MiIgKwotICAgICJcdWZmYzBcMDYxXHVmZmMwXDA2Mlx1ZmZjMFwwNjNcdWZmYzBcMDY0XHVmZmMwXDA2NVx1ZmZjMFwwNjZcdWZmYzAiICsKLSAgICAiXDA2N1x1ZmZjMFwwNzBcdWZmYzBcMDcxXHVmZmMwXDA3M1x1ZmZjMFwwNzRcdWZmYzBcMDc1XHVmZmMwXDA3NiIgKwotICAgICJcdWZmYzBcMDc3XHVmZmMwXDEwMFx1ZmZjMFwxMDFcdWZmYzBcMTAyXHVmZmMwXDEwM1x1ZmZjMFwxMDRcdWZmYzAiICsKLSAgICAiXDEwNVx1ZmZjMFwxMDZcdWZmYzBcMTA3XHVmZmMwXDExMFx1ZmZjMFwxMTFcdWZmYzBcMTEyXHVmZmMwXDExMyIgKwotICAgICJcdWZmYzBcMTE0XHVmZmMwXDExNVx1ZmZjMFwxMTZcdWZmYzBcMTE3XHVmZmMwXDEyMFx1ZmZjMFwxMjFcdWZmYzAiICsKLSAgICAiXDEyMlx1ZmZjMFwxMjNcdWZmYzBcMTI0XHVmZmMwXDEyNVx1ZmZjMFwxMjZcdWZmYzBcMTI3XHVmZmMwXDEzMCIgKwotICAgICJcdWZmYzBcMTMxXHVmZmMwXDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNCIgKwotICAgICJcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0IiArCi0gICAgIlwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDEiICsKLSAgICAiXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MiIgKwotICAgICJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyIiArCi0gICAgIlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzYiICsKLSAgICAiXDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMSIgKwotICAgICJcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzIiArCi0gICAgIlwxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTYiICsKLSAgICAiXDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMCIgKwotICAgICJcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0IiArCi0gICAgIlwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzQiICsKLSAgICAiXDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MSIgKwotICAgICJcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyIiArCi0gICAgIlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzIiICsKLSAgICAiXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NiIgKwotICAgICJcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxIiArCi0gICAgIlwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTMiICsKLSAgICAiXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NiIgKwotICAgICJcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwIiArCi0gICAgIlwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmM4XDAxMFx1ZmZjOFwwMTFcdWZmYzgiICsKLSAgICAiXDAxMlx1ZmZjOFwwMjRcdWZmYzhcMDI1XHVmZmM4XDAyN1x1ZmZjOFwwMzBcdWZmYzhcMDMzXHVmZmM4XDAzNCIgKwotICAgICJcdWZmYzhcMDM2XHVmZmM4XDAzN1x1ZmZjOFwwNDBcdWZmYzhcMDQxXHVmZmM4XDA0Mlx1ZmZjOFwwNDNcdWZmYzgiICsKLSAgICAiXDA0NFx1ZmZjOFwwNDVcdWZmYzhcMDQ2XHVmZmM4XDA0N1x1ZmZjOFwwNTBcdWZmYzhcMDUxXHVmZmM4XDA1MiIgKwotICAgICJcdWZmYzhcMDYxXHVmZmM4XDA2Mlx1ZmZjOFwwNjNcdWZmYzhcMDY0XHVmZmM4XDA2NVx1ZmZjOFwwNjZcdWZmYzgiICsKLSAgICAiXDA2N1x1ZmZjOFwwNzBcdWZmYzhcMDcxXHVmZmM4XDA3M1x1ZmZjOFwwNzRcdWZmYzhcMDc1XHVmZmM4XDA3NiIgKwotICAgICJcdWZmYzhcMDc3XHVmZmM4XDEwMFx1ZmZjOFwxMDFcdWZmYzhcMTAyXHVmZmM4XDEwM1x1ZmZjOFwxMDRcdWZmYzgiICsKLSAgICAiXDEwNVx1ZmZjOFwxMDZcdWZmYzhcMTA3XHVmZmM4XDExMFx1ZmZjOFwxMTFcdWZmYzhcMTEyXHVmZmM4XDExMyIgKwotICAgICJcdWZmYzhcMTE0XHVmZmM4XDExNVx1ZmZjOFwxMTZcdWZmYzhcMTE3XHVmZmM4XDEyMFx1ZmZjOFwxMjFcdWZmYzgiICsKLSAgICAiXDEyMlx1ZmZjOFwxMjNcdWZmYzhcMTI0XHVmZmM4XDEyNVx1ZmZjOFwxMjZcdWZmYzhcMTI3XHVmZmM4XDEzMCIgKwotICAgICJcdWZmYzhcMTMxXHVmZmM4XDAwMVwwMDJcMDAwXDAyNFwwMDJcdWZmZWFcMDA1XHVmZmVhXDAwN1x1ZmZlYSIgKwotICAgICJcMDMyXHVmZmVhXDEwMFx1ZmZlYVwxMDFcdWZmZWFcMTA3XHVmZmVhXDExMFx1ZmZlYVwxMTFcdWZmZWFcMDAxIiArCi0gICAgIlwwMDJcMDAwXDAyNFwwMDJcdWZmZWJcMDA1XHVmZmViXDAwN1x1ZmZlYlwwMzJcdWZmZWJcMTAwXHVmZmViIiArCi0gICAgIlwxMDFcdWZmZWJcMTA3XHVmZmViXDExMFx1ZmZlYlwxMTFcdWZmZWJcMDAxXDAwMlwwMDBcMDI0XDAwMiIgKwotICAgICJcdWZmZWNcMDA1XHVmZmVjXDAwN1x1ZmZlY1wwMzJcdWZmZWNcMTAwXHVmZmVjXDEwMVx1ZmZlY1wxMDdcdWZmZWMiICsKLSAgICAiXDExMFx1ZmZlY1wxMTFcdWZmZWNcMDAxXDAwMlwwMDBcMTQ2XDAxMlx1ZmZhMVwwMzZcdWZmYTFcMDM3IiArCi0gICAgIlx1ZmZhMVwwNDBcdWZmYTFcMDQxXHVmZmExXDA0Mlx1ZmZhMVwwNDNcdWZmYTFcMDQ0XHVmZmExXDA0NVx1ZmZhMSIgKwotICAgICJcMDQ2XHVmZmExXDA0N1x1ZmZhMVwwNTBcdWZmYTFcMDUxXHVmZmExXDA1Mlx1ZmZhMVwwNjFcdWZmYTFcMDYyIiArCi0gICAgIlx1ZmZhMVwwNjNcdWZmYTFcMDY0XHVmZmExXDA2NVx1ZmZhMVwwNjZcdWZmYTFcMDY3XHVmZmExXDA3MFx1ZmZhMSIgKwotICAgICJcMDcxXHVmZmExXDA3M1x1ZmZhMVwwNzRcdWZmYTFcMDc1XHVmZmExXDA3Nlx1ZmZhMVwwNzdcdWZmYTFcMTAwIiArCi0gICAgIlx1ZmZhMVwxMDFcdWZmYTFcMTAyXHVmZmExXDEwM1x1ZmZhMVwxMDRcdWZmYTFcMTA1XHVmZmExXDEwNlx1ZmZhMSIgKwotICAgICJcMTA3XHVmZmExXDExMFx1ZmZhMVwxMTFcdWZmYTFcMTEyXHVmZmExXDExM1x1ZmZhMVwxMTRcdWZmYTFcMTE1IiArCi0gICAgIlx1ZmZhMVwxMTZcdWZmYTFcMTE3XHVmZmExXDEyMFx1ZmZhMVwxMjFcdWZmYTFcMTIyXHVmZmExXDEyM1x1ZmZhMSIgKwotICAgICJcMTI0XHVmZmExXDEzMVx1ZmZhMVwwMDFcMDAyXDAwMFwwMDRcMDcyXHUwMTQwXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxNDZcMDEyXDIzM1wwMzZcMjMyXDAzN1wyNDBcMDQwXHUwMTI0XDA0MVwyNDFcMDQyXDIzNyIgKwotICAgICJcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0XDA1MFwyMjVcMDUxIiArCi0gICAgIlwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjUiICsKLSAgICAiXDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NSIgKwotICAgICJcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1IiArCi0gICAgIlwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTIiICsKLSAgICAiXHUwMTQ2XDExM1x1MDE0NVwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDEiICsKLSAgICAiXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyXDAwMCIgKwotICAgICJcMTE0XDAwMlx1ZmY4MVwwMDVcdWZmODFcMDA3XHVmZjgxXDAxMFx1MDE0ZVwwMTFcdWZmODFcMDEyXHUwMTRjIiArCi0gICAgIlwwMTNcdWZmODFcMDE0XHVmZjgxXDAxNVx1ZmY4MVwwMTZcdWZmODFcMDE3XHVmZjgxXDAyMFx1ZmY4MVwwMjEiICsKLSAgICAiXHVmZjgxXDAyMlx1ZmY4MVwwMjNcdWZmODFcMDMyXHVmZjgxXDAzNVx1MDE0ZlwwNTNcdWZmODFcMDU0XHVmZjgxIiArCi0gICAgIlwwNTVcdWZmODFcMDU2XHVmZjgxXDA1N1x1ZmY4MVwwNjBcdWZmODFcMDYxXHVmZjgxXDA2Mlx1ZmY4MVwwNjMiICsKLSAgICAiXHVmZjgxXDA2NFx1ZmY4MVwwNjVcdWZmODFcMDY2XHVmZjgxXDA2N1x1ZmY4MVwwNzVcdWZmODFcMTAwXHVmZjgxIiArCi0gICAgIlwxMDFcdWZmODFcMTAyXHVmZjgxXDEwN1x1ZmY4MVwxMTBcdWZmODFcMTExXHVmZjgxXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTRcMDAyXHVmZjdhXDAwNVx1ZmY3YVwwMDdcdWZmN2FcMDEwXHVmZjdhXDAxMVx1ZmY3YVwwMTJcdWZmN2EiICsKLSAgICAiXDAxM1x1ZmY3YVwwMTRcdWZmN2FcMDE1XHVmZjdhXDAxNlx1ZmY3YVwwMTdcdWZmN2FcMDIwXHVmZjdhXDAyMSIgKwotICAgICJcdWZmN2FcMDIyXHVmZjdhXDAyM1x1ZmY3YVwwMzJcdWZmN2FcMDM1XHVmZjdhXDA1M1x1ZmY3YVwwNTRcdWZmN2EiICsKLSAgICAiXDA1NVx1ZmY3YVwwNTZcdWZmN2FcMDU3XHVmZjdhXDA2MFx1ZmY3YVwwNjFcdWZmN2FcMDYyXHVmZjdhXDA2MyIgKwotICAgICJcdWZmN2FcMDY0XHVmZjdhXDA2NVx1ZmY3YVwwNjZcdWZmN2FcMDY3XHVmZjdhXDA3NVx1ZmY3YVwxMDBcdWZmN2EiICsKLSAgICAiXDEwMVx1ZmY3YVwxMDJcdWZmN2FcMTA3XHVmZjdhXDExMFx1ZmY3YVwxMTFcdWZmN2FcMDAxXDAwMlwwMDAiICsKLSAgICAiXDExMlwwMDJcdWZmZDZcMDA1XHVmZmQ2XDAwN1x1ZmZkNlwwMTBcdWZmZDZcMDExXHVmZmQ2XDAxMlx1ZmZkNiIgKwotICAgICJcMDEzXHVmZmQ2XDAxNFx1ZmZkNlwwMTVcdWZmZDZcMDE2XHVmZmQ2XDAxN1x1ZmZkNlwwMjBcdWZmZDZcMDIxIiArCi0gICAgIlx1ZmZkNlwwMjJcdWZmZDZcMDIzXHVmZmQ2XDAzMlx1ZmZkNlwwNTNcdWZmZDZcMDU0XHVmZmQ2XDA1NVx1ZmZkNiIgKwotICAgICJcMDU2XHVmZmQ2XDA1N1x1ZmZkNlwwNjBcdWZmZDZcMDYxXHVmZmQ2XDA2Mlx1ZmZkNlwwNjNcdWZmZDZcMDY0IiArCi0gICAgIlx1ZmZkNlwwNjVcdWZmZDZcMDY2XHVmZmQ2XDA2N1x1ZmZkNlwwNzVcdWZmZDZcMTAwXHVmZmQ2XDEwMVx1ZmZkNiIgKwotICAgICJcMTAyXHVmZmQ2XDEwN1x1ZmZkNlwxMTBcdWZmZDZcMTExXHVmZmQ2XDAwMVwwMDJcMDAwXDExNFwwMDIiICsKLSAgICAiXHVmZjdiXDAwNVx1ZmY3YlwwMDdcdWZmN2JcMDEwXHVmZjdiXDAxMVx1ZmY3YlwwMTJcdWZmN2JcMDEzXHVmZjdiIiArCi0gICAgIlwwMTRcdWZmN2JcMDE1XHVmZjdiXDAxNlx1ZmY3YlwwMTdcdWZmN2JcMDIwXHVmZjdiXDAyMVx1ZmY3YlwwMjIiICsKLSAgICAiXHVmZjdiXDAyM1x1ZmY3YlwwMzJcdWZmN2JcMDM1XHVmZjdiXDA1M1x1ZmY3YlwwNTRcdWZmN2JcMDU1XHVmZjdiIiArCi0gICAgIlwwNTZcdWZmN2JcMDU3XHVmZjdiXDA2MFx1ZmY3YlwwNjFcdWZmN2JcMDYyXHVmZjdiXDA2M1x1ZmY3YlwwNjQiICsKLSAgICAiXHVmZjdiXDA2NVx1ZmY3YlwwNjZcdWZmN2JcMDY3XHVmZjdiXDA3NVx1ZmY3YlwxMDBcdWZmN2JcMTAxXHVmZjdiIiArCi0gICAgIlwxMDJcdWZmN2JcMTA3XHVmZjdiXDExMFx1ZmY3YlwxMTFcdWZmN2JcMDAxXDAwMlwwMDBcMDA2XDAwNiIgKwotICAgICJcdTAxNGFcMDMxXHVmZjIwXDAwMVwwMDJcMDAwXDAwNlwwMDZcdTAxNDhcMDMxXHVmZjIxXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMjBcMDAyXHVmZjc4XDAwNVx1ZmY3OFwwMDdcdWZmNzhcMDEwXHVmZjc4XDAxMVx1ZmY3OFwwMTIiICsKLSAgICAiXHVmZjc4XDAxM1x1ZmY3OFwwMTRcdWZmNzhcMDE1XHVmZjc4XDAxNlx1ZmY3OFwwMTdcdWZmNzhcMDIwXHVmZjc4IiArCi0gICAgIlwwMjFcdWZmNzhcMDIyXHVmZjc4XDAyM1x1ZmY3OFwwMzJcdWZmNzhcMDM1XHVmZjc4XDA1M1x1ZmY3OFwwNTQiICsKLSAgICAiXHVmZjc4XDA1NVx1ZmY3OFwwNTZcdWZmNzhcMDU3XHVmZjc4XDA2MFx1ZmY3OFwwNjFcdWZmNzhcMDYyXHVmZjc4IiArCi0gICAgIlwwNjNcdWZmNzhcMDY0XHVmZjc4XDA2NVx1ZmY3OFwwNjZcdWZmNzhcMDY3XHVmZjc4XDA3MVx1ZmY3OFwwNzMiICsKLSAgICAiXHVmZjc4XDA3NVx1ZmY3OFwxMDBcdWZmNzhcMTAxXHVmZjc4XDEwMlx1ZmY3OFwxMDdcdWZmNzhcMTEwXHVmZjc4IiArCi0gICAgIlwxMTFcdWZmNzhcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE0OVwwMDFcMDAyXDAwMFwxMTJcMDAyIiArCi0gICAgIlx1ZmY3ZlwwMDVcdWZmN2ZcMDA3XHVmZjdmXDAxMFx1ZmY3ZlwwMTFcdWZmN2ZcMDEyXHVmZjdmXDAxM1x1ZmY3ZiIgKwotICAgICJcMDE0XHVmZjdmXDAxNVx1ZmY3ZlwwMTZcdWZmN2ZcMDE3XHVmZjdmXDAyMFx1ZmY3ZlwwMjFcdWZmN2ZcMDIyIiArCi0gICAgIlx1ZmY3ZlwwMjNcdWZmN2ZcMDMyXHVmZjdmXDA1M1x1ZmY3ZlwwNTRcdWZmN2ZcMDU1XHVmZjdmXDA1Nlx1ZmY3ZiIgKwotICAgICJcMDU3XHVmZjdmXDA2MFx1ZmY3ZlwwNjFcdWZmN2ZcMDYyXHVmZjdmXDA2M1x1ZmY3ZlwwNjRcdWZmN2ZcMDY1IiArCi0gICAgIlx1ZmY3ZlwwNjZcdWZmN2ZcMDY3XHVmZjdmXDA3NVx1ZmY3ZlwxMDBcdWZmN2ZcMTAxXHVmZjdmXDEwMlx1ZmY3ZiIgKwotICAgICJcMTA3XHVmZjdmXDExMFx1ZmY3ZlwxMTFcdWZmN2ZcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE0YlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTE0XDAwMlx1ZmY3OVwwMDVcdWZmNzlcMDA3XHVmZjc5XDAxMFx1ZmY3OVwwMTFcdWZmNzkiICsKLSAgICAiXDAxMlx1ZmY3OVwwMTNcdWZmNzlcMDE0XHVmZjc5XDAxNVx1ZmY3OVwwMTZcdWZmNzlcMDE3XHVmZjc5XDAyMCIgKwotICAgICJcdWZmNzlcMDIxXHVmZjc5XDAyMlx1ZmY3OVwwMjNcdWZmNzlcMDMyXHVmZjc5XDAzNVx1ZmY3OVwwNTNcdWZmNzkiICsKLSAgICAiXDA1NFx1ZmY3OVwwNTVcdWZmNzlcMDU2XHVmZjc5XDA1N1x1ZmY3OVwwNjBcdWZmNzlcMDYxXHVmZjc5XDA2MiIgKwotICAgICJcdWZmNzlcMDYzXHVmZjc5XDA2NFx1ZmY3OVwwNjVcdWZmNzlcMDY2XHVmZjc5XDA2N1x1ZmY3OVwwNzVcdWZmNzkiICsKLSAgICAiXDEwMFx1ZmY3OVwxMDFcdWZmNzlcMTAyXHVmZjc5XDEwN1x1ZmY3OVwxMTBcdWZmNzlcMTExXHVmZjc5XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMTJcMDAyXHVmZjdkXDAwNVx1ZmY3ZFwwMDdcdWZmN2RcMDEwXHVmZjdkXDAxMVx1ZmY3ZCIgKwotICAgICJcMDEyXHVmZjdkXDAxM1x1ZmY3ZFwwMTRcdWZmN2RcMDE1XHVmZjdkXDAxNlx1ZmY3ZFwwMTdcdWZmN2RcMDIwIiArCi0gICAgIlx1ZmY3ZFwwMjFcdWZmN2RcMDIyXHVmZjdkXDAyM1x1ZmY3ZFwwMzJcdWZmN2RcMDUzXHVmZjdkXDA1NFx1ZmY3ZCIgKwotICAgICJcMDU1XHVmZjdkXDA1Nlx1ZmY3ZFwwNTdcdWZmN2RcMDYwXHVmZjdkXDA2MVx1ZmY3ZFwwNjJcdWZmN2RcMDYzIiArCi0gICAgIlx1ZmY3ZFwwNjRcdWZmN2RcMDY1XHVmZjdkXDA2Nlx1ZmY3ZFwwNjdcdWZmN2RcMDc1XHVmZjdkXDEwMFx1ZmY3ZCIgKwotICAgICJcMTAxXHVmZjdkXDEwMlx1ZmY3ZFwxMDdcdWZmN2RcMTEwXHVmZjdkXDExMVx1ZmY3ZFwwMDFcMDAyXDAwMCIgKwotICAgICJcMTEyXDAwMlx1ZmY4MFwwMDVcdWZmODBcMDA3XHVmZjgwXDAxMFx1ZmY4MFwwMTFcdWZmODBcMDEyXHVmZjgwIiArCi0gICAgIlwwMTNcdWZmODBcMDE0XHVmZjgwXDAxNVx1ZmY4MFwwMTZcdWZmODBcMDE3XHVmZjgwXDAyMFx1ZmY4MFwwMjEiICsKLSAgICAiXHVmZjgwXDAyMlx1ZmY4MFwwMjNcdWZmODBcMDMyXHVmZjgwXDA1M1x1ZmY4MFwwNTRcdWZmODBcMDU1XHVmZjgwIiArCi0gICAgIlwwNTZcdWZmODBcMDU3XHVmZjgwXDA2MFx1ZmY4MFwwNjFcdWZmODBcMDYyXHVmZjgwXDA2M1x1ZmY4MFwwNjQiICsKLSAgICAiXHVmZjgwXDA2NVx1ZmY4MFwwNjZcdWZmODBcMDY3XHVmZjgwXDA3NVx1ZmY4MFwxMDBcdWZmODBcMTAxXHVmZjgwIiArCi0gICAgIlwxMDJcdWZmODBcMTA3XHVmZjgwXDExMFx1ZmY4MFwxMTFcdWZmODBcMDAxXDAwMlwwMDBcMTEyXDAwMiIgKwotICAgICJcdWZmN2NcMDA1XHVmZjdjXDAwN1x1ZmY3Y1wwMTBcdWZmN2NcMDExXHVmZjdjXDAxMlx1ZmY3Y1wwMTNcdWZmN2MiICsKLSAgICAiXDAxNFx1ZmY3Y1wwMTVcdWZmN2NcMDE2XHVmZjdjXDAxN1x1ZmY3Y1wwMjBcdWZmN2NcMDIxXHVmZjdjXDAyMiIgKwotICAgICJcdWZmN2NcMDIzXHVmZjdjXDAzMlx1ZmY3Y1wwNTNcdWZmN2NcMDU0XHVmZjdjXDA1NVx1ZmY3Y1wwNTZcdWZmN2MiICsKLSAgICAiXDA1N1x1ZmY3Y1wwNjBcdWZmN2NcMDYxXHVmZjdjXDA2Mlx1ZmY3Y1wwNjNcdWZmN2NcMDY0XHVmZjdjXDA2NSIgKwotICAgICJcdWZmN2NcMDY2XHVmZjdjXDA2N1x1ZmY3Y1wwNzVcdWZmN2NcMTAwXHVmZjdjXDEwMVx1ZmY3Y1wxMDJcdWZmN2MiICsKLSAgICAiXDEwN1x1ZmY3Y1wxMTBcdWZmN2NcMTExXHVmZjdjXDAwMVwwMDJcMDAwXDExMlwwMDJcdWZmN2VcMDA1IiArCi0gICAgIlx1ZmY3ZVwwMDdcdWZmN2VcMDEwXHVmZjdlXDAxMVx1ZmY3ZVwwMTJcdWZmN2VcMDEzXHVmZjdlXDAxNFx1ZmY3ZSIgKwotICAgICJcMDE1XHVmZjdlXDAxNlx1ZmY3ZVwwMTdcdWZmN2VcMDIwXHVmZjdlXDAyMVx1ZmY3ZVwwMjJcdWZmN2VcMDIzIiArCi0gICAgIlx1ZmY3ZVwwMzJcdWZmN2VcMDUzXHVmZjdlXDA1NFx1ZmY3ZVwwNTVcdWZmN2VcMDU2XHVmZjdlXDA1N1x1ZmY3ZSIgKwotICAgICJcMDYwXHVmZjdlXDA2MVx1ZmY3ZVwwNjJcdWZmN2VcMDYzXHVmZjdlXDA2NFx1ZmY3ZVwwNjVcdWZmN2VcMDY2IiArCi0gICAgIlx1ZmY3ZVwwNjdcdWZmN2VcMDc1XHVmZjdlXDEwMFx1ZmY3ZVwxMDFcdWZmN2VcMTAyXHVmZjdlXDEwN1x1ZmY3ZSIgKwotICAgICJcMTEwXHVmZjdlXDExMVx1ZmY3ZVwwMDFcMDAyXDAwMFwxNDZcMDEyXDIzM1wwMzZcMjMyXDAzNyIgKwotICAgICJcMjQwXDA0MFwyNTJcMDQxXDI0MVwwNDJcMjM3XDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2IiArCi0gICAgIlwwNDZcMjQ2XDA0N1wyNDRcMDUwXDIyNVwwNTFcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjIiICsKLSAgICAiXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NSIgKwotICAgICJcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwIiArCi0gICAgIlwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTIiICsKLSAgICAiXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMjUzXDExNSIgKwotICAgICJcMjQ3XDExNlwyNTFcMTE3XDIyN1wxMjBcMjM0XDEyMVwyMzBcMTIyXDI0NVwxMjNcMjM1IiArCi0gICAgIlwxMjRcMTUzXDEzMVwxMjNcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE1M1wwMDFcMDAyXDAwMCIgKwotICAgICJcMDA0XDAwN1x1ZmY1ZlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjYwXDAwNFx1ZmY2MFwwMDVcdWZmNjAiICsKLSAgICAiXDAwN1x1ZmY2MFwwMTBcdWZmNjBcMDExXHVmZjYwXDAxMlx1ZmY2MFwwMTNcdWZmNjBcMDE0XHVmZjYwXDAxNSIgKwotICAgICJcdWZmNjBcMDE2XHVmZjYwXDAxN1x1ZmY2MFwwMjBcdWZmNjBcMDIxXHVmZjYwXDAyMlx1ZmY2MFwwMjNcdWZmNjAiICsKLSAgICAiXDAyNFx1ZmY2MFwwMjVcdWZmNjBcMDMyXHVmZjYwXDAzNVx1ZmY2MFwwNTNcdWZmNjBcMDU0XHVmZjYwXDA1NSIgKwotICAgICJcdWZmNjBcMDU2XHVmZjYwXDA1N1x1ZmY2MFwwNjBcdWZmNjBcMDYxXHVmZjYwXDA2Mlx1ZmY2MFwwNjNcdWZmNjAiICsKLSAgICAiXDA2NFx1ZmY2MFwwNjVcdWZmNjBcMDY2XHVmZjYwXDA2N1x1ZmY2MFwwNzFcdWZmNjBcMDczXHVmZjYwXDA3NCIgKwotICAgICJcdWZmNjBcMDc1XHVmZjYwXDEwMFx1ZmY2MFwxMDFcdWZmNjBcMTAyXHVmZjYwXDEwN1x1ZmY2MFwxMTBcdWZmNjAiICsKLSAgICAiXDExMVx1ZmY2MFwwMDFcMDAyXDAwMFwxNDZcMDEyXDIzM1wwMzZcMjMyXDAzN1wyNDBcMDQwIiArCi0gICAgIlwyNTJcMDQxXDI0MVwwNDJcMjM3XDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDYiICsKLSAgICAiXDA0N1wyNDRcMDUwXDIyNVwwNTFcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2MyIgKwotICAgICJcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzIiArCi0gICAgIlwwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDEiICsKLSAgICAiXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNCIgKwotICAgICJcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMjUzXDExNVwyNDdcMTE2IiArCi0gICAgIlwyNTFcMTE3XDIyN1wxMjBcMjM0XDEyMVwyMzBcMTIyXDI0NVwxMjNcMjM1XDEyNFwxNTMiICsKLSAgICAiXDEzMVwxMjNcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE1OFwwMDFcMDAyXDAwMFwwMDRcMDA3IiArCi0gICAgIlx1ZmY1N1wwMDFcMDAyXDAwMFwwMDZcMDA3XHVmZjU1XDAzMlx1ZmY1NVwwMDFcMDAyXDAwMFwxMzAiICsKLSAgICAiXDAwMlx1ZmY1OFwwMDRcdWZmNThcMDA1XHVmZjU4XDAwN1x1ZmY1OFwwMTBcdWZmNThcMDExXHVmZjU4XDAxMiIgKwotICAgICJcdWZmNThcMDEzXHVmZjU4XDAxNFx1ZmY1OFwwMTVcdWZmNThcMDE2XHVmZjU4XDAxN1x1ZmY1OFwwMjBcdWZmNTgiICsKLSAgICAiXDAyMVx1ZmY1OFwwMjJcdWZmNThcMDIzXHVmZjU4XDAyNFx1ZmY1OFwwMjVcdWZmNThcMDMyXHVmZjU4XDAzNSIgKwotICAgICJcdWZmNThcMDUzXHVmZjU4XDA1NFx1ZmY1OFwwNTVcdWZmNThcMDU2XHVmZjU4XDA1N1x1ZmY1OFwwNjBcdWZmNTgiICsKLSAgICAiXDA2MVx1ZmY1OFwwNjJcdWZmNThcMDYzXHVmZjU4XDA2NFx1ZmY1OFwwNjVcdWZmNThcMDY2XHVmZjU4XDA2NyIgKwotICAgICJcdWZmNThcMDcxXHVmZjU4XDA3M1x1ZmY1OFwwNzRcdWZmNThcMDc1XHVmZjU4XDEwMFx1ZmY1OFwxMDFcdWZmNTgiICsKLSAgICAiXDEwMlx1ZmY1OFwxMDdcdWZmNThcMTEwXHVmZjU4XDExMVx1ZmY1OFwwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmZiNFwwMDRcMjE0XDAwNVx1ZmZiNFwwMDdcdWZmYjRcMDEwXHVmZmI0XDAxMVx1ZmZiNFwwMTJcdWZmYjQiICsKLSAgICAiXDAxM1x1ZmZiNFwwMTRcdWZmYjRcMDE1XHVmZmI0XDAxNlx1ZmZiNFwwMTdcdWZmYjRcMDIwXHVmZmI0XDAyMSIgKwotICAgICJcdWZmYjRcMDIyXHVmZmI0XDAyM1x1ZmZiNFwwMjRcdWZmYjRcMDI1XHVmZmI0XDAzMlx1ZmZiNFwwNTNcdWZmYjQiICsKLSAgICAiXDA1NFx1ZmZiNFwwNTVcdWZmYjRcMDU2XHVmZmI0XDA1N1x1ZmZiNFwwNjBcdWZmYjRcMDYxXHVmZmI0XDA2MiIgKwotICAgICJcdWZmYjRcMDYzXHVmZmI0XDA2NFx1ZmZiNFwwNjVcdWZmYjRcMDY2XHVmZmI0XDA2N1x1ZmZiNFwwNzFcdWZmYjQiICsKLSAgICAiXDA3M1x1ZmZiNFwwNzRcdWZmYjRcMDc1XHVmZmI0XDEwMFx1ZmZiNFwxMDFcdWZmYjRcMTAyXHVmZmI0XDEwNyIgKwotICAgICJcdWZmYjRcMTEwXHVmZmI0XDExMVx1ZmZiNFwwMDFcMDAyXDAwMFwxNTBcMDA3XHUwMTVjXDAxMlx1MDE1YiIgKwotICAgICJcMDM2XDIzMlwwMzdcMjQwXDA0MFwyNTJcMDQxXDI0MVwwNDJcMjM3XDA0M1wyMzZcMDQ0IiArCi0gICAgIlwyNTBcMDQ1XDIyNlwwNDZcMjQ2XDA0N1wyNDRcMDUwXDIyNVwwNTFcMjQyXDA1MlwyNDMiICsKLSAgICAiXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2NyIgKwotICAgICJcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzIiArCi0gICAgIlwwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDUiICsKLSAgICAiXDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNiIgKwotICAgICJcMTE0XDI1M1wxMTVcMjQ3XDExNlwyNTFcMTE3XDIyN1wxMjBcMjM0XDEyMVwyMzBcMTIyIiArCi0gICAgIlwyNDVcMTIzXDIzNVwxMjRcMTUzXDEzMVwxMjNcMDAxXDAwMlwwMDBcMDEwXDAwN1x1ZmY1OSIgKwotICAgICJcMDMxXHVmZjE4XDAzMlx1ZmY1OVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjVlXDAwNFx1ZmY1ZVwwMDUiICsKLSAgICAiXHVmZjVlXDAwN1x1ZmY1ZVwwMTBcdWZmNWVcMDExXHVmZjVlXDAxMlx1ZmY1ZVwwMTNcdWZmNWVcMDE0XHVmZjVlIiArCi0gICAgIlwwMTVcdWZmNWVcMDE2XHVmZjVlXDAxN1x1ZmY1ZVwwMjBcdWZmNWVcMDIxXHVmZjVlXDAyMlx1ZmY1ZVwwMjMiICsKLSAgICAiXHVmZjVlXDAyNFx1ZmY1ZVwwMjVcdWZmNWVcMDMyXHVmZjVlXDAzNVx1ZmY1ZVwwNTNcdWZmNWVcMDU0XHVmZjVlIiArCi0gICAgIlwwNTVcdWZmNWVcMDU2XHVmZjVlXDA1N1x1ZmY1ZVwwNjBcdWZmNWVcMDYxXHVmZjVlXDA2Mlx1ZmY1ZVwwNjMiICsKLSAgICAiXHVmZjVlXDA2NFx1ZmY1ZVwwNjVcdWZmNWVcMDY2XHVmZjVlXDA2N1x1ZmY1ZVwwNzFcdWZmNWVcMDczXHVmZjVlIiArCi0gICAgIlwwNzRcdWZmNWVcMDc1XHVmZjVlXDEwMFx1ZmY1ZVwxMDFcdWZmNWVcMTAyXHVmZjVlXDEwN1x1ZmY1ZVwxMTAiICsKLSAgICAiXHVmZjVlXDExMVx1ZmY1ZVwwMDFcMDAyXDAwMFwwMDZcMDA3XHUwMTYwXDAzMlx1MDE1ZlwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA2XDAwN1x1ZmY1YVwwMzJcdWZmNWFcMDAxXDAwMlwwMDBcMTQ2XDAxMlwyMzNcMDM2IiArCi0gICAgIlwyMzJcMDM3XDI0MFwwNDBcMjUyXDA0MVwyNDFcMDQyXDIzN1wwNDNcMjM2XDA0NFwyNTAiICsKLSAgICAiXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0XDA1MFwyMjVcMDUxXDI0MlwwNTJcMjQzXDA2MSIgKwotICAgICJcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwIiArCi0gICAgIlwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzciICsKLSAgICAiXDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNCIgKwotICAgICJcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0IiArCi0gICAgIlwyNTNcMTE1XDI0N1wxMTZcMjUxXDExN1wyMjdcMTIwXDIzNFwxMjFcMjMwXDEyMlwyNDUiICsKLSAgICAiXDEyM1wyMzVcMTI0XDE1M1wxMzFcMTIzXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNWRcMDA0IiArCi0gICAgIlx1ZmY1ZFwwMDVcdWZmNWRcMDA3XHVmZjVkXDAxMFx1ZmY1ZFwwMTFcdWZmNWRcMDEyXHVmZjVkXDAxM1x1ZmY1ZCIgKwotICAgICJcMDE0XHVmZjVkXDAxNVx1ZmY1ZFwwMTZcdWZmNWRcMDE3XHVmZjVkXDAyMFx1ZmY1ZFwwMjFcdWZmNWRcMDIyIiArCi0gICAgIlx1ZmY1ZFwwMjNcdWZmNWRcMDI0XHVmZjVkXDAyNVx1ZmY1ZFwwMzJcdWZmNWRcMDM1XHVmZjVkXDA1M1x1ZmY1ZCIgKwotICAgICJcMDU0XHVmZjVkXDA1NVx1ZmY1ZFwwNTZcdWZmNWRcMDU3XHVmZjVkXDA2MFx1ZmY1ZFwwNjFcdWZmNWRcMDYyIiArCi0gICAgIlx1ZmY1ZFwwNjNcdWZmNWRcMDY0XHVmZjVkXDA2NVx1ZmY1ZFwwNjZcdWZmNWRcMDY3XHVmZjVkXDA3MVx1ZmY1ZCIgKwotICAgICJcMDczXHVmZjVkXDA3NFx1ZmY1ZFwwNzVcdWZmNWRcMTAwXHVmZjVkXDEwMVx1ZmY1ZFwxMDJcdWZmNWRcMTA3IiArCi0gICAgIlx1ZmY1ZFwxMTBcdWZmNWRcMTExXHVmZjVkXDAwMVwwMDJcMDAwXDAwNlwwMDdcdTAxNjNcMDM1XHUwMTYyIiArCi0gICAgIlwwMDFcMDAyXDAwMFwwMDRcMDA3XHUwMTY0XDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNWNcMDA0IiArCi0gICAgIlx1ZmY1Y1wwMDVcdWZmNWNcMDA3XHVmZjVjXDAxMFx1ZmY1Y1wwMTFcdWZmNWNcMDEyXHVmZjVjXDAxM1x1ZmY1YyIgKwotICAgICJcMDE0XHVmZjVjXDAxNVx1ZmY1Y1wwMTZcdWZmNWNcMDE3XHVmZjVjXDAyMFx1ZmY1Y1wwMjFcdWZmNWNcMDIyIiArCi0gICAgIlx1ZmY1Y1wwMjNcdWZmNWNcMDI0XHVmZjVjXDAyNVx1ZmY1Y1wwMzJcdWZmNWNcMDM1XHVmZjVjXDA1M1x1ZmY1YyIgKwotICAgICJcMDU0XHVmZjVjXDA1NVx1ZmY1Y1wwNTZcdWZmNWNcMDU3XHVmZjVjXDA2MFx1ZmY1Y1wwNjFcdWZmNWNcMDYyIiArCi0gICAgIlx1ZmY1Y1wwNjNcdWZmNWNcMDY0XHVmZjVjXDA2NVx1ZmY1Y1wwNjZcdWZmNWNcMDY3XHVmZjVjXDA3MVx1ZmY1YyIgKwotICAgICJcMDczXHVmZjVjXDA3NFx1ZmY1Y1wwNzVcdWZmNWNcMTAwXHVmZjVjXDEwMVx1ZmY1Y1wxMDJcdWZmNWNcMTA3IiArCi0gICAgIlx1ZmY1Y1wxMTBcdWZmNWNcMTExXHVmZjVjXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNWJcMDA0XHVmZjViIiArCi0gICAgIlwwMDVcdWZmNWJcMDA3XHVmZjViXDAxMFx1ZmY1YlwwMTFcdWZmNWJcMDEyXHVmZjViXDAxM1x1ZmY1YlwwMTQiICsKLSAgICAiXHVmZjViXDAxNVx1ZmY1YlwwMTZcdWZmNWJcMDE3XHVmZjViXDAyMFx1ZmY1YlwwMjFcdWZmNWJcMDIyXHVmZjViIiArCi0gICAgIlwwMjNcdWZmNWJcMDI0XHVmZjViXDAyNVx1ZmY1YlwwMzJcdWZmNWJcMDM1XHVmZjViXDA1M1x1ZmY1YlwwNTQiICsKLSAgICAiXHVmZjViXDA1NVx1ZmY1YlwwNTZcdWZmNWJcMDU3XHVmZjViXDA2MFx1ZmY1YlwwNjFcdWZmNWJcMDYyXHVmZjViIiArCi0gICAgIlwwNjNcdWZmNWJcMDY0XHVmZjViXDA2NVx1ZmY1YlwwNjZcdWZmNWJcMDY3XHVmZjViXDA3MVx1ZmY1YlwwNzMiICsKLSAgICAiXHVmZjViXDA3NFx1ZmY1YlwwNzVcdWZmNWJcMTAwXHVmZjViXDEwMVx1ZmY1YlwxMDJcdWZmNWJcMTA3XHVmZjViIiArCi0gICAgIlwxMTBcdWZmNWJcMTExXHVmZjViXDAwMVwwMDJcMDAwXDAwNFwwMDdcdTAxNjZcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzMFwwMDJcdWZmNmFcMDA0XHVmZjZhXDAwNVx1ZmY2YVwwMDdcdWZmNmFcMDEwXHVmZjZhXDAxMVx1ZmY2YSIgKwotICAgICJcMDEyXHVmZjZhXDAxM1x1ZmY2YVwwMTRcdWZmNmFcMDE1XHVmZjZhXDAxNlx1ZmY2YVwwMTdcdWZmNmFcMDIwIiArCi0gICAgIlx1ZmY2YVwwMjFcdWZmNmFcMDIyXHVmZjZhXDAyM1x1ZmY2YVwwMjRcdWZmNmFcMDI1XHVmZjZhXDAzMlx1ZmY2YSIgKwotICAgICJcMDM1XHVmZjZhXDA1M1x1ZmY2YVwwNTRcdWZmNmFcMDU1XHVmZjZhXDA1Nlx1ZmY2YVwwNTdcdWZmNmFcMDYwIiArCi0gICAgIlx1ZmY2YVwwNjFcdWZmNmFcMDYyXHVmZjZhXDA2M1x1ZmY2YVwwNjRcdWZmNmFcMDY1XHVmZjZhXDA2Nlx1ZmY2YSIgKwotICAgICJcMDY3XHVmZjZhXDA3MVx1ZmY2YVwwNzNcdWZmNmFcMDc0XHVmZjZhXDA3NVx1ZmY2YVwxMDBcdWZmNmFcMTAxIiArCi0gICAgIlx1ZmY2YVwxMDJcdWZmNmFcMTA3XHVmZjZhXDExMFx1ZmY2YVwxMTFcdWZmNmFcMDAxXDAwMlwwMDBcMTQ2IiArCi0gICAgIlwwMTJcMjMzXDAzNlwyMzJcMDM3XDI0MFwwNDBcMjUyXDA0MVwyNDFcMDQyXDIzN1wwNDMiICsKLSAgICAiXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0XDA1MFwyMjVcMDUxXDI0MiIgKwotICAgICJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2IiArCi0gICAgIlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzUiICsKLSAgICAiXDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNCIgKwotICAgICJcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyIiArCi0gICAgIlwxMTNcMTI2XDExNFwyNTNcMTE1XDI0N1wxMTZcMjUxXDExN1wyMjdcMTIwXDIzNFwxMjEiICsKLSAgICAiXDIzMFwxMjJcMjQ1XDEyM1wyMzVcMTI0XDE1M1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAwNiIgKwotICAgICJcMDMyXDI2NFwxMDFcdTAxNjlcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTEiICsKLSAgICAiXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MSIgKwotICAgICJcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzIiArCi0gICAgIlwwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjYiICsKLSAgICAiXDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NiIgKwotICAgICJcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1IiArCi0gICAgIlwwNzZcMTA2XDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDE1N1wxMDQiICsKLSAgICAiXDA0NlwxMDVcMTQ3XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMiIgKwotICAgICJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxIiArCi0gICAgIlwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDQiICsKLSAgICAiXDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMjBcMDAyXHVmZmY1XDAwNVx1ZmZmNVwwMDciICsKLSAgICAiXHVmZmY1XDAzMlx1ZmZmNVwxMDBcdWZmZjVcMTAxXHVmZmY1XDEwN1x1ZmZmNVwwMDFcMDAyXDAwMFwxNDYiICsKLSAgICAiXDAxMlx1ZmZhZVwwMzZcdWZmYWVcMDM3XHVmZmFlXDA0MFx1ZmZhZVwwNDFcdWZmYWVcMDQyXHVmZmFlXDA0MyIgKwotICAgICJcdWZmYWVcMDQ0XHVmZmFlXDA0NVx1ZmZhZVwwNDZcdWZmYWVcMDQ3XHVmZmFlXDA1MFx1ZmZhZVwwNTFcdWZmYWUiICsKLSAgICAiXDA1Mlx1ZmZhZVwwNjFcdWZmYWVcMDYyXHVmZmFlXDA2M1x1ZmZhZVwwNjRcdWZmYWVcMDY1XHVmZmFlXDA2NiIgKwotICAgICJcdWZmYWVcMDY3XHVmZmFlXDA3MFx1ZmZhZVwwNzFcdWZmYWVcMDczXHVmZmFlXDA3NFx1ZmZhZVwwNzVcdWZmYWUiICsKLSAgICAiXDA3Nlx1ZmZhZVwwNzdcdWZmYWVcMTAwXHVmZmFlXDEwMVx1ZmZhZVwxMDJcdWZmYWVcMTAzXHVmZmFlXDEwNCIgKwotICAgICJcdWZmYWVcMTA1XHVmZmFlXDEwNlx1ZmZhZVwxMDdcdWZmYWVcMTEwXHVmZmFlXDExMVx1ZmZhZVwxMTJcdWZmYWUiICsKLSAgICAiXDExM1x1ZmZhZVwxMTRcdWZmYWVcMTE1XHVmZmFlXDExNlx1ZmZhZVwxMTdcdWZmYWVcMTIwXHVmZmFlXDEyMSIgKwotICAgICJcdWZmYWVcMTIyXHVmZmFlXDEyM1x1ZmZhZVwxMjRcdWZmYWVcMTMxXHVmZmFlXDAwMVwwMDJcMDAwXDE0NiIgKwotICAgICJcMDEyXHVmZmFjXDAzNlx1ZmZhY1wwMzdcdWZmYWNcMDQwXHVmZmFjXDA0MVx1ZmZhY1wwNDJcdWZmYWNcMDQzIiArCi0gICAgIlx1ZmZhY1wwNDRcdWZmYWNcMDQ1XHVmZmFjXDA0Nlx1ZmZhY1wwNDdcdWZmYWNcMDUwXHVmZmFjXDA1MVx1ZmZhYyIgKwotICAgICJcMDUyXHVmZmFjXDA2MVx1ZmZhY1wwNjJcdWZmYWNcMDYzXHVmZmFjXDA2NFx1ZmZhY1wwNjVcdWZmYWNcMDY2IiArCi0gICAgIlx1ZmZhY1wwNjdcdWZmYWNcMDcwXHVmZmFjXDA3MVx1ZmZhY1wwNzNcdWZmYWNcMDc0XHVmZmFjXDA3NVx1ZmZhYyIgKwotICAgICJcMDc2XHVmZmFjXDA3N1x1ZmZhY1wxMDBcdWZmYWNcMTAxXHVmZmFjXDEwMlx1ZmZhY1wxMDNcdWZmYWNcMTA0IiArCi0gICAgIlx1ZmZhY1wxMDVcdWZmYWNcMTA2XHVmZmFjXDEwN1x1ZmZhY1wxMTBcdWZmYWNcMTExXHVmZmFjXDExMlx1ZmZhYyIgKwotICAgICJcMTEzXHVmZmFjXDExNFx1ZmZhY1wxMTVcdWZmYWNcMTE2XHVmZmFjXDExN1x1ZmZhY1wxMjBcdWZmYWNcMTIxIiArCi0gICAgIlx1ZmZhY1wxMjJcdWZmYWNcMTIzXHVmZmFjXDEyNFx1ZmZhY1wxMzFcdWZmYWNcMDAxXDAwMlwwMDBcMTQ2IiArCi0gICAgIlwwMTJcdWZmYjFcMDM2XHVmZmIxXDAzN1x1ZmZiMVwwNDBcdWZmYjFcMDQxXHVmZmIxXDA0Mlx1ZmZiMVwwNDMiICsKLSAgICAiXHVmZmIxXDA0NFx1ZmZiMVwwNDVcdWZmYjFcMDQ2XHVmZmIxXDA0N1x1ZmZiMVwwNTBcdWZmYjFcMDUxXHVmZmIxIiArCi0gICAgIlwwNTJcdWZmYjFcMDYxXHVmZmIxXDA2Mlx1ZmZiMVwwNjNcdWZmYjFcMDY0XHVmZmIxXDA2NVx1ZmZiMVwwNjYiICsKLSAgICAiXHVmZmIxXDA2N1x1ZmZiMVwwNzBcdWZmYjFcMDcxXHVmZmIxXDA3M1x1ZmZiMVwwNzRcdWZmYjFcMDc1XHVmZmIxIiArCi0gICAgIlwwNzZcdWZmYjFcMDc3XHVmZmIxXDEwMFx1ZmZiMVwxMDFcdWZmYjFcMTAyXHVmZmIxXDEwM1x1ZmZiMVwxMDQiICsKLSAgICAiXHVmZmIxXDEwNVx1ZmZiMVwxMDZcdWZmYjFcMTA3XHVmZmIxXDExMFx1ZmZiMVwxMTFcdWZmYjFcMTEyXHVmZmIxIiArCi0gICAgIlwxMTNcdWZmYjFcMTE0XHVmZmIxXDExNVx1ZmZiMVwxMTZcdWZmYjFcMTE3XHVmZmIxXDEyMFx1ZmZiMVwxMjEiICsKLSAgICAiXHVmZmIxXDEyMlx1ZmZiMVwxMjNcdWZmYjFcMTI0XHVmZmIxXDEzMVx1ZmZiMVwwMDFcMDAyXDAwMFwwMDQiICsKLSAgICAiXDA3Mlx1MDE2ZlwwMDFcMDAyXDAwMFwxNDZcMDEyXDIzM1wwMzZcMjMyXDAzN1wyNDBcMDQwIiArCi0gICAgIlwyNTJcMDQxXDI0MVwwNDJcMjM3XDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDYiICsKLSAgICAiXDA0N1wyNDRcMDUwXDIyNVwwNTFcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2MyIgKwotICAgICJcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzIiArCi0gICAgIlwwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDEiICsKLSAgICAiXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNCIgKwotICAgICJcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMjUzXDExNVwyNDdcMTE2IiArCi0gICAgIlwyNTFcMTE3XDIyN1wxMjBcMjM0XDEyMVwyMzBcMTIyXDI0NVwxMjNcMjM1XDEyNFwxNTMiICsKLSAgICAiXDEzMVwxMjNcMDAxXDAwMlwwMDBcMTE0XDAwMlx1ZmZkNFwwMDVcdWZmZDRcMDA3XHVmZmQ0XDAxMCIgKwotICAgICJcdWZmZDRcMDExXHVmZmQ0XDAxMlx1ZmZkNFwwMTNcdWZmZDRcMDE0XHVmZmQ0XDAxNVx1ZmZkNFwwMTZcdWZmZDQiICsKLSAgICAiXDAxN1x1ZmZkNFwwMjBcdWZmZDRcMDIxXHVmZmQ0XDAyMlx1ZmZkNFwwMjNcdWZmZDRcMDMyXHVmZmQ0XDA1MyIgKwotICAgICJcdWZmZDRcMDU0XHVmZmQ0XDA1NVx1ZmZkNFwwNTZcdWZmZDRcMDU3XHVmZmQ0XDA2MFx1ZmZkNFwwNjFcdWZmZDQiICsKLSAgICAiXDA2Mlx1ZmZkNFwwNjNcdWZmZDRcMDY0XHVmZmQ0XDA2NVx1ZmZkNFwwNjZcdWZmZDRcMDY3XHVmZmQ0XDA3MSIgKwotICAgICJcdWZmZDRcMDc1XHVmZmQ0XDEwMFx1ZmZkNFwxMDFcdWZmZDRcMTAyXHVmZmQ0XDEwN1x1ZmZkNFwxMTBcdWZmZDQiICsKLSAgICAiXDExMVx1ZmZkNFwwMDFcMDAyXDAwMFwxMjBcMDAyXHVmZjgzXDAwNVx1ZmY4M1wwMDdcdWZmODNcMDEwIiArCi0gICAgIlx1ZmY4M1wwMTFcdWZmODNcMDEyXHVmZjgzXDAxM1x1ZmY4M1wwMTRcdWZmODNcMDE1XHVmZjgzXDAxNlx1ZmY4MyIgKwotICAgICJcMDE3XHVmZjgzXDAyMFx1ZmY4M1wwMjFcdWZmODNcMDIyXHVmZjgzXDAyM1x1ZmY4M1wwMzJcdWZmODNcMDM1IiArCi0gICAgIlx1MDE3MlwwNTNcdWZmODNcMDU0XHVmZjgzXDA1NVx1ZmY4M1wwNTZcdWZmODNcMDU3XHVmZjgzXDA2MFx1ZmY4MyIgKwotICAgICJcMDYxXHVmZjgzXDA2Mlx1ZmY4M1wwNjNcdWZmODNcMDY0XHVmZjgzXDA2NVx1ZmY4M1wwNjZcdWZmODNcMDY3IiArCi0gICAgIlx1ZmY4M1wwNzFcdWZmODNcMDczXHVmZjgzXDA3NVx1ZmY4M1wxMDBcdWZmODNcMTAxXHVmZjgzXDEwMlx1ZmY4MyIgKwotICAgICJcMTA3XHVmZjgzXDExMFx1ZmY4M1wxMTFcdWZmODNcMDAxXDAwMlwwMDBcMTE2XDAwMlx1ZmY4MlwwMDUiICsKLSAgICAiXHVmZjgyXDAwN1x1ZmY4MlwwMTBcdWZmODJcMDExXHVmZjgyXDAxMlx1ZmY4MlwwMTNcdWZmODJcMDE0XHVmZjgyIiArCi0gICAgIlwwMTVcdWZmODJcMDE2XHVmZjgyXDAxN1x1ZmY4MlwwMjBcdWZmODJcMDIxXHVmZjgyXDAyMlx1ZmY4MlwwMjMiICsKLSAgICAiXHVmZjgyXDAzMlx1ZmY4MlwwNTNcdWZmODJcMDU0XHVmZjgyXDA1NVx1ZmY4MlwwNTZcdWZmODJcMDU3XHVmZjgyIiArCi0gICAgIlwwNjBcdWZmODJcMDYxXHVmZjgyXDA2Mlx1ZmY4MlwwNjNcdWZmODJcMDY0XHVmZjgyXDA2NVx1ZmY4MlwwNjYiICsKLSAgICAiXHVmZjgyXDA2N1x1ZmY4MlwwNzFcdWZmODJcMDczXHVmZjgyXDA3NVx1ZmY4MlwxMDBcdWZmODJcMTAxXHVmZjgyIiArCi0gICAgIlwxMDJcdWZmODJcMTA3XHVmZjgyXDExMFx1ZmY4MlwxMTFcdWZmODJcMDAxXDAwMlwwMDBcMTI2XDAwMiIgKwotICAgICJcdWZmYjNcMDA0XHVmZmIzXDAwNVx1ZmZiM1wwMDdcdWZmYjNcMDEwXHVmZmIzXDAxMVx1ZmZiM1wwMTJcdWZmYjMiICsKLSAgICAiXDAxM1x1ZmZiM1wwMTRcdWZmYjNcMDE1XHVmZmIzXDAxNlx1ZmZiM1wwMTdcdWZmYjNcMDIwXHVmZmIzXDAyMSIgKwotICAgICJcdWZmYjNcMDIyXHVmZmIzXDAyM1x1ZmZiM1wwMjRcdWZmYjNcMDI1XHVmZmIzXDAzMlx1ZmZiM1wwNTNcdWZmYjMiICsKLSAgICAiXDA1NFx1ZmZiM1wwNTVcdWZmYjNcMDU2XHVmZmIzXDA1N1x1ZmZiM1wwNjBcdWZmYjNcMDYxXHVmZmIzXDA2MiIgKwotICAgICJcdWZmYjNcMDYzXHVmZmIzXDA2NFx1ZmZiM1wwNjVcdWZmYjNcMDY2XHVmZmIzXDA2N1x1ZmZiM1wwNzFcdWZmYjMiICsKLSAgICAiXDA3M1x1ZmZiM1wwNzRcdWZmYjNcMDc1XHVmZmIzXDEwMFx1ZmZiM1wxMDFcdWZmYjNcMTAyXHVmZmIzXDEwNyIgKwotICAgICJcdWZmYjNcMTEwXHVmZmIzXDExMVx1ZmZiM1wwMDFcMDAyXDAwMFwxNDZcMDEyXHVmZmE0XDAzNlx1ZmZhNCIgKwotICAgICJcMDM3XHVmZmE0XDA0MFx1ZmZhNFwwNDFcdWZmYTRcMDQyXHVmZmE0XDA0M1x1ZmZhNFwwNDRcdWZmYTRcMDQ1IiArCi0gICAgIlx1ZmZhNFwwNDZcdWZmYTRcMDQ3XHVmZmE0XDA1MFx1ZmZhNFwwNTFcdWZmYTRcMDUyXHVmZmE0XDA2MVx1ZmZhNCIgKwotICAgICJcMDYyXHVmZmE0XDA2M1x1ZmZhNFwwNjRcdWZmYTRcMDY1XHVmZmE0XDA2Nlx1ZmZhNFwwNjdcdWZmYTRcMDcwIiArCi0gICAgIlx1ZmZhNFwwNzFcdWZmYTRcMDczXHVmZmE0XDA3NFx1ZmZhNFwwNzVcdWZmYTRcMDc2XHVmZmE0XDA3N1x1ZmZhNCIgKwotICAgICJcMTAwXHVmZmE0XDEwMVx1ZmZhNFwxMDJcdWZmYTRcMTAzXHVmZmE0XDEwNFx1ZmZhNFwxMDVcdWZmYTRcMTA2IiArCi0gICAgIlx1ZmZhNFwxMDdcdWZmYTRcMTEwXHVmZmE0XDExMVx1ZmZhNFwxMTJcdWZmYTRcMTEzXHVmZmE0XDExNFx1ZmZhNCIgKwotICAgICJcMTE1XHVmZmE0XDExNlx1ZmZhNFwxMTdcdWZmYTRcMTIwXHVmZmE0XDEyMVx1ZmZhNFwxMjJcdWZmYTRcMTIzIiArCi0gICAgIlx1ZmZhNFwxMjRcdWZmYTRcMTMxXHVmZmE0XDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzYiICsKLSAgICAiXDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzMyIgKwotICAgICJcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0IiArCi0gICAgIlwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTEiICsKLSAgICAiXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNSIgKwotICAgICJcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1IiArCi0gICAgIlwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDUiICsKLSAgICAiXDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMiIgKwotICAgICJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxIiArCi0gICAgIlwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjciICsKLSAgICAiXDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NiIgKwotICAgICJcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzIiArCi0gICAgIlwwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDQiICsKLSAgICAiXDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MSIgKwotICAgICJcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1IiArCi0gICAgIlwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzUiICsKLSAgICAiXDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNSIgKwotICAgICJcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyIiArCi0gICAgIlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDEiICsKLSAgICAiXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyNyIgKwotICAgICJcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2IiArCi0gICAgIlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzMiICsKLSAgICAiXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNCIgKwotICAgICJcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxIiArCi0gICAgIlwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjUiICsKLSAgICAiXDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NSIgKwotICAgICJcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1IiArCi0gICAgIlwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTIiICsKLSAgICAiXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MSIgKwotICAgICJcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3IiArCi0gICAgIlwxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDEwMFwwMDJcdWZmZTVcMDA1XHVmZmU1IiArCi0gICAgIlwwMDdcdWZmZTVcMDEwXHVmZmU1XDAxMVx1ZmZlNVwwMTJcdTAxMDFcMDE0XHVmZmU1XDAxNVx1ZmZlNVwwMTYiICsKLSAgICAiXHVmZmU1XDAxN1x1ZmZlNVwwMjBcdWZmZTVcMDIxXHVmZmU1XDAyMlx1ZmZlNVwwMjNcdWZmZTVcMDMyXHVmZmU1IiArCi0gICAgIlwwNTNcdWZmZTVcMDU0XHVmZmU1XDA1NVx1ZmZlNVwwNTZcdWZmZTVcMDU3XHVmZmU1XDA2MFx1ZmZlNVwwNjEiICsKLSAgICAiXHUwMTAzXDA2Mlx1MDEwNFwwNjNcdTAxMDJcMDc1XHVmZmU1XDEwMFx1ZmZlNVwxMDFcdWZmZTVcMTAyXHVmZmU1IiArCi0gICAgIlwxMDdcdWZmZTVcMTEwXHVmZmU1XDExMVx1ZmZlNVwwMDFcMDAyXDAwMFwxMDBcMDAyXHVmZmU2XDAwNSIgKwotICAgICJcdWZmZTZcMDA3XHVmZmU2XDAxMFx1ZmZlNlwwMTFcdWZmZTZcMDEyXHUwMTAxXDAxNFx1ZmZlNlwwMTVcdWZmZTYiICsKLSAgICAiXDAxNlx1ZmZlNlwwMTdcdWZmZTZcMDIwXHVmZmU2XDAyMVx1ZmZlNlwwMjJcdWZmZTZcMDIzXHVmZmU2XDAzMiIgKwotICAgICJcdWZmZTZcMDUzXHVmZmU2XDA1NFx1ZmZlNlwwNTVcdWZmZTZcMDU2XHVmZmU2XDA1N1x1ZmZlNlwwNjBcdWZmZTYiICsKLSAgICAiXDA2MVx1MDEwM1wwNjJcdTAxMDRcMDYzXHUwMTAyXDA3NVx1ZmZlNlwxMDBcdWZmZTZcMTAxXHVmZmU2XDEwMiIgKwotICAgICJcdWZmZTZcMTA3XHVmZmU2XDExMFx1ZmZlNlwxMTFcdWZmZTZcMDAxXDAwMlwwMDBcMDY2XDAwMlx1ZmZlOCIgKwotICAgICJcMDA1XHVmZmU4XDAwN1x1ZmZlOFwwMTBcdTAxNzZcMDExXHUwMTc3XDAxNFx1ZmZlOFwwMTVcdWZmZThcMDE2IiArCi0gICAgIlx1ZmZlOFwwMTdcdWZmZThcMDIwXHVmZmU4XDAyMVx1ZmZlOFwwMjJcdWZmZThcMDIzXHVmZmU4XDAzMlx1ZmZlOCIgKwotICAgICJcMDUzXHVmZmU4XDA1NFx1ZmZlOFwwNTVcdWZmZThcMDU2XHVmZmU4XDA1N1x1ZmZlOFwwNjBcdWZmZThcMDc1IiArCi0gICAgIlx1ZmZlOFwxMDBcdWZmZThcMTAxXHVmZmU4XDEwN1x1ZmZlOFwxMTBcdWZmZThcMTExXHVmZmU4XDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDRcMDA3XHUwMTdjXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNmVcMDA0XHVmZjZlXDAwNSIgKwotICAgICJcdWZmNmVcMDA3XHVmZjZlXDAxMFx1ZmY2ZVwwMTFcdWZmNmVcMDEyXHVmZjZlXDAxM1x1ZmY2ZVwwMTRcdWZmNmUiICsKLSAgICAiXDAxNVx1ZmY2ZVwwMTZcdWZmNmVcMDE3XHVmZjZlXDAyMFx1ZmY2ZVwwMjFcdWZmNmVcMDIyXHVmZjZlXDAyMyIgKwotICAgICJcdWZmNmVcMDI0XHVmZjZlXDAyNVx1ZmY2ZVwwMzJcdWZmNmVcMDM1XHVmZjZlXDA1M1x1ZmY2ZVwwNTRcdWZmNmUiICsKLSAgICAiXDA1NVx1ZmY2ZVwwNTZcdWZmNmVcMDU3XHVmZjZlXDA2MFx1ZmY2ZVwwNjFcdWZmNmVcMDYyXHVmZjZlXDA2MyIgKwotICAgICJcdWZmNmVcMDY0XHVmZjZlXDA2NVx1ZmY2ZVwwNjZcdWZmNmVcMDY3XHVmZjZlXDA3MVx1ZmY2ZVwwNzNcdWZmNmUiICsKLSAgICAiXDA3NFx1ZmY2ZVwwNzVcdWZmNmVcMTAwXHVmZjZlXDEwMVx1ZmY2ZVwxMDJcdWZmNmVcMTA3XHVmZjZlXDExMCIgKwotICAgICJcdWZmNmVcMTExXHVmZjZlXDAwMVwwMDJcMDAwXDEyNFwwMDJcdWZmYmRcMDA1XHVmZmJkXDAwN1x1ZmZiZCIgKwotICAgICJcMDEwXHVmZmJkXDAxMVx1ZmZiZFwwMTJcdWZmYmRcMDEzXHVmZmJkXDAxNFx1ZmZiZFwwMTVcdWZmYmRcMDE2IiArCi0gICAgIlx1ZmZiZFwwMTdcdWZmYmRcMDIwXHVmZmJkXDAyMVx1ZmZiZFwwMjJcdWZmYmRcMDIzXHVmZmJkXDAyNFwzNzUiICsKLSAgICAiXDAyNVwzNzZcMDMyXHVmZmJkXDA1M1x1ZmZiZFwwNTRcdWZmYmRcMDU1XHVmZmJkXDA1Nlx1ZmZiZFwwNTciICsKLSAgICAiXHVmZmJkXDA2MFx1ZmZiZFwwNjFcdWZmYmRcMDYyXHVmZmJkXDA2M1x1ZmZiZFwwNjRcdWZmYmRcMDY1XHVmZmJkIiArCi0gICAgIlwwNjZcdWZmYmRcMDY3XHVmZmJkXDA3MVx1ZmZiZFwwNzNcdWZmYmRcMDc0XHVmZmJkXDA3NVx1ZmZiZFwxMDAiICsKLSAgICAiXHVmZmJkXDEwMVx1ZmZiZFwxMDJcdWZmYmRcMTA3XHVmZmJkXDExMFx1ZmZiZFwxMTFcdWZmYmRcMDAxXDAwMiIgKwotICAgICJcMDAwXDE0NlwwMTJcdWZmYWFcMDM2XHVmZmFhXDAzN1x1ZmZhYVwwNDBcdWZmYWFcMDQxXHVmZmFhXDA0MiIgKwotICAgICJcdWZmYWFcMDQzXHVmZmFhXDA0NFx1ZmZhYVwwNDVcdWZmYWFcMDQ2XHVmZmFhXDA0N1x1ZmZhYVwwNTBcdWZmYWEiICsKLSAgICAiXDA1MVx1ZmZhYVwwNTJcdWZmYWFcMDYxXHVmZmFhXDA2Mlx1ZmZhYVwwNjNcdWZmYWFcMDY0XHVmZmFhXDA2NSIgKwotICAgICJcdWZmYWFcMDY2XHVmZmFhXDA2N1x1ZmZhYVwwNzBcdWZmYWFcMDcxXHVmZmFhXDA3M1x1ZmZhYVwwNzRcdWZmYWEiICsKLSAgICAiXDA3NVx1ZmZhYVwwNzZcdWZmYWFcMDc3XHVmZmFhXDEwMFx1ZmZhYVwxMDFcdWZmYWFcMTAyXHVmZmFhXDEwMyIgKwotICAgICJcdWZmYWFcMTA0XHVmZmFhXDEwNVx1ZmZhYVwxMDZcdWZmYWFcMTA3XHVmZmFhXDExMFx1ZmZhYVwxMTFcdWZmYWEiICsKLSAgICAiXDExMlx1ZmZhYVwxMTNcdWZmYWFcMTE0XHVmZmFhXDExNVx1ZmZhYVwxMTZcdWZmYWFcMTE3XHVmZmFhXDEyMCIgKwotICAgICJcdWZmYWFcMTIxXHVmZmFhXDEyMlx1ZmZhYVwxMjNcdWZmYWFcMTI0XHVmZmFhXDEzMVx1ZmZhYVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDEwXDAwN1x1MDE4M1wxMjJcdTAxODRcMTIzXHUwMTgyXDAwMVwwMDJcMDAwXDAwNFwwMDciICsKLSAgICAiXHUwMTg2XDAwMVwwMDJcMDAwXDAwNFwwMDdcdTAxODVcMDAxXDAwMlwwMDBcMDA0XDAwNlx1MDE1NCIgKwotICAgICJcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY2ZFwwMDRcdWZmNmRcMDA1XHVmZjZkXDAwN1x1ZmY2ZFwwMTAiICsKLSAgICAiXHVmZjZkXDAxMVx1ZmY2ZFwwMTJcdWZmNmRcMDEzXHVmZjZkXDAxNFx1ZmY2ZFwwMTVcdWZmNmRcMDE2XHVmZjZkIiArCi0gICAgIlwwMTdcdWZmNmRcMDIwXHVmZjZkXDAyMVx1ZmY2ZFwwMjJcdWZmNmRcMDIzXHVmZjZkXDAyNFx1ZmY2ZFwwMjUiICsKLSAgICAiXHVmZjZkXDAzMlx1ZmY2ZFwwMzVcdWZmNmRcMDUzXHVmZjZkXDA1NFx1ZmY2ZFwwNTVcdWZmNmRcMDU2XHVmZjZkIiArCi0gICAgIlwwNTdcdWZmNmRcMDYwXHVmZjZkXDA2MVx1ZmY2ZFwwNjJcdWZmNmRcMDYzXHVmZjZkXDA2NFx1ZmY2ZFwwNjUiICsKLSAgICAiXHVmZjZkXDA2Nlx1ZmY2ZFwwNjdcdWZmNmRcMDcxXHVmZjZkXDA3M1x1ZmY2ZFwwNzRcdWZmNmRcMDc1XHVmZjZkIiArCi0gICAgIlwxMDBcdWZmNmRcMTAxXHVmZjZkXDEwMlx1ZmY2ZFwxMDdcdWZmNmRcMTEwXHVmZjZkXDExMVx1ZmY2ZFwwMDEiICsKLSAgICAiXDAwMlwwMDBcMDA0XDAwNlx1MDE1YVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjZiXDAwNFx1ZmY2YiIgKwotICAgICJcMDA1XHVmZjZiXDAwN1x1ZmY2YlwwMTBcdWZmNmJcMDExXHVmZjZiXDAxMlx1ZmY2YlwwMTNcdWZmNmJcMDE0IiArCi0gICAgIlx1ZmY2YlwwMTVcdWZmNmJcMDE2XHVmZjZiXDAxN1x1ZmY2YlwwMjBcdWZmNmJcMDIxXHVmZjZiXDAyMlx1ZmY2YiIgKwotICAgICJcMDIzXHVmZjZiXDAyNFx1ZmY2YlwwMjVcdWZmNmJcMDMyXHVmZjZiXDAzNVx1ZmY2YlwwNTNcdWZmNmJcMDU0IiArCi0gICAgIlx1ZmY2YlwwNTVcdWZmNmJcMDU2XHVmZjZiXDA1N1x1ZmY2YlwwNjBcdWZmNmJcMDYxXHVmZjZiXDA2Mlx1ZmY2YiIgKwotICAgICJcMDYzXHVmZjZiXDA2NFx1ZmY2YlwwNjVcdWZmNmJcMDY2XHVmZjZiXDA2N1x1ZmY2YlwwNzFcdWZmNmJcMDczIiArCi0gICAgIlx1ZmY2YlwwNzRcdWZmNmJcMDc1XHVmZjZiXDEwMFx1ZmY2YlwxMDFcdWZmNmJcMTAyXHVmZjZiXDEwN1x1ZmY2YiIgKwotICAgICJcMTEwXHVmZjZiXDExMVx1ZmY2YlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjZjXDAwNFx1ZmY2Y1wwMDUiICsKLSAgICAiXHVmZjZjXDAwN1x1ZmY2Y1wwMTBcdWZmNmNcMDExXHVmZjZjXDAxMlx1ZmY2Y1wwMTNcdWZmNmNcMDE0XHVmZjZjIiArCi0gICAgIlwwMTVcdWZmNmNcMDE2XHVmZjZjXDAxN1x1ZmY2Y1wwMjBcdWZmNmNcMDIxXHVmZjZjXDAyMlx1ZmY2Y1wwMjMiICsKLSAgICAiXHVmZjZjXDAyNFx1ZmY2Y1wwMjVcdWZmNmNcMDMyXHVmZjZjXDAzNVx1ZmY2Y1wwNTNcdWZmNmNcMDU0XHVmZjZjIiArCi0gICAgIlwwNTVcdWZmNmNcMDU2XHVmZjZjXDA1N1x1ZmY2Y1wwNjBcdWZmNmNcMDYxXHVmZjZjXDA2Mlx1ZmY2Y1wwNjMiICsKLSAgICAiXHVmZjZjXDA2NFx1ZmY2Y1wwNjVcdWZmNmNcMDY2XHVmZjZjXDA2N1x1ZmY2Y1wwNzFcdWZmNmNcMDczXHVmZjZjIiArCi0gICAgIlwwNzRcdWZmNmNcMDc1XHVmZjZjXDEwMFx1ZmY2Y1wxMDFcdWZmNmNcMTAyXHVmZjZjXDEwN1x1ZmY2Y1wxMTAiICsKLSAgICAiXHVmZjZjXDExMVx1ZmY2Y1wwMDFcMDAyXDAwMFwwMDRcMDcwXHUwMTg4XDAwMVwwMDJcMDAwXDE0NiIgKwotICAgICJcMDEyXDIzM1wwMzZcMjMyXDAzN1wyNDBcMDQwXHUwMTI0XDA0MVwyNDFcMDQyXDIzN1wwNDMiICsKLSAgICAiXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0XDA1MFwyMjVcMDUxXDI0MiIgKwotICAgICJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2IiArCi0gICAgIlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzUiICsKLSAgICAiXDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNCIgKwotICAgICJcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcdTAxNDYiICsKLSAgICAiXDExM1x1MDE0NVwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxIiArCi0gICAgIlwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyXDAwMFwxMTAiICsKLSAgICAiXDAwMlx1ZmZkOFwwMDVcdWZmZDhcMDA3XHVmZmQ4XDAxMFx1ZmZkOFwwMTFcdWZmZDhcMDEyXHVmZmQ4XDAxMyIgKwotICAgICJcdWZmZDhcMDE0XHVmZmQ4XDAxNVx1ZmZkOFwwMTZcdWZmZDhcMDE3XHVmZmQ4XDAyMFx1ZmZkOFwwMjFcdWZmZDgiICsKLSAgICAiXDAyMlx1ZmZkOFwwMjNcdWZmZDhcMDMyXHVmZmQ4XDA1M1x1ZmZkOFwwNTRcdWZmZDhcMDU1XHVmZmQ4XDA1NiIgKwotICAgICJcdWZmZDhcMDU3XHVmZmQ4XDA2MFx1ZmZkOFwwNjFcdWZmZDhcMDYyXHVmZmQ4XDA2M1x1ZmZkOFwwNjRcdWZmZDgiICsKLSAgICAiXDA2NVx1ZmZkOFwwNjZcdWZmZDhcMDc1XHVmZmQ4XDEwMFx1ZmZkOFwxMDFcdWZmZDhcMTAyXHVmZmQ4XDEwNyIgKwotICAgICJcdWZmZDhcMTEwXHVmZmQ4XDExMVx1ZmZkOFwwMDFcMDAyXDAwMFwwMDRcMDcyXHUwMThiXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxNDZcMDEyXDIzM1wwMzZcMjMyXDAzN1wyNDBcMDQwXDI1MlwwNDFcMjQxXDA0MiIgKwotICAgICJcMjM3XDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDZcMDQ3XDI0NFwwNTBcMjI1IiArCi0gICAgIlwwNTFcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjUiICsKLSAgICAiXDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NCIgKwotICAgICJcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzIiArCi0gICAgIlwyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDMiICsKLSAgICAiXDExMlwxMzJcMTEzXDEyNlwxMTRcMjUzXDExNVwyNDdcMTE2XDI1MVwxMTdcMjI3XDEyMCIgKwotICAgICJcMjM0XDEyMVwyMzBcMTIyXDI0NVwxMjNcMjM1XDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyIiArCi0gICAgIlwwMDBcMTE2XDAwMlx1ZmZkMlwwMDVcdWZmZDJcMDA3XHVmZmQyXDAxMFx1ZmZkMlwwMTFcdWZmZDJcMDEyIiArCi0gICAgIlx1ZmZkMlwwMTNcdWZmZDJcMDE0XHVmZmQyXDAxNVx1ZmZkMlwwMTZcdWZmZDJcMDE3XHVmZmQyXDAyMFx1ZmZkMiIgKwotICAgICJcMDIxXHVmZmQyXDAyMlx1ZmZkMlwwMjNcdWZmZDJcMDMyXHVmZmQyXDA1M1x1ZmZkMlwwNTRcdWZmZDJcMDU1IiArCi0gICAgIlx1ZmZkMlwwNTZcdWZmZDJcMDU3XHVmZmQyXDA2MFx1ZmZkMlwwNjFcdWZmZDJcMDYyXHVmZmQyXDA2M1x1ZmZkMiIgKwotICAgICJcMDY0XHVmZmQyXDA2NVx1ZmZkMlwwNjZcdWZmZDJcMDY3XHVmZmQyXDA3MVx1ZmZkMlwwNzNcdWZmZDJcMDc1IiArCi0gICAgIlx1ZmZkMlwxMDBcdWZmZDJcMTAxXHVmZmQyXDEwMlx1ZmZkMlwxMDdcdWZmZDJcMTEwXHVmZmQyXDExMVx1ZmZkMiIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA0XDAwMlwwMDBcMDAxXDAwMlwwMDBcMTQ2XDAxMlx1ZmZhNVwwMzYiICsKLSAgICAiXHVmZmE1XDAzN1x1ZmZhNVwwNDBcdWZmYTVcMDQxXHVmZmE1XDA0Mlx1ZmZhNVwwNDNcdWZmYTVcMDQ0XHVmZmE1IiArCi0gICAgIlwwNDVcdWZmYTVcMDQ2XHVmZmE1XDA0N1x1ZmZhNVwwNTBcdWZmYTVcMDUxXHVmZmE1XDA1Mlx1ZmZhNVwwNjEiICsKLSAgICAiXHVmZmE1XDA2Mlx1ZmZhNVwwNjNcdWZmYTVcMDY0XHVmZmE1XDA2NVx1ZmZhNVwwNjZcdWZmYTVcMDY3XHVmZmE1IiArCi0gICAgIlwwNzBcdWZmYTVcMDcxXHVmZmE1XDA3M1x1ZmZhNVwwNzRcdWZmYTVcMDc1XHVmZmE1XDA3Nlx1ZmZhNVwwNzciICsKLSAgICAiXHVmZmE1XDEwMFx1ZmZhNVwxMDFcdWZmYTVcMTAyXHVmZmE1XDEwM1x1ZmZhNVwxMDRcdWZmYTVcMTA1XHVmZmE1IiArCi0gICAgIlwxMDZcdWZmYTVcMTA3XHVmZmE1XDExMFx1ZmZhNVwxMTFcdWZmYTVcMTEyXHVmZmE1XDExM1x1ZmZhNVwxMTQiICsKLSAgICAiXHVmZmE1XDExNVx1ZmZhNVwxMTZcdWZmYTVcMTE3XHVmZmE1XDEyMFx1ZmZhNVwxMjFcdWZmYTVcMTIyXHVmZmE1IiArCi0gICAgIlwxMjNcdWZmYTVcMTI0XHVmZmE1XDEzMVx1ZmZhNVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZmE3XDAwNCIgKwotICAgICJcdWZmYTdcMDA1XHVmZmE3XDAwN1x1ZmZhN1wwMTBcdWZmYTdcMDExXHVmZmE3XDAxMlx1ZmZhN1wwMTNcdWZmYTciICsKLSAgICAiXDAxNFx1ZmZhN1wwMTVcdWZmYTdcMDE2XHVmZmE3XDAxN1x1ZmZhN1wwMjBcdWZmYTdcMDIxXHVmZmE3XDAyMiIgKwotICAgICJcdWZmYTdcMDIzXHVmZmE3XDAyNFx1ZmZhN1wwMjVcdWZmYTdcMDMyXHVmZmE3XDA1M1x1ZmZhN1wwNTRcdWZmYTciICsKLSAgICAiXDA1NVx1ZmZhN1wwNTZcdWZmYTdcMDU3XHVmZmE3XDA2MFx1ZmZhN1wwNjFcdWZmYTdcMDYyXHVmZmE3XDA2MyIgKwotICAgICJcdWZmYTdcMDY0XHVmZmE3XDA2NVx1ZmZhN1wwNjZcdWZmYTdcMDY3XHVmZmE3XDA3MVx1ZmZhN1wwNzNcdWZmYTciICsKLSAgICAiXDA3NFx1ZmZhN1wwNzVcdWZmYTdcMTAwXHVmZmE3XDEwMVx1ZmZhN1wxMDJcdWZmYTdcMTA3XHVmZmE3XDExMCIgKwotICAgICJcdWZmYTdcMTExXHVmZmE3XDAwMVwwMDJcMDAwXDE0NlwwMTJcdWZmYWJcMDM2XHVmZmFiXDAzN1x1ZmZhYiIgKwotICAgICJcMDQwXHVmZmFiXDA0MVx1ZmZhYlwwNDJcdWZmYWJcMDQzXHVmZmFiXDA0NFx1ZmZhYlwwNDVcdWZmYWJcMDQ2IiArCi0gICAgIlx1ZmZhYlwwNDdcdWZmYWJcMDUwXHVmZmFiXDA1MVx1ZmZhYlwwNTJcdWZmYWJcMDYxXHVmZmFiXDA2Mlx1ZmZhYiIgKwotICAgICJcMDYzXHVmZmFiXDA2NFx1ZmZhYlwwNjVcdWZmYWJcMDY2XHVmZmFiXDA2N1x1ZmZhYlwwNzBcdWZmYWJcMDcxIiArCi0gICAgIlx1ZmZhYlwwNzNcdWZmYWJcMDc0XHVmZmFiXDA3NVx1ZmZhYlwwNzZcdWZmYWJcMDc3XHVmZmFiXDEwMFx1ZmZhYiIgKwotICAgICJcMTAxXHVmZmFiXDEwMlx1ZmZhYlwxMDNcdWZmYWJcMTA0XHVmZmFiXDEwNVx1ZmZhYlwxMDZcdWZmYWJcMTA3IiArCi0gICAgIlx1ZmZhYlwxMTBcdWZmYWJcMTExXHVmZmFiXDExMlx1ZmZhYlwxMTNcdWZmYWJcMTE0XHVmZmFiXDExNVx1ZmZhYiIgKwotICAgICJcMTE2XHVmZmFiXDExN1x1ZmZhYlwxMjBcdWZmYWJcMTIxXHVmZmFiXDEyMlx1ZmZhYlwxMjNcdWZmYWJcMTI0IiArCi0gICAgIlx1ZmZhYlwxMzFcdWZmYWJcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0IiArCi0gICAgIlwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzQiICsKLSAgICAiXDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MSIgKwotICAgICJcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyIiArCi0gICAgIlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzIiICsKLSAgICAiXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NiIgKwotICAgICJcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxIiArCi0gICAgIlwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTMiICsKLSAgICAiXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NiIgKwotICAgICJcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwIiArCi0gICAgIlwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMjRcMDAyXHVmZmYwXDAwNVx1ZmZmMFwwMDdcdWZmZjAiICsKLSAgICAiXDAzMlx1ZmZmMFwxMDBcdWZmZjBcMTAxXHVmZmYwXDEwN1x1ZmZmMFwxMTBcMjAwXDExMVx1ZmZmMFwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTI0XDAwMlx1ZmZiY1wwMDVcdWZmYmNcMDA3XHVmZmJjXDAxMFx1ZmZiY1wwMTFcdWZmYmMiICsKLSAgICAiXDAxMlx1ZmZiY1wwMTNcdWZmYmNcMDE0XHVmZmJjXDAxNVx1ZmZiY1wwMTZcdWZmYmNcMDE3XHVmZmJjXDAyMCIgKwotICAgICJcdWZmYmNcMDIxXHVmZmJjXDAyMlx1ZmZiY1wwMjNcdWZmYmNcMDI0XDM3NVwwMjVcMzc2XDAzMlx1ZmZiYyIgKwotICAgICJcMDUzXHVmZmJjXDA1NFx1ZmZiY1wwNTVcdWZmYmNcMDU2XHVmZmJjXDA1N1x1ZmZiY1wwNjBcdWZmYmNcMDYxIiArCi0gICAgIlx1ZmZiY1wwNjJcdWZmYmNcMDYzXHVmZmJjXDA2NFx1ZmZiY1wwNjVcdWZmYmNcMDY2XHVmZmJjXDA2N1x1ZmZiYyIgKwotICAgICJcMDcxXHVmZmJjXDA3M1x1ZmZiY1wwNzRcdWZmYmNcMDc1XHVmZmJjXDEwMFx1ZmZiY1wxMDFcdWZmYmNcMTAyIiArCi0gICAgIlx1ZmZiY1wxMDdcdWZmYmNcMTEwXHVmZmJjXDExMVx1ZmZiY1wwMDFcMDAyXDAwMFwxNDZcMDEyXHVmZmFkIiArCi0gICAgIlwwMzZcdWZmYWRcMDM3XHVmZmFkXDA0MFx1ZmZhZFwwNDFcdWZmYWRcMDQyXHVmZmFkXDA0M1x1ZmZhZFwwNDQiICsKLSAgICAiXHVmZmFkXDA0NVx1ZmZhZFwwNDZcdWZmYWRcMDQ3XHVmZmFkXDA1MFx1ZmZhZFwwNTFcdWZmYWRcMDUyXHVmZmFkIiArCi0gICAgIlwwNjFcdWZmYWRcMDYyXHVmZmFkXDA2M1x1ZmZhZFwwNjRcdWZmYWRcMDY1XHVmZmFkXDA2Nlx1ZmZhZFwwNjciICsKLSAgICAiXHVmZmFkXDA3MFx1ZmZhZFwwNzFcdWZmYWRcMDczXHVmZmFkXDA3NFx1ZmZhZFwwNzVcdWZmYWRcMDc2XHVmZmFkIiArCi0gICAgIlwwNzdcdWZmYWRcMTAwXHVmZmFkXDEwMVx1ZmZhZFwxMDJcdWZmYWRcMTAzXHVmZmFkXDEwNFx1ZmZhZFwxMDUiICsKLSAgICAiXHVmZmFkXDEwNlx1ZmZhZFwxMDdcdWZmYWRcMTEwXHVmZmFkXDExMVx1ZmZhZFwxMTJcdWZmYWRcMTEzXHVmZmFkIiArCi0gICAgIlwxMTRcdWZmYWRcMTE1XHVmZmFkXDExNlx1ZmZhZFwxMTdcdWZmYWRcMTIwXHVmZmFkXDEyMVx1ZmZhZFwxMjIiICsKLSAgICAiXHVmZmFkXDEyM1x1ZmZhZFwxMjRcdWZmYWRcMTMxXHVmZmFkXDAwMVwwMDIiIH0pOwotCi0gIC8qKiBBY2Nlc3MgdG8gcGFyc2UtYWN0aW9uIHRhYmxlLiAqLwotICBwdWJsaWMgc2hvcnRbXVtdIGFjdGlvbl90YWJsZSgpIHtyZXR1cm4gX2FjdGlvbl90YWJsZTt9Ci0KLSAgLyoqIDxjb2RlPnJlZHVjZV9nb3RvPC9jb2RlPiB0YWJsZS4gKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBzaG9ydFtdW10gX3JlZHVjZV90YWJsZSA9IAotICAgIHVucGFja0Zyb21TdHJpbmdzKG5ldyBTdHJpbmdbXSB7Ci0gICAgIlwwMDBcdTAxOTJcMDAwXDE3NFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMCIgKwotICAgICJcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzNcMDM2IiArCi0gICAgIlwwMzZcMTU3XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDQiICsKLSAgICAiXDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MiIgKwotICAgICJcMDU1XDAzMlwwNTZcMDQzXDA1N1wxMjZcMDYwXDE3MVwwNjFcMDc0XDA2MlwwMjZcMDY1IiArCi0gICAgIlwxNzVcMDY2XDAwNlwwNjdcMDYyXDA3MFwwNjFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDMiICsKLSAgICAiXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMiIgKwotICAgICJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyIiArCi0gICAgIlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMTRcMDEyXDExNVwxMTVcMTE2XDAzNVwxMTciICsKLSAgICAiXDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDEyMFwwMDNcMTM3XDAwNVwwNDFcMDA2IiArCi0gICAgIlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzEiICsKLSAgICAiXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NCIgKwotICAgICJcMTYzXDA0NVwxNzZcMDQ2XHUwMTkyXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTQiICsKLSAgICAiXDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwMyIgKwotICAgICJcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0IiArCi0gICAgIlwxMTJcMTMwXDExM1wxMjBcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDA0NlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMSIgKwotICAgICJcMDA3XDE1MFwwMjFcdTAxMjRcMDIzXDA2M1wwNDBcdTAxOGVcMDcxXDE2MFwwNzJcMDU3XDEwMyIgKwotICAgICJcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0IiArCi0gICAgIlwxMTJcMTMwXDExM1wxMjBcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwxMjBcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDIiICsKLSAgICAiXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MSIgKwotICAgICJcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XHUwMTdjXDA3MVwxNjAiICsKLSAgICAiXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMCIgKwotICAgICJcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczIiArCi0gICAgIlwxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTIyXDAyN1wxMjMiICsKLSAgICAiXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwNDZcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTEiICsKLSAgICAiXDAwN1wxNTBcMDIxXHUwMTI0XDAyM1wwNjNcMDQwXHUwMTcyXDA3MVwxNjBcMDcyXDA1N1wxMDMiICsKLSAgICAiXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNCIgKwotICAgICJcMTEyXDEzMFwxMTNcMTIwXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDRcMDM0XHUwMTU4IiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAxMFwwMjdcdTAxMzhcMDYzXHUwMTM3XDA2NFx1MDEzM1wwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDA0XDEyNVx1MDEyNSIgKwotICAgICJcMDAxXDAwMVwwMDBcMDQ2XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDIxIiArCi0gICAgIlx1MDEyNFwwMjNcMDYzXDA0MFx1MDEyMlwwNzFcMTYwXDA3MlwwNTdcMTAzXDAyNFwxMDRcMTUxIiArCi0gICAgIlwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTMiICsKLSAgICAiXDEyMFwwMDFcMDAxXDAwMFwwMTZcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MCIgKwotICAgICJcMDIxXDI1M1wwMjJcdTAxMjFcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxMjZcMDAzXDEzNyIgKwotICAgICJcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1IiArCi0gICAgIlwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MlwxMzYiICsKLSAgICAiXDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XHUwMTIwXDA3MVwxNjBcMDcyIiArCi0gICAgIlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDQiICsKLSAgICAiXDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwNyIgKwotICAgICJcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTIwXDE0N1wxMjFcMTQ1IiArCi0gICAgIlwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwNFwwMzQiICsKLSAgICAiXHUwMTFmXDAwMVwwMDFcMDAwXDE3MlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwIiArCi0gICAgIlwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzMiICsKLSAgICAiXHUwMTFjXDAzNlwxNTdcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3IiArCi0gICAgIlwwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTQiICsKLSAgICAiXDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxXDA2MVwwNzRcMDYyXDAyNiIgKwotICAgICJcMDY1XDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwXDA2MVwwNzFcMTYwXDA3MlwwNTdcMDczIiArCi0gICAgIlwxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjQiICsKLSAgICAiXDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMCIgKwotICAgICJcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDExNVwxMTVcMTE2XDAzNVwxMTdcMDY0IiArCi0gICAgIlwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxMjZcMDAzIiArCi0gICAgIlwxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjMiICsKLSAgICAiXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MiIgKwotICAgICJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDM3M1wwNzFcMTYwIiArCi0gICAgIlwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDAiICsKLSAgICAiXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3MyIgKwotICAgICJcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDEyMFwxNDdcMTIxIiArCi0gICAgIlwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDRcMDM0XDIxMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE1MlwwMDNcMTM3XDAwNVwwNDFcMDA2IiArCi0gICAgIlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzEiICsKLSAgICAiXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NCIgKwotICAgICJcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyIiArCi0gICAgIlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxXDA2MlwwMjZcMDY3XDA2MlwwNzAiICsKLSAgICAiXDIwMVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMCIgKwotICAgICJcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1IiArCi0gICAgIlwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjAiICsKLSAgICAiXDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDEzNlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDciICsKLSAgICAiXDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNSIgKwotICAgICJcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1IiArCi0gICAgIlwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMjEwXDA1NVwwMzIiICsKLSAgICAiXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3NyIgKwotICAgICJcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1IiArCi0gICAgIlwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjAiICsKLSAgICAiXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwxMzZcMDAzXDEzNyIgKwotICAgICJcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1IiArCi0gICAgIlwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MlwxMzYiICsKLSAgICAiXDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTJcMDE0XDA1MyIgKwotICAgICJcMDU2XDA1NFwyMDdcMDU1XDAzMlwwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0IiArCi0gICAgIlwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDMiICsKLSAgICAiXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNCIgKwotICAgICJcMTEyXDEzMFwxMTNcMTIwXDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDA0XDEyNFwyMTIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzJcMDAzXDEzN1wwMDVcMDQxXDAwNiIgKwotICAgICJcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxIiArCi0gICAgIlwwMzJcMTM1XDAzM1wyMTRcMDM2XDE1N1wwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDIiICsKLSAgICAiXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNCIgKwotICAgICJcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYxIiArCi0gICAgIlwwNzRcMDYyXDAyNlwwNjVcMTc1XDA2NlwwMDZcMDY3XDA2MlwwNzBcMDYxXDA3MVwxNjAiICsKLSAgICAiXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMCIgKwotICAgICJcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczIiArCi0gICAgIlwxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTE1XDExNVwxMTYiICsKLSAgICAiXDAzNVwxMTdcMDY0XDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzBcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3IiArCi0gICAgIlwxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzUiICsKLSAgICAiXDAzNlwxNTdcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NCIgKwotICAgICJcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyIiArCi0gICAgIlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxXDA2MVwyMTdcMDYyXDAyNlwwNjUiICsKLSAgICAiXDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwXDA2MVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0MyIgKwotICAgICJcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyIiArCi0gICAgIlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjIiICsKLSAgICAiXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDExNVwxMTVcMTE2XDAzNVwxMTdcMDY0XDEyMCIgKwotICAgICJcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzBcMDAzXDEzN1wwMDUiICsKLSAgICAiXDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMCIgKwotICAgICJcMDI2XDAzMVwwMzJcMTM1XDAzNlwxNTdcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyIiArCi0gICAgIlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTQiICsKLSAgICAiXDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxXDA2MSIgKwotICAgICJcMjIyXDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwXDA2MVwwNzFcMTYwIiArCi0gICAgIlwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDAiICsKLSAgICAiXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3MyIgKwotICAgICJcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDExNVwxMTVcMTE2IiArCi0gICAgIlwwMzVcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDE2XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwNyIgKwotICAgICJcMTUwXDAyMVwyNTNcMDIyXDIzMFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDE3MFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMiIgKwotICAgICJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzZcMTU3XDAzN1wxNjFcMDQwIiArCi0gICAgIlwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjciICsKLSAgICAiXDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1NyIgKwotICAgICJcMTI2XDA2MFwxNzFcMDYxXDI1NVwwNjJcMDI2XDA2NVwxNzVcMDY2XDAwNlwwNjdcMDYyIiArCi0gICAgIlwwNzBcMDYxXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzYiICsKLSAgICAiXDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MSIgKwotICAgICJcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzIiArCi0gICAgIlwxMjBcMTE1XDExNVwxMTZcMDM1XDExN1wwNjRcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjciICsKLSAgICAiXDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAyMFwwMDNcMTM3XDAwNSIgKwotICAgICJcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMjFcMjUzXDAyMlwyNjBcMDM1XDI1N1wwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzBcMDAzXDEzN1wwMDUiICsKLSAgICAiXDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMCIgKwotICAgICJcMDI2XDAzMVwwMzJcMTM1XDAzNlwxNTdcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyIiArCi0gICAgIlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTQiICsKLSAgICAiXDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxXDA2MSIgKwotICAgICJcMjYyXDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwXDA2MVwwNzFcMTYwIiArCi0gICAgIlwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDAiICsKLSAgICAiXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3MyIgKwotICAgICJcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDExNVwxMTVcMTE2IiArCi0gICAgIlwwMzVcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE3MFwwMDNcMTM3XDAwNSIgKwotICAgICJcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwIiArCi0gICAgIlwwMjZcMDMxXDAzMlwxMzVcMDM2XDE1N1wwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDIiICsKLSAgICAiXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNCIgKwotICAgICJcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYxIiArCi0gICAgIlwyNjVcMDYyXDAyNlwwNjVcMTc1XDA2NlwwMDZcMDY3XDA2MlwwNzBcMDYxXDA3MVwxNjAiICsKLSAgICAiXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMCIgKwotICAgICJcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczIiArCi0gICAgIlwxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTE1XDExNVwxMTYiICsKLSAgICAiXDAzNVwxMTdcMDY0XDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMTZcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3IiArCi0gICAgIlwxNTBcMDIxXDI1M1wwMjJcMjY3XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzAiICsKLSAgICAiXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyMyIgKwotICAgICJcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzNlwxNTdcMDM3XDE2MVwwNDBcMTY3IiArCi0gICAgIlwwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDciICsKLSAgICAiXDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNiIgKwotICAgICJcMDYwXDE3MVwwNjFcMjcxXDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwIiArCi0gICAgIlwwNjFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjAiICsKLSAgICAiXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNSIgKwotICAgICJcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwIiArCi0gICAgIlwxMTVcMTE1XDExNlwwMzVcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjMiICsKLSAgICAiXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE3MiIgKwotICAgICJcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzIiArCi0gICAgIlwwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDMzXDI3NFwwMzZcMTU3XDAzN1wxNjEiICsKLSAgICAiXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NiIgKwotICAgICJcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzIiArCi0gICAgIlwwNTdcMTI2XDA2MFwxNzFcMDYxXDA3NFwwNjJcMDI2XDA2NVwxNzVcMDY2XDAwNlwwNjciICsKLSAgICAiXDA2MlwwNzBcMDYxXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MiIgKwotICAgICJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0IiArCi0gICAgIlwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzAiICsKLSAgICAiXDExM1wxMjBcMTE1XDExNVwxMTZcMDM1XDExN1wwNjRcMTIwXDE0N1wxMjFcMTQ1XDEyMiIgKwotICAgICJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMTcwXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjEiICsKLSAgICAiXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzNlwxNTdcMDM3XDE2MSIgKwotICAgICJcMDQwXDE2N1wwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2IiArCi0gICAgIlwxMjdcMDQ3XDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDMiICsKLSAgICAiXDA1N1wxMjZcMDYwXDE3MVwwNjFcMjc3XDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2NyIgKwotICAgICJcMDYyXDA3MFwwNjFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyIiArCi0gICAgIlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDQiICsKLSAgICAiXDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMCIgKwotICAgICJcMTEzXDEyMFwxMTVcMTE1XDExNlwwMzVcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyIiArCi0gICAgIlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTcwXDAwM1wxMzciICsKLSAgICAiXDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNSIgKwotICAgICJcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzZcMTU3XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzIiArCi0gICAgIlwwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTIiICsKLSAgICAiXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1N1wxMjZcMDYwXDE3MSIgKwotICAgICJcMDYxXDMwMVwwNjJcMDI2XDA2NVwxNzVcMDY2XDAwNlwwNjdcMDYyXDA3MFwwNjFcMDcxIiArCi0gICAgIlwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjUiICsKLSAgICAiXDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNiIgKwotICAgICJcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMTVcMTE1IiArCi0gICAgIlwxMTZcMDM1XDExN1wwNjRcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMjBcMDAzXDEzNyIgKwotICAgICJcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDE2XDMwN1wwMTdcMzA2XDAyMVwzMTBcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAxNlwwMDNcMTM3XDAwNSIgKwotICAgICJcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTNcMzEzXDAyMVwzMTRcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDA2XDAwNVwzMjNcMDEwXDMyN1wwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDZcMDA0XDM3MVwwMDVcMzcyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxMTYiICsKLSAgICAiXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyMyIgKwotICAgICJcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzIiArCi0gICAgIlwwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMzc3XDA3MVwxNjBcMDcyXDA1N1wwNzMiICsKLSAgICAiXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NCIgKwotICAgICJcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwIiArCi0gICAgIlwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwxMTZcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMSIgKwotICAgICJcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3IiArCi0gICAgIlwwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwzNzZcMDcxXDE2MFwwNzIiICsKLSAgICAiXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNCIgKwotICAgICJcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3IiArCi0gICAgIlwxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjJcMDI3XDEyM1wwNzIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTQyXDAwMyIgKwotICAgICJcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzIiArCi0gICAgIlwwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDIiICsKLSAgICAiXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNCIgKwotICAgICJcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XHUwMTBiXDA2MFwxNzFcMDcxXDE2MFwwNzIiICsKLSAgICAiXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNCIgKwotICAgICJcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3IiArCi0gICAgIlwxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjBcMTQ3XDEyMVwxNDUiICsKLSAgICAiXDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwxNDJcMDAzXDEzN1wwMDVcMDQxXDAwNiIgKwotICAgICJcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxIiArCi0gICAgIlwwMzJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDQiICsKLSAgICAiXDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MiIgKwotICAgICJcMDU1XDAzMlwwNTZcdTAxMGFcMDYwXDE3MVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzQiICsKLSAgICAiXDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNiIgKwotICAgICJcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExIiArCi0gICAgIlwxMDRcMTEyXDEzMFwxMTNcMTIwXDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDE0MlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMCIgKwotICAgICJcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzdcMTYxIiArCi0gICAgIlwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDYiICsKLSAgICAiXDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XHUwMTA5IiArCi0gICAgIlwwNjBcMTcxXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzYiICsKLSAgICAiXDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MSIgKwotICAgICJcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzIiArCi0gICAgIlwxMjBcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwxNDIiICsKLSAgICAiXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyMyIgKwotICAgICJcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzIiArCi0gICAgIlwwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTIiICsKLSAgICAiXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcdTAxMDRcMDYwXDE3MVwwNzFcMTYwIiArCi0gICAgIlwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDAiICsKLSAgICAiXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3MyIgKwotICAgICJcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDEyMFwxNDdcMTIxIiArCi0gICAgIlwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNDAiICsKLSAgICAiXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyMyIgKwotICAgICJcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzIiArCi0gICAgIlwwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTIiICsKLSAgICAiXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNjBcdTAxMDhcMDcxXDE2MFwwNzJcMDU3IiArCi0gICAgIlwwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDEiICsKLSAgICAiXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMSIgKwotICAgICJcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjBcMTQ3XDEyMVwxNDVcMTIyIiArCi0gICAgIlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwxNDBcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTEiICsKLSAgICAiXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMiIgKwotICAgICJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzIiArCi0gICAgIlwwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTUiICsKLSAgICAiXDAzMlwwNjBcdTAxMDdcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyIiArCi0gICAgIlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDQiICsKLSAgICAiXDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMCIgKwotICAgICJcMTEzXDEyMFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDA0XDAwNVx1MDExMFwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAxNlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAyMSIgKwotICAgICJcMjUzXDAyMlx1MDExMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTcwXDAwM1wxMzciICsKLSAgICAiXDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNSIgKwotICAgICJcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzZcMTU3XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzIiArCi0gICAgIlwwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTIiICsKLSAgICAiXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1N1wxMjZcMDYwXDE3MSIgKwotICAgICJcMDYxXHUwMTE0XDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwXDA2MVwwNzEiICsKLSAgICAiXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NSIgKwotICAgICJcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2IiArCi0gICAgIlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDExNVwxMTUiICsKLSAgICAiXDExNlwwMzVcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTcyXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExIiArCi0gICAgIlwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzEiICsKLSAgICAiXHUwMTE2XDAzMlwxMzVcMDM2XDE1N1wwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2IiArCi0gICAgIlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTMiICsKLSAgICAiXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYxXHUwMTE3IiArCi0gICAgIlwwNjJcMDI2XDA2NVwxNzVcMDY2XDAwNlwwNjdcMDYyXDA3MFwwNjFcMDcxXDE2MFwwNzIiICsKLSAgICAiXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNCIgKwotICAgICJcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3IiArCi0gICAgIlwxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMTVcMTE1XDExNlwwMzUiICsKLSAgICAiXDExN1wwNjRcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTcwIiArCi0gICAgIlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjMiICsKLSAgICAiXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzZcMTU3XDAzN1wxNjFcMDQwXDE2NyIgKwotICAgICJcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3IiArCi0gICAgIlwwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1N1wxMjYiICsKLSAgICAiXDA2MFwxNzFcMDYxXHUwMTFiXDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwIiArCi0gICAgIlwwNjFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjAiICsKLSAgICAiXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNSIgKwotICAgICJcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwIiArCi0gICAgIlwxMTVcMTE1XDExNlwwMzVcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjMiICsKLSAgICAiXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDRcMTI0IiArCi0gICAgIlwyMTJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDE1MFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzMiICsKLSAgICAiXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzdcMTYxXDA0MCIgKwotICAgICJcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3IiArCi0gICAgIlwwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTciICsKLSAgICAiXDEyNlwwNjBcMTcxXDA2MlwwMjZcMDY3XHUwMTNjXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzIiArCi0gICAgIlwwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDIiICsKLSAgICAiXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MiIgKwotICAgICJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzIiArCi0gICAgIlwwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDE1MFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMCIgKwotICAgICJcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzdcMTYxIiArCi0gICAgIlwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDYiICsKLSAgICAiXDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0MyIgKwotICAgICJcMDU3XDEyNlwwNjBcMTcxXDA2MlwwMjZcMDY3XHUwMTNiXDA3MVwxNjBcMDcyXDA1N1wwNzMiICsKLSAgICAiXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NCIgKwotICAgICJcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwIiArCi0gICAgIlwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjciICsKLSAgICAiXDEyM1wwNzJcMDAxXDAwMVwwMDBcMTUwXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwNyIgKwotICAgICJcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1IiArCi0gICAgIlwwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDUiICsKLSAgICAiXDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMiIgKwotICAgICJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYyXDAyNlwwNjdcdTAxM2FcMDcxXDE2MFwwNzIiICsKLSAgICAiXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNCIgKwotICAgICJcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3IiArCi0gICAgIlwxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjBcMTQ3XDEyMVwxNDUiICsKLSAgICAiXDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDA0NlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDciICsKLSAgICAiXDE1MFwwMjBcdTAxNDNcMDIxXHUwMTQ2XDAzMFx1MDE0MFwwNTFcdTAxNDJcMDcyXHUwMTQxXDEwM1wwMjQiICsKLSAgICAiXDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMiIgKwotICAgICJcMTMwXDExM1wxMjBcMDAxXDAwMVwwMDBcMDA0XDAyNFx1MDE0Y1wwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDIwXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDE1IiArCi0gICAgIlx1MDE1MFwwMTdcdTAxNTFcMDIxXDMxMFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDIwXDAwM1wxMzdcMDA1XDA0MVwwMDYiICsKLSAgICAiXDExMVwwMDdcMTUwXDAxMVx1MDE1NFwwMTRcdTAxNTVcMDIxXHUwMTU2XDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwNFwxMjRcMjEyXDAwMVwwMDFcMDAwXDAyMFwwMDNcMTM3XDAwNVwwNDEiICsKLSAgICAiXDAwNlwxMTFcMDA3XDE1MFwwMTJcdTAxNWNcMDE0XHUwMTVkXDAyMVx1MDE1NlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMTZcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTMiICsKLSAgICAiXHUwMTYwXDAyMVwzMTRcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDIwXDAwM1wxMzdcMDA1XDA0MSIgKwotICAgICJcMDA2XDExMVwwMDdcMTUwXDAyMVwyNTNcMDIyXDI2MFwwMzVcdTAxNjdcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwxNzBcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MCIgKwotICAgICJcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM2IiArCi0gICAgIlwxNTdcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjMiICsKLSAgICAiXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyXDA1NSIgKwotICAgICJcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxXDA2MVx1MDE2OVwwNjJcMDI2XDA2NVwxNzUiICsKLSAgICAiXDA2NlwwMDZcMDY3XDA2MlwwNzBcMDYxXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NCIgKwotICAgICJcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2IiArCi0gICAgIlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTEiICsKLSAgICAiXDEwNFwxMTJcMTMwXDExM1wxMjBcMTE1XDExNVwxMTZcMDM1XDExN1wwNjRcMTIwXDE0NyIgKwotICAgICJcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAyMFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAyMCIgKwotICAgICJcdTAxNzBcMDIxXHUwMTQ2XDA1MFx1MDE2ZlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMTQ2XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3MyIgKwotICAgICJcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwIiArCi0gICAgIlwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjciICsKLSAgICAiXDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1NyIgKwotICAgICJcMTI2XDA2MFwxNzFcMDYyXHUwMTc5XDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTQiICsKLSAgICAiXDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwMyIgKwotICAgICJcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0IiArCi0gICAgIlwxMTJcMTMwXDExM1wxMjBcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMTQ0XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3MyIgKwotICAgICJcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwIiArCi0gICAgIlwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjciICsKLSAgICAiXDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1NyIgKwotICAgICJcdTAxNzhcMDYwXDE3MVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTIiICsKLSAgICAiXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNCIgKwotICAgICJcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwIiArCi0gICAgIlwxMTNcMTIwXDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDE0NFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMiIgKwotICAgICJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzdcMTYxXDA0MFwxNjdcMDQxIiArCi0gICAgIlwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTMiICsKLSAgICAiXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTdcdTAxNzdcMDYwIiArCi0gICAgIlwxNzFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjAiICsKLSAgICAiXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNSIgKwotICAgICJcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwIiArCi0gICAgIlwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDZcMTExXHUwMTdmXDExM1x1MDE4MFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDA0NlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAyMFx1MDE0M1wwMjEiICsKLSAgICAiXHUwMTQ2XDAzMFx1MDE0MFwwNTFcdTAxODhcMDcyXHUwMTQxXDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1IiArCi0gICAgIlwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMjBcMDAzXDEzNyIgKwotICAgICJcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDIwXHUwMTcwXDAyMVx1MDE0NlwwNTBcdTAxOGJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE1NFwwMDNcMTM3XDAwNSIgKwotICAgICJcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwIiArCi0gICAgIlwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDMiICsKLSAgICAiXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NiIgKwotICAgICJcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxXDA2MlwwMjZcMDY1IiArCi0gICAgIlx1MDE5MVwwNjdcMDYyXDA3MFwwNjFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNCIgKwotICAgICJcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzIiArCi0gICAgIlwwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDQiICsKLSAgICAiXDExMlwxMzBcMTEzXDEyMFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIiIgfSk7Ci0KLSAgLyoqIEFjY2VzcyB0byA8Y29kZT5yZWR1Y2VfZ290bzwvY29kZT4gdGFibGUuICovCi0gIHB1YmxpYyBzaG9ydFtdW10gcmVkdWNlX3RhYmxlKCkge3JldHVybiBfcmVkdWNlX3RhYmxlO30KLQotICAvKiogSW5zdGFuY2Ugb2YgYWN0aW9uIGVuY2Fwc3VsYXRpb24gY2xhc3MuICovCi0gIHByb3RlY3RlZCBDVVAkWFBhdGhDdXAkYWN0aW9ucyBhY3Rpb25fb2JqOwotCi0gIC8qKiBBY3Rpb24gZW5jYXBzdWxhdGlvbiBvYmplY3QgaW5pdGlhbGl6ZXIuICovCi0gIHByb3RlY3RlZCB2b2lkIGluaXRfYWN0aW9ucygpCi0gICAgewotICAgICAgYWN0aW9uX29iaiA9IG5ldyBDVVAkWFBhdGhDdXAkYWN0aW9ucyh0aGlzKTsKLSAgICB9Ci0KLSAgLyoqIEludm9rZSBhIHVzZXIgc3VwcGxpZWQgcGFyc2UgYWN0aW9uLiAqLwotICBwdWJsaWMgamF2YV9jdXAucnVudGltZS5TeW1ib2wgZG9fYWN0aW9uKAotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGFjdF9udW0sCi0gICAgamF2YV9jdXAucnVudGltZS5scl9wYXJzZXIgcGFyc2VyLAotICAgIGphdmEudXRpbC5TdGFjayAgICAgICAgICAgIHN0YWNrLAotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHRvcCkKLSAgICB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgotICB7Ci0gICAgLyogY2FsbCBjb2RlIGluIGdlbmVyYXRlZCBjbGFzcyAqLwotICAgIHJldHVybiBhY3Rpb25fb2JqLkNVUCRYUGF0aEN1cCRkb19hY3Rpb24oYWN0X251bSwgcGFyc2VyLCBzdGFjaywgdG9wKTsKLSAgfQotCi0gIC8qKiBJbmRpY2F0ZXMgc3RhcnQgc3RhdGUuICovCi0gIHB1YmxpYyBpbnQgc3RhcnRfc3RhdGUoKSB7cmV0dXJuIDA7fQotICAvKiogSW5kaWNhdGVzIHN0YXJ0IHByb2R1Y3Rpb24uICovCi0gIHB1YmxpYyBpbnQgc3RhcnRfcHJvZHVjdGlvbigpIHtyZXR1cm4gMTt9Ci0KLSAgLyoqIDxjb2RlPkVPRjwvY29kZT4gU3ltYm9sIGluZGV4LiAqLwotICBwdWJsaWMgaW50IEVPRl9zeW0oKSB7cmV0dXJuIDA7fQotCi0gIC8qKiA8Y29kZT5lcnJvcjwvY29kZT4gU3ltYm9sIGluZGV4LiAqLwotICBwdWJsaWMgaW50IGVycm9yX3N5bSgpIHtyZXR1cm4gMTt9Ci0KLQotCi0KLXB1YmxpYyB2b2lkIHJlcG9ydF9lcnJvcihTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGluZm8pIHsKLQlTdHJpbmcgZXJyID0gIlBhcnNlciBlcnJvcjogIjsKLQotCVhQYXRoRmxleCBsZXhlciA9IChYUGF0aEZsZXgpIGdldFNjYW5uZXIoKTsKLQotCWVyciArPSAibGluZSAiICsgbGV4ZXIubGluZW5vKCk7Ci0JZXJyICs9ICIgY29sICIgKyBsZXhlci5jb2xubygpOwotCWVyciArPSAiOiAiICsgbGV4ZXIueXl0ZXh0KCk7Ci0KLQkKLQl0aHJvdyBuZXcgQ3VwRXJyb3IoZXJyKTsKLX0KLQotfQotCi0vKiogQ3VwIGdlbmVyYXRlZCBjbGFzcyB0byBlbmNhcHN1bGF0ZSB1c2VyIHN1cHBsaWVkIGFjdGlvbiBjb2RlLiovCi1jbGFzcyBDVVAkWFBhdGhDdXAkYWN0aW9ucyB7Ci0gIHByaXZhdGUgZmluYWwgWFBhdGhDdXAgcGFyc2VyOwotCi0gIC8qKiBDb25zdHJ1Y3RvciAqLwotICBDVVAkWFBhdGhDdXAkYWN0aW9ucyhYUGF0aEN1cCBwYXJzZXIpIHsKLSAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjsKLSAgfQotCi0gIC8qKiBNZXRob2Qgd2l0aCB0aGUgYWN0dWFsIGdlbmVyYXRlZCBhY3Rpb24gY29kZS4gKi8KLSAgcHVibGljIGZpbmFsIGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sIENVUCRYUGF0aEN1cCRkb19hY3Rpb24oCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJGFjdF9udW0sCi0gICAgamF2YV9jdXAucnVudGltZS5scl9wYXJzZXIgQ1VQJFhQYXRoQ3VwJHBhcnNlciwKLSAgICBqYXZhLnV0aWwuU3RhY2sgICAgICAgICAgICBDVVAkWFBhdGhDdXAkc3RhY2ssCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHRvcCkKLSAgICB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgotICAgIHsKLSAgICAgIC8qIFN5bWJvbCBvYmplY3QgZm9yIHJldHVybiBmcm9tIGFjdGlvbnMgKi8KLSAgICAgIGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgIC8qIHNlbGVjdCB0aGUgYWN0aW9uIGJhc2VkIG9uIHRoZSBhY3Rpb24gbnVtYmVyICovCi0gICAgICBzd2l0Y2ggKENVUCRYUGF0aEN1cCRhY3RfbnVtKQotICAgICAgICB7Ci0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjcwOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gTU9EIE5UJDAgU1RBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0gICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSBSRVNVTFQgZnJvbSBOVCQwCi0gICAgICAgICAgICAgIGlmICggKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZSAhPSBudWxsICkKLSAgICAgICAgICAgICAgICBSRVNVTFQgPSAoU3RyaW5nKSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIioiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2OTogLy8gTlQkMCA6Oj0gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE9iamVjdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0gUkVTVUxUID0gbmV3IFN0cmluZygibW9kIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDgzLypOVCQwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY4OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gSURJViAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImlkaXYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2NzogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IERJViAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImRpdiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY2OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gT1IgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvciIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY1OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gQU5EIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYW5kIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjQ6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBFTFNFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZWxzZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjYzOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gVEhFTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInRoZW4iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2MjogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IEVWRVJZIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZXZlcnkiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2MTogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IFNPTUUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzb21lIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjA6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBTQVRJU0ZJRVMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzYXRpc2ZpZXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI1OTogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IFJFVFVSTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInJldHVybiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU4OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gSU4gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU3OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gRk9SIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTY6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBJUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImlzIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTU6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBDQVNUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiY2FzdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU0OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gQ0FTVEFCTEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0YWJsZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjUzOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gVFJFQVQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhcyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjUyOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gT0YgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjUxOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gSU5TVEFOQ0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnN0YW5jZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjUwOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gRVhDRVBUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZXhjZXB0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDk6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBJTlRFUlNFQ1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnRlcnNlY3QiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0ODogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IFVOSU9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidW5pb24iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0NzogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IEFOQ0VTVE9SX09SX1NFTEYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmNlc3Rvci1vci1zZWxmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDY6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBQUkVDRURJTkcgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0NTogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IFBSRUNFRElOR19TSUJMSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUICA9IG5ldyBTdHJpbmcoInByZWNlZGluZy1zaWJsaW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDQ6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBBTkNFU1RPUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDM6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBQQVJFTlQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwYXJlbnQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0MjogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IE5BTUVTUEFDRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm5hbWVzcGFjZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQxOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gRk9MTE9XSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDA6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBGT0xMT1dJTkdfU0lCTElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvbGxvd2luZy1zaWJsaW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzk6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBERVNDRU5EQU5UX09SX1NFTEYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50LW9mLXNlbGYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzODogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IFNFTEYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzZWxmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzc6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBERVNDRU5EQU5UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGVzY2VuZGFudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM2OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gQ0hJTEQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjaGlsZCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM1OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gVE8gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0byIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM0OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gTkNOQU1FIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzMzogLy8gTkNOYW1lIDo6PSBTVEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiKiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzMjogLy8gTkNOYW1lIDo6PSBNT0QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJtb2QiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzE6IC8vIE5DTmFtZSA6Oj0gVFlQRVNXSVRDSCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInR5cGVzd2l0Y2giKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzA6IC8vIE5DTmFtZSA6Oj0gVEVYVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInRleHQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjk6IC8vIE5DTmFtZSA6Oj0gU0NIRU1BX0VMRU1FTlQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzY2hlbWEtZWxlbWVudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyODogLy8gTkNOYW1lIDo6PSBTQ0hFTUFfQVRUUklCVVRFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygic2NoZW1hLWF0dHJpYnV0ZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyNzogLy8gTkNOYW1lIDo6PSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyNjogLy8gTkNOYW1lIDo6PSBOT0RFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygibm9kZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyNTogLy8gTkNOYW1lIDo6PSBJVEVNIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaXRlbSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyNDogLy8gTkNOYW1lIDo6PSBFTVBUWV9TRVFVRU5DRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImVtcHR5LXNlcXVlbmNlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjIzOiAvLyBOQ05hbWUgOjo9IEVMRU1FTlQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlbGVtZW50Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjIyOiAvLyBOQ05hbWUgOjo9IERPQ1VNRU5UX05PREUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkb2N1bWVudC1ub2RlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjIxOiAvLyBOQ05hbWUgOjo9IENPTU1FTlQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjb21tZW50Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjIwOiAvLyBOQ05hbWUgOjo9IElESVYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpZGl2Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE5OiAvLyBOQ05hbWUgOjo9IERJViAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImRpdiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxODogLy8gTkNOYW1lIDo6PSBPUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE3OiAvLyBOQ05hbWUgOjo9IEFORCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuZCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxNjogLy8gTkNOYW1lIDo6PSBFTFNFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZWxzZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxNTogLy8gTkNOYW1lIDo6PSBUSEVOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidGhlbiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxNDogLy8gTkNOYW1lIDo6PSBJRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImlmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjEzOiAvLyBOQ05hbWUgOjo9IEVWRVJZIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZXZlcnkiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTI6IC8vIE5DTmFtZSA6Oj0gU09NRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNvbWUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTE6IC8vIE5DTmFtZSA6Oj0gU0FUSVNGSUVTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygic2F0aXNmaWVzIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjEwOiAvLyBOQ05hbWUgOjo9IFJFVFVSTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInJldHVybiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwOTogLy8gTkNOYW1lIDo6PSBJTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImluIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjA4OiAvLyBOQ05hbWUgOjo9IEZPUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvciIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwNzogLy8gTkNOYW1lIDo6PSBJUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImlzIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjA2OiAvLyBOQ05hbWUgOjo9IENBU1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjA1OiAvLyBOQ05hbWUgOjo9IENBU1RBQkxFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiY2FzdGFibGUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDQ6IC8vIE5DTmFtZSA6Oj0gVFJFQVQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhcyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwMzogLy8gTkNOYW1lIDo6PSBPRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9mIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjAyOiAvLyBOQ05hbWUgOjo9IElOU1RBTkNFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaW5zdGFuY2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDE6IC8vIE5DTmFtZSA6Oj0gRVhDRVBUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZXhjZXB0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjAwOiAvLyBOQ05hbWUgOjo9IElOVEVSU0VDVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImludGVyc2VjdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5OTogLy8gTkNOYW1lIDo6PSBVTklPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInVuaW9uIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk4OiAvLyBOQ05hbWUgOjo9IEFOQ0VTVE9SX09SX1NFTEYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmNlc3Rvci1vci1zZWxmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk3OiAvLyBOQ05hbWUgOjo9IFBSRUNFRElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInByZWNlZGluZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5NjogLy8gTkNOYW1lIDo6PSBQUkVDRURJTkdfU0lCTElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCAgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmctc2libGluZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5NTogLy8gTkNOYW1lIDo6PSBBTkNFU1RPUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk0OiAvLyBOQ05hbWUgOjo9IFBBUkVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInBhcmVudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5MzogLy8gTkNOYW1lIDo6PSBOQU1FU1BBQ0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJuYW1lc3BhY2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTI6IC8vIE5DTmFtZSA6Oj0gRk9MTE9XSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTkxOiAvLyBOQ05hbWUgOjo9IEZPTExPV0lOR19TSUJMSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nLXNpYmxpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTA6IC8vIE5DTmFtZSA6Oj0gREVTQ0VOREFOVF9PUl9TRUxGIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGVzY2VuZGFudC1vZi1zZWxmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg5OiAvLyBOQ05hbWUgOjo9IFNFTEYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzZWxmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg4OiAvLyBOQ05hbWUgOjo9IEFUVFJJQlVURSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImF0dHJpYnV0ZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4NzogLy8gTkNOYW1lIDo6PSBERVNDRU5EQU5UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGVzY2VuZGFudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4NjogLy8gTkNOYW1lIDo6PSBDSElMRCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNoaWxkIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg1OiAvLyBOQ05hbWUgOjo9IFRPIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidG8iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODQ6IC8vIE5DTmFtZSA6Oj0gTkNOQU1FIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODM6IC8vIFVucXVhbGlmaWVkTG9jYWxQYXJ0IDo6PSBVbnF1YWxpZmllZE5DTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUvKlVucXVhbGlmaWVkTG9jYWxQYXJ0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODI6IC8vIExvY2FsUGFydCA6Oj0gTkNOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qTG9jYWxQYXJ0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODE6IC8vIFByZWZpeCA6Oj0gTkNOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qUHJlZml4Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODA6IC8vIFFOYW1lIDo6PSBQcmVmaXggQ09MT04gTG9jYWxQYXJ0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJU3RyaW5nIHAgPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbCA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBRTmFtZShwLGwpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxNS8qUU5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3OTogLy8gUU5hbWUgOjo9IFVucXVhbGlmaWVkTG9jYWxQYXJ0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIGwgPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUU5hbWUobCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE1LypRTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc4OiAvLyBWYXJOYW1lIDo6PSBRTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE2LypWYXJOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzc6IC8vIFN0cmluZ0xpdGVyYWwgOjo9IFNUUklORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIHMgPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nTGl0ZXJhbChzKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNi8qU3RyaW5nTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc2OiAvLyBEb3VibGVMaXRlcmFsIDo6PSBET1VCTEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERvdWJsZUxpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IGRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBkcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCURvdWJsZSBkID0gKERvdWJsZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IERvdWJsZUxpdGVyYWwoZC5kb3VibGVWYWx1ZSgpKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjQvKkRvdWJsZUxpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3NTogLy8gRGVjaW1hbExpdGVyYWwgOjo9IERFQ0lNQUwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERlY2ltYWxMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBkbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlCaWdEZWNpbWFsIGQgPSAoQmlnRGVjaW1hbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IERlY2ltYWxMaXRlcmFsKGQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2Mi8qRGVjaW1hbExpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3NDogLy8gSW50ZWdlckxpdGVyYWwgOjo9IElOVEVHRVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXJMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBpbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgaXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlCaWdJbnRlZ2VyIGkgPSAoQmlnSW50ZWdlcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXJMaXRlcmFsKGkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2My8qSW50ZWdlckxpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3MzogLy8gVHlwZU5hbWUgOjo9IFFOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woOS8qVHlwZU5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3MjogLy8gRWxlbWVudE5hbWUgOjo9IFFOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTAvKkVsZW1lbnROYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzE6IC8vIEF0dHJpYnV0ZU5hbWUgOjo9IFFOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTMvKkF0dHJpYnV0ZU5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3MDogLy8gRWxlbWVudERlY2xhcmF0aW9uIDo6PSBFbGVtZW50TmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcvKkVsZW1lbnREZWNsYXJhdGlvbiovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY5OiAvLyBTY2hlbWFFbGVtZW50VGVzdCA6Oj0gU0NIRU1BX0VMRU1FTlQgTFBBUiBFbGVtZW50RGVjbGFyYXRpb24gUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2NoZW1hRWxlbVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVFOYW1lIGUgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTY2hlbWFFbGVtVGVzdChlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzMvKlNjaGVtYUVsZW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjg6IC8vIEVsZW1lbnROYW1lT3JXaWxkY2FyZCA6Oj0gU1RBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG51bGw7IC8qIFhYWCAqLyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg4LypFbGVtZW50TmFtZU9yV2lsZGNhcmQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2NzogLy8gRWxlbWVudE5hbWVPcldpbGRjYXJkIDo6PSBFbGVtZW50TmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIGUgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IGU7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDgvKkVsZW1lbnROYW1lT3JXaWxkY2FyZCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY2OiAvLyBFbGVtZW50VGVzdCA6Oj0gRUxFTUVOVCBMUEFSIEVsZW1lbnROYW1lT3JXaWxkY2FyZCBDT01NQSBUeXBlTmFtZSBRVUVTVElPTk1BUksgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC00KSkucmlnaHQ7Ci0JCVFOYW1lIGUgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTQpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIHQgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJCi0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoZSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdChlLHdpbGQsdCx0cnVlKTsKLQkJCSAgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzEvKkVsZW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTYpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjU6IC8vIEVsZW1lbnRUZXN0IDo6PSBFTEVNRU5UIExQQVIgRWxlbWVudE5hbWVPcldpbGRjYXJkIENPTU1BIFR5cGVOYW1lIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnJpZ2h0OwotCQlRTmFtZSBlID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkudmFsdWU7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlRTmFtZSB0ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCQotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGUgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoZSx3aWxkLHQpOwotCQkJICAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3MS8qRWxlbWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2NDogLy8gRWxlbWVudFRlc3QgOjo9IEVMRU1FTlQgTFBBUiBFbGVtZW50TmFtZU9yV2lsZGNhcmQgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVFOYW1lIGUgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJCi0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoZSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdChlLHdpbGQpOwotCQkJICAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3MS8qRWxlbWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2MzogLy8gRWxlbWVudFRlc3QgOjo9IEVMRU1FTlQgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50VGVzdCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEVsZW1lbnRUZXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcxLypFbGVtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTYyOiAvLyBBdHRyaWJ1dGVEZWNsYXJhdGlvbiA6Oj0gQXR0cmlidXRlTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDExLypBdHRyaWJ1dGVEZWNsYXJhdGlvbiovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTYxOiAvLyBTY2hlbWFBdHRyaWJ1dGVUZXN0IDo6PSBTQ0hFTUFfQVRUUklCVVRFIExQQVIgQXR0cmlidXRlRGVjbGFyYXRpb24gUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2NoZW1hQXR0clRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVFOYW1lIGEgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTY2hlbWFBdHRyVGVzdChhKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzIvKlNjaGVtYUF0dHJpYnV0ZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2MDogLy8gQXR0cmliTmFtZU9yV2lsZGNhcmQgOjo9IFNUQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBudWxsOyAvKiBYWFggKi8gCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTIvKkF0dHJpYk5hbWVPcldpbGRjYXJkKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTk6IC8vIEF0dHJpYk5hbWVPcldpbGRjYXJkIDo6PSBBdHRyaWJ1dGVOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgYSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gYTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTIvKkF0dHJpYk5hbWVPcldpbGRjYXJkKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTg6IC8vIEF0dHJpYnV0ZVRlc3QgOjo9IEFUVFJJQlVURSBMUEFSIEF0dHJpYk5hbWVPcldpbGRjYXJkIENPTU1BIFR5cGVOYW1lIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF0dHJpYnV0ZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkucmlnaHQ7Ci0JCVFOYW1lIGEgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVFOYW1lIHQgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJCi0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoYSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBBdHRyaWJ1dGVUZXN0KGEsd2lsZCx0KTsKLQkJCSAgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjkvKkF0dHJpYnV0ZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1NzogLy8gQXR0cmlidXRlVGVzdCA6Oj0gQVRUUklCVVRFIExQQVIgQXR0cmliTmFtZU9yV2lsZGNhcmQgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQXR0cmlidXRlVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgYSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihhID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEF0dHJpYnV0ZVRlc3QoYSx3aWxkKTsKLQkJCSAgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjkvKkF0dHJpYnV0ZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1NjogLy8gQXR0cmlidXRlVGVzdCA6Oj0gQVRUUklCVVRFIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQXR0cmlidXRlVGVzdCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEF0dHJpYnV0ZVRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjkvKkF0dHJpYnV0ZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1NTogLy8gUElUZXN0IDo6PSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIExQQVIgU3RyaW5nTGl0ZXJhbCBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQSVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVN0cmluZ0xpdGVyYWwgcyA9IChTdHJpbmdMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUElUZXN0KHMuc3RyaW5nKCkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2OC8qUElUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTQ6IC8vIFBJVGVzdCA6Oj0gUFJPQ0VTU0lOR19JTlNUUlVDVElPTiBMUEFSIE5DTmFtZSBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQSVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFBJVGVzdChuKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjgvKlBJVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTUzOiAvLyBQSVRlc3QgOjo9IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQSVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBQSVRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjgvKlBJVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTUyOiAvLyBDb21tZW50VGVzdCA6Oj0gQ09NTUVOVCBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgQ29tbWVudFRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjcvKkNvbW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTE6IC8vIFRleHRUZXN0IDo6PSBURVhUIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVGV4dFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBUZXh0VGVzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2Ni8qVGV4dFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1MDogLy8gRG9jdW1lbnRUZXN0IDo6PSBET0NVTUVOVF9OT0RFIExQQVIgU2NoZW1hRWxlbWVudFRlc3QgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG9jdW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlTY2hlbWFFbGVtVGVzdCBlID0gKFNjaGVtYUVsZW1UZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRG9jdW1lbnRUZXN0KERvY3VtZW50VGVzdC5TQ0hFTUFfRUxFTUVOVCxlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjUvKkRvY3VtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ5OiAvLyBEb2N1bWVudFRlc3QgOjo9IERPQ1VNRU5UX05PREUgTFBBUiBFbGVtZW50VGVzdCBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEb2N1bWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUVsZW1lbnRUZXN0IGUgPSAoRWxlbWVudFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBEb2N1bWVudFRlc3QoRG9jdW1lbnRUZXN0LkVMRU1FTlQsZSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY1LypEb2N1bWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0ODogLy8gRG9jdW1lbnRUZXN0IDo6PSBET0NVTUVOVF9OT0RFIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG9jdW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgRG9jdW1lbnRUZXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY1LypEb2N1bWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0NzogLy8gQW55S2luZFRlc3QgOjo9IE5PREUgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBBbnlLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEFueUtpbmRUZXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcwLypBbnlLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ2OiAvLyBLaW5kVGVzdCA6Oj0gQW55S2luZFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlBbnlLaW5kVGVzdCBuID0gKEFueUtpbmRUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0NTogLy8gS2luZFRlc3QgOjo9IFRleHRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJVGV4dFRlc3QgbiA9IChUZXh0VGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDQ6IC8vIEtpbmRUZXN0IDo6PSBDb21tZW50VGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNvbW1lbnRUZXN0IG4gPSAoQ29tbWVudFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQzOiAvLyBLaW5kVGVzdCA6Oj0gUElUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUElUZXN0IG4gPSAoUElUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0MjogLy8gS2luZFRlc3QgOjo9IFNjaGVtYUF0dHJpYnV0ZVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTY2hlbWFBdHRyVGVzdCBuID0gKFNjaGVtYUF0dHJUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0MTogLy8gS2luZFRlc3QgOjo9IFNjaGVtYUVsZW1lbnRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU2NoZW1hRWxlbVRlc3QgbiA9IChTY2hlbWFFbGVtVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDA6IC8vIEtpbmRUZXN0IDo6PSBBdHRyaWJ1dGVUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQXR0cmlidXRlVGVzdCBuID0gKEF0dHJpYnV0ZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM5OiAvLyBLaW5kVGVzdCA6Oj0gRWxlbWVudFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFbGVtZW50VGVzdCBuID0gKEVsZW1lbnRUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzODogLy8gS2luZFRlc3QgOjo9IERvY3VtZW50VGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCURvY3VtZW50VGVzdCBuID0gKERvY3VtZW50VGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzc6IC8vIEF0b21pY1R5cGUgOjo9IFFOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTQvKkF0b21pY1R5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzNjogLy8gSXRlbVR5cGUgOjo9IElURU0gTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJdGVtVHlwZSBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEl0ZW1UeXBlKEl0ZW1UeXBlLklURU0sbnVsbCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIyLypJdGVtVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM1OiAvLyBJdGVtVHlwZSA6Oj0gS2luZFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEl0ZW1UeXBlIFJFU1VMVCA9IG51bGw7Ci0JCWludCBrbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQga3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlLaW5kVGVzdCBrID0gKEtpbmRUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSXRlbVR5cGUoSXRlbVR5cGUuS0lORFRFU1Qsayk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIyLypJdGVtVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM0OiAvLyBJdGVtVHlwZSA6Oj0gQXRvbWljVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSXRlbVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJaW50IHFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBxcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIHEgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBJdGVtVHlwZShJdGVtVHlwZS5RTkFNRSxxKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjIvKkl0ZW1UeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzM6IC8vIE9jY3VycmVuY2VJbmRpY2F0b3IgOjo9IFBMVVMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFNlcXVlbmNlVHlwZS5QTFVTKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTgvKk9jY3VycmVuY2VJbmRpY2F0b3IqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzMjogLy8gT2NjdXJyZW5jZUluZGljYXRvciA6Oj0gU1RBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoU2VxdWVuY2VUeXBlLlNUQVIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOC8qT2NjdXJyZW5jZUluZGljYXRvciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTMxOiAvLyBPY2N1cnJlbmNlSW5kaWNhdG9yIDo6PSBRVUVTVElPTk1BUksgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFNlcXVlbmNlVHlwZS5RVUVTVElPTik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE4LypPY2N1cnJlbmNlSW5kaWNhdG9yKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzA6IC8vIFNlcXVlbmNlVHlwZSA6Oj0gRU1QVFlfU0VRVUVOQ0UgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTZXF1ZW5jZVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBTZXF1ZW5jZVR5cGUoU2VxdWVuY2VUeXBlLkVNUFRZLCBudWxsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzkvKlNlcXVlbmNlVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTI5OiAvLyBTZXF1ZW5jZVR5cGUgOjo9IEl0ZW1UeXBlIE9jY3VycmVuY2VJbmRpY2F0b3IgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNlcXVlbmNlVHlwZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJSXRlbVR5cGUgdCA9IChJdGVtVHlwZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgaWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGlyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJSW50ZWdlciBpID0gKEludGVnZXIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTZXF1ZW5jZVR5cGUoaS5pbnRWYWx1ZSgpLCB0KTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzkvKlNlcXVlbmNlVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTI4OiAvLyBTZXF1ZW5jZVR5cGUgOjo9IEl0ZW1UeXBlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTZXF1ZW5jZVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUl0ZW1UeXBlIHQgPSAoSXRlbVR5cGUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTZXF1ZW5jZVR5cGUoU2VxdWVuY2VUeXBlLk5PTkUsIHQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzOS8qU2VxdWVuY2VUeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjc6IC8vIFNpbmdsZVR5cGUgOjo9IEF0b21pY1R5cGUgUVVFU1RJT05NQVJLIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTaW5nbGVUeXBlIFJFU1VMVCA9IG51bGw7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlRTmFtZSB0ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU2luZ2xlVHlwZSh0LHRydWUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzOC8qU2luZ2xlVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTI2OiAvLyBTaW5nbGVUeXBlIDo6PSBBdG9taWNUeXBlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTaW5nbGVUeXBlIFJFU1VMVCA9IG51bGw7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSB0ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU2luZ2xlVHlwZSh0KTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzgvKlNpbmdsZVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyNTogLy8gRnVuY3Rpb25DYWxsTWlkZGxlIDo6PSBGdW5jdGlvbkNhbGxNaWRkbGUgQ09NTUEgRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgY2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBjID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJICAgYy5hZGQoZSk7Ci0JCQkgICBSRVNVTFQgPSBjOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjMvKkZ1bmN0aW9uQ2FsbE1pZGRsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTI0OiAvLyBGdW5jdGlvbkNhbGxNaWRkbGUgOjo9IEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJICAgQ29sbGVjdGlvbiBjID0gbmV3IEFycmF5TGlzdCgpOwotCQkJICAgYy5hZGQoZSk7Ci0JCQkgICBSRVNVTFQgPSBjOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjMvKkZ1bmN0aW9uQ2FsbE1pZGRsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTIzOiAvLyBGdW5jdGlvbkNhbGwgOjo9IFFOYW1lIExQQVIgRnVuY3Rpb25DYWxsTWlkZGxlIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZ1bmN0aW9uQ2FsbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBhID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJCi0JCQkgICBSRVNVTFQgPSBuZXcgRnVuY3Rpb25DYWxsKG4sYSk7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2MC8qRnVuY3Rpb25DYWxsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjI6IC8vIEZ1bmN0aW9uQ2FsbCA6Oj0gUU5hbWUgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGdW5jdGlvbkNhbGwgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJCi0JCQkgICBSRVNVTFQgPSBuZXcgRnVuY3Rpb25DYWxsKG4sbmV3IEFycmF5TGlzdCgpKTsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYwLypGdW5jdGlvbkNhbGwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyMTogLy8gQ29udGV4dEl0ZW1FeHByIDo6PSBET1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENudHhJdGVtRXhwciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IENudHhJdGVtRXhwcigpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1OS8qQ29udGV4dEl0ZW1FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjA6IC8vIFBhcmVudGhlc2l6ZWRFeHByIDo6PSBMUEFSIEV4cHIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBlID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IGU7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI0LypQYXJlbnRoZXNpemVkRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTE5OiAvLyBQYXJlbnRoZXNpemVkRXhwciA6Oj0gTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgQXJyYXlMaXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI0LypQYXJlbnRoZXNpemVkRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTE4OiAvLyBWYXJSZWYgOjo9IERPTExBUiBWYXJOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBWYXJSZWYgUkVTVUxUID0gbnVsbDsKLQkJaW50IHZsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCB2cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIHYgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBWYXJSZWYodik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU4LypWYXJSZWYqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExNzogLy8gTnVtZXJpY0xpdGVyYWwgOjo9IERvdWJsZUxpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE51bWVyaWNMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlEb3VibGVMaXRlcmFsIG4gPSAoRG91YmxlTGl0ZXJhbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjEvKk51bWVyaWNMaXRlcmFsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTY6IC8vIE51bWVyaWNMaXRlcmFsIDo6PSBEZWNpbWFsTGl0ZXJhbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTnVtZXJpY0xpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCURlY2ltYWxMaXRlcmFsIG4gPSAoRGVjaW1hbExpdGVyYWwpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYxLypOdW1lcmljTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTE1OiAvLyBOdW1lcmljTGl0ZXJhbCA6Oj0gSW50ZWdlckxpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE51bWVyaWNMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlJbnRlZ2VyTGl0ZXJhbCBuID0gKEludGVnZXJMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2MS8qTnVtZXJpY0xpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExNDogLy8gTGl0ZXJhbCA6Oj0gU3RyaW5nTGl0ZXJhbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nTGl0ZXJhbCBuID0gKFN0cmluZ0xpdGVyYWwpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU3LypMaXRlcmFsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTM6IC8vIExpdGVyYWwgOjo9IE51bWVyaWNMaXRlcmFsIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlOdW1lcmljTGl0ZXJhbCBuID0gKE51bWVyaWNMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ny8qTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTEyOiAvLyBQcmltYXJ5RXhwciA6Oj0gRnVuY3Rpb25DYWxsIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQcmltYXJ5RXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRnVuY3Rpb25DYWxsIG4gPSAoRnVuY3Rpb25DYWxsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyOS8qUHJpbWFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExMTogLy8gUHJpbWFyeUV4cHIgOjo9IENvbnRleHRJdGVtRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUHJpbWFyeUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNudHhJdGVtRXhwciBuID0gKENudHhJdGVtRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjkvKlByaW1hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTA6IC8vIFByaW1hcnlFeHByIDo6PSBQYXJlbnRoZXNpemVkRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUHJpbWFyeUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gZSA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUGFyRXhwcihlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjkvKlByaW1hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDk6IC8vIFByaW1hcnlFeHByIDo6PSBWYXJSZWYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFByaW1hcnlFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlWYXJSZWYgbiA9IChWYXJSZWYpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI5LypQcmltYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTA4OiAvLyBQcmltYXJ5RXhwciA6Oj0gTGl0ZXJhbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUHJpbWFyeUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUxpdGVyYWwgbiA9IChMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyOS8qUHJpbWFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwNzogLy8gUHJlZGljYXRlIDo6PSBMQlJBQ0tFVCBFeHByIFJCUkFDS0VUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGUgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gZTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woODIvKlByZWRpY2F0ZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTA2OiAvLyBQcmVkaWNhdGVMaXN0IDo6PSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEFycmF5TGlzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNi8qUHJlZGljYXRlTGlzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwNTogLy8gUHJlZGljYXRlTGlzdCA6Oj0gUHJlZGljYXRlTGlzdCBQcmVkaWNhdGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBjcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gYyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHAgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCSAgIGMuYWRkKHApOwotCQkJICAgUkVTVUxUID0gYzsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI2LypQcmVkaWNhdGVMaXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDQ6IC8vIEZpbHRlckV4cHIgOjo9IFByaW1hcnlFeHByIFByZWRpY2F0ZUxpc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZpbHRlckV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgcGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUHJpbWFyeUV4cHIgcGUgPSAoUHJpbWFyeUV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gZSA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRmlsdGVyRXhwcihwZSwgZSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDgxLypGaWx0ZXJFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDM6IC8vIFdpbGRjYXJkIDo6PSBTVEFSIENPTE9OIE5DTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFFOYW1lKCIqIiwgbik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE3LypXaWxkY2FyZCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTAyOiAvLyBXaWxkY2FyZCA6Oj0gU1RBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBRTmFtZSgiKiIsIioiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTcvKldpbGRjYXJkKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDE6IC8vIE5hbWVUZXN0IDo6PSBXaWxkY2FyZCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTmFtZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBOYW1lVGVzdChuKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTUvKk5hbWVUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDA6IC8vIE5hbWVUZXN0IDo6PSBRTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTmFtZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBOYW1lVGVzdChuKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTUvKk5hbWVUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5OTogLy8gTm9kZVRlc3QgOjo9IE5hbWVUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOb2RlVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJTmFtZVRlc3QgbiA9IChOYW1lVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzAvKk5vZGVUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5ODogLy8gTm9kZVRlc3QgOjo9IEtpbmRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOb2RlVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJS2luZFRlc3QgbiA9IChLaW5kVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzAvKk5vZGVUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5NzogLy8gQWJicmV2UmV2ZXJzZVN0ZXAgOjo9IERPVERPVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUmV2ZXJzZVN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBSZXZlcnNlU3RlcChSZXZlcnNlU3RlcC5ET1RET1QsbnVsbCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMyLypBYmJyZXZSZXZlcnNlU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTY6IC8vIFJldmVyc2VBeGlzIDo6PSBBTkNFU1RPUl9PUl9TRUxGIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLkFOQ0VTVE9SX09SX1NFTEYpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOS8qUmV2ZXJzZUF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk1OiAvLyBSZXZlcnNlQXhpcyA6Oj0gUFJFQ0VESU5HIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLlBSRUNFRElORyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE5LypSZXZlcnNlQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTQ6IC8vIFJldmVyc2VBeGlzIDo6PSBQUkVDRURJTkdfU0lCTElORyBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5QUkVDRURJTkdfU0lCTElORyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE5LypSZXZlcnNlQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTM6IC8vIFJldmVyc2VBeGlzIDo6PSBBTkNFU1RPUiBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5BTkNFU1RPUik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE5LypSZXZlcnNlQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTI6IC8vIFJldmVyc2VBeGlzIDo6PSBQQVJFTlQgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuUEFSRU5UKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTkvKlJldmVyc2VBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5MTogLy8gUmV2ZXJzZVN0ZXAgOjo9IEFiYnJldlJldmVyc2VTdGVwIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBSZXZlcnNlU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUmV2ZXJzZVN0ZXAgbiA9IChSZXZlcnNlU3RlcCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzEvKlJldmVyc2VTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5MDogLy8gUmV2ZXJzZVN0ZXAgOjo9IFJldmVyc2VBeGlzIE5vZGVUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBSZXZlcnNlU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJSW50ZWdlciBhID0gKEludGVnZXIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU5vZGVUZXN0IG4gPSAoTm9kZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJICBSRVNVTFQgPSBuZXcgUmV2ZXJzZVN0ZXAoYS5pbnRWYWx1ZSgpLCBuKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzEvKlJldmVyc2VTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4OTogLy8gQWJicmV2Rm9yd2FyZFN0ZXAgOjo9IE5vZGVUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGb3J3YXJkU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJTm9kZVRlc3QgbiA9IChOb2RlVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEZvcndhcmRTdGVwKEZvcndhcmRTdGVwLk5PTkUsIG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNC8qQWJicmV2Rm9yd2FyZFN0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDg4OiAvLyBBYmJyZXZGb3J3YXJkU3RlcCA6Oj0gQVRfU1lNIE5vZGVUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGb3J3YXJkU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJTm9kZVRlc3QgbiA9IChOb2RlVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEZvcndhcmRTdGVwKEZvcndhcmRTdGVwLkFUX1NZTSwgbik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM0LypBYmJyZXZGb3J3YXJkU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODc6IC8vIEZvcndhcmRBeGlzIDo6PSBOQU1FU1BBQ0UgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuTkFNRVNQQUNFKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4NjogLy8gRm9yd2FyZEF4aXMgOjo9IEZPTExPV0lORyBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5GT0xMT1dJTkcpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDg1OiAvLyBGb3J3YXJkQXhpcyA6Oj0gRk9MTE9XSU5HX1NJQkxJTkcgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuRk9MTE9XSU5HX1NJQkxJTkcpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDg0OiAvLyBGb3J3YXJkQXhpcyA6Oj0gREVTQ0VOREFOVF9PUl9TRUxGIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkRFU0NFTkRBTlRfT1JfU0VMRik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIwLypGb3J3YXJkQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODM6IC8vIEZvcndhcmRBeGlzIDo6PSBTRUxGIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLlNFTEYpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDgyOiAvLyBGb3J3YXJkQXhpcyA6Oj0gQVRUUklCVVRFIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkFUVFJJQlVURSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIwLypGb3J3YXJkQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODE6IC8vIEZvcndhcmRBeGlzIDo6PSBERVNDRU5EQU5UIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkRFU0NFTkRBTlQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDgwOiAvLyBGb3J3YXJkQXhpcyA6Oj0gQ0hJTEQgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuQ0hJTEQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDc5OiAvLyBGb3J3YXJkU3RlcCA6Oj0gQWJicmV2Rm9yd2FyZFN0ZXAgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZvcndhcmRTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlGb3J3YXJkU3RlcCBuID0gKEZvcndhcmRTdGVwKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzMy8qRm9yd2FyZFN0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDc4OiAvLyBGb3J3YXJkU3RlcCA6Oj0gRm9yd2FyZEF4aXMgTm9kZVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZvcndhcmRTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlJbnRlZ2VyIGEgPSAoSW50ZWdlcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJTm9kZVRlc3QgbiA9IChOb2RlVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEZvcndhcmRTdGVwKGEuaW50VmFsdWUoKSxuKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzMvKkZvcndhcmRTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3NzogLy8gQXhpc1N0ZXAgOjo9IFJldmVyc2VTdGVwIFByZWRpY2F0ZUxpc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF4aXNTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCWludCBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlSZXZlcnNlU3RlcCBzID0gKFJldmVyc2VTdGVwKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHAgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEF4aXNTdGVwKHMsIHApOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg4MC8qQXhpc1N0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDc2OiAvLyBBeGlzU3RlcCA6Oj0gRm9yd2FyZFN0ZXAgUHJlZGljYXRlTGlzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQXhpc1N0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUZvcndhcmRTdGVwIHMgPSAoRm9yd2FyZFN0ZXApKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IHBsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBwcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcCA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQXhpc1N0ZXAocywgcCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDgwLypBeGlzU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzU6IC8vIFN0ZXBFeHByIDo6PSBGaWx0ZXJFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdGVwRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRmlsdGVyRXhwciBuID0gKEZpbHRlckV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM1LypTdGVwRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzQ6IC8vIFN0ZXBFeHByIDo6PSBBeGlzU3RlcCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RlcEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUF4aXNTdGVwIG4gPSAoQXhpc1N0ZXApKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM1LypTdGVwRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzM6IC8vIFJlbGF0aXZlUGF0aEV4cHIgOjo9IFJlbGF0aXZlUGF0aEV4cHIgRk9SV0FSRF9TTEFTSFNMQVNIIFN0ZXBFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBwcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVhQYXRoRXhwciBwID0gKFhQYXRoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RlcEV4cHIgcyA9IChTdGVwRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlwLmFkZF90YWlsKDIscyk7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM2LypSZWxhdGl2ZVBhdGhFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3MjogLy8gUmVsYXRpdmVQYXRoRXhwciA6Oj0gUmVsYXRpdmVQYXRoRXhwciBGT1JXQVJEX1NMQVNIIFN0ZXBFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBwcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVhQYXRoRXhwciBwID0gKFhQYXRoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RlcEV4cHIgcyA9IChTdGVwRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlwLmFkZF90YWlsKDEscyk7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM2LypSZWxhdGl2ZVBhdGhFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3MTogLy8gUmVsYXRpdmVQYXRoRXhwciA6Oj0gU3RlcEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RlcEV4cHIgcyA9IChTdGVwRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFhQYXRoRXhwcigwLChTdGVwRXhwcilzKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzYvKlJlbGF0aXZlUGF0aEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDcwOiAvLyBQYXRoRXhwciA6Oj0gUmVsYXRpdmVQYXRoRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlYUGF0aEV4cHIgbiA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc4LypQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjk6IC8vIFBhdGhFeHByIDo6PSBGT1JXQVJEX1NMQVNIU0xBU0ggUmVsYXRpdmVQYXRoRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlYUGF0aEV4cHIgcCA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJcC5zZXRfc2xhc2hlcygyKTsKLQkJCQlSRVNVTFQgPSBwOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzgvKlBhdGhFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2ODogLy8gUGF0aEV4cHIgOjo9IEZPUldBUkRfU0xBU0ggUmVsYXRpdmVQYXRoRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlYUGF0aEV4cHIgcCA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJcC5zZXRfc2xhc2hlcygxKTsKLQkJCQlSRVNVTFQgPSBwOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzgvKlBhdGhFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2NzogLy8gUGF0aEV4cHIgOjo9IEZPUldBUkRfU0xBU0ggCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IFhQYXRoRXhwcigxLG51bGwpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3OC8qUGF0aEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY2OiAvLyBOb2RlQ29tcCA6Oj0gR1JFQVRFUl9HUkVBVEVSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkdSRUFURVJfR1JFQVRFUik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIxLypOb2RlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjU6IC8vIE5vZGVDb21wIDo6PSBMRVNTX0xFU1MgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTEVTU19MRVNTKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjEvKk5vZGVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2NDogLy8gTm9kZUNvbXAgOjo9IElTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLklTKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjEvKk5vZGVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2MzogLy8gVmFsdWVDb21wIDo6PSBHRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HRSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUwLypWYWx1ZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDYyOiAvLyBWYWx1ZUNvbXAgOjo9IEdUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkdUKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTAvKlZhbHVlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjE6IC8vIFZhbHVlQ29tcCA6Oj0gTEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTEUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MC8qVmFsdWVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2MDogLy8gVmFsdWVDb21wIDo6PSBMVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MVCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUwLypWYWx1ZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDU5OiAvLyBWYWx1ZUNvbXAgOjo9IE5FIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLk5FKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTAvKlZhbHVlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTg6IC8vIFZhbHVlQ29tcCA6Oj0gRVEgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuRVEpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MC8qVmFsdWVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1NzogLy8gR2VuZXJhbENvbXAgOjo9IEdSRUFURVJFUVVBTCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HUkVBVEVSRVFVQUwpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OS8qR2VuZXJhbENvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDU2OiAvLyBHZW5lcmFsQ29tcCA6Oj0gR1JFQVRFUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HUkVBVEVSKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDkvKkdlbmVyYWxDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1NTogLy8gR2VuZXJhbENvbXAgOjo9IExFU1NFUVVBTCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MRVNTRVFVQUwpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OS8qR2VuZXJhbENvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDU0OiAvLyBHZW5lcmFsQ29tcCA6Oj0gTEVTU1RIQU4gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTEVTU1RIQU4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OS8qR2VuZXJhbENvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDUzOiAvLyBHZW5lcmFsQ29tcCA6Oj0gTk9URVFVQUxTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLk5PVEVRVUFMUyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ5LypHZW5lcmFsQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTI6IC8vIEdlbmVyYWxDb21wIDo6PSBFUVVBTFMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuRVFVQUxTKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDkvKkdlbmVyYWxDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1MTogLy8gVmFsdWVFeHByIDo6PSBQYXRoRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlYUGF0aEV4cHIgbiA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc5LypWYWx1ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDUwOiAvLyBVbmFyeUV4cHIgOjo9IFBMVVMgVW5hcnlFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGEgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFBsdXNFeHByKGEpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNy8qVW5hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0OTogLy8gVW5hcnlFeHByIDo6PSBNSU5VUyBVbmFyeUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgYSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgTWludXNFeHByKGEpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNy8qVW5hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0ODogLy8gVW5hcnlFeHByIDo6PSBWYWx1ZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVhQYXRoRXhwciBuID0gKFhQYXRoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzcvKlVuYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDc6IC8vIENhc3RFeHByIDo6PSBVbmFyeUV4cHIgQ0FTVCBBUyBTaW5nbGVUeXBlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU2luZ2xlVHlwZSByID0gKFNpbmdsZVR5cGUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBDYXN0RXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDMvKkNhc3RFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0NjogLy8gQ2FzdEV4cHIgOjo9IFVuYXJ5RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQzLypDYXN0RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDU6IC8vIENhc3RhYmxlRXhwciA6Oj0gQ2FzdEV4cHIgQ0FTVEFCTEUgQVMgU2luZ2xlVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVNpbmdsZVR5cGUgciA9IChTaW5nbGVUeXBlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQ2FzdGFibGVFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0MS8qQ2FzdGFibGVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0NDogLy8gQ2FzdGFibGVFeHByIDo6PSBDYXN0RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQxLypDYXN0YWJsZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQzOiAvLyBUcmVhdEV4cHIgOjo9IENhc3RhYmxlRXhwciBUUkVBVCBBUyBTZXF1ZW5jZVR5cGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTZXF1ZW5jZVR5cGUgciA9IChTZXF1ZW5jZVR5cGUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBUcmVhdEFzRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDAvKlRyZWF0RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDI6IC8vIFRyZWF0RXhwciA6Oj0gQ2FzdGFibGVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDAvKlRyZWF0RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDE6IC8vIEluc3RhbmNlb2ZFeHByIDo6PSBUcmVhdEV4cHIgSU5TVEFOQ0UgT0YgU2VxdWVuY2VUeXBlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU2VxdWVuY2VUeXBlIHIgPSAoU2VxdWVuY2VUeXBlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSW5zdE9mRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDIvKkluc3RhbmNlb2ZFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0MDogLy8gSW5zdGFuY2VvZkV4cHIgOjo9IFRyZWF0RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQyLypJbnN0YW5jZW9mRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzk6IC8vIEludGVyc2VjdEV4Y2VwdEV4cHIgOjo9IEludGVyc2VjdEV4Y2VwdEV4cHIgRVhDRVBUIEluc3RhbmNlb2ZFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBFeGNlcHRFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Ni8qSW50ZXJzZWN0RXhjZXB0RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzg6IC8vIEludGVyc2VjdEV4Y2VwdEV4cHIgOjo9IEludGVyc2VjdEV4Y2VwdEV4cHIgSU5URVJTRUNUIEluc3RhbmNlb2ZFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlcnNlY3RFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Ni8qSW50ZXJzZWN0RXhjZXB0RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzc6IC8vIEludGVyc2VjdEV4Y2VwdEV4cHIgOjo9IEluc3RhbmNlb2ZFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDYvKkludGVyc2VjdEV4Y2VwdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM2OiAvLyBVbmlvbkV4cHIgOjo9IFVuaW9uRXhwciBQSVBFIEludGVyc2VjdEV4Y2VwdEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFBpcGVFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NC8qVW5pb25FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzNTogLy8gVW5pb25FeHByIDo6PSBVbmlvbkV4cHIgVU5JT04gSW50ZXJzZWN0RXhjZXB0RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgVW5pb25FeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NC8qVW5pb25FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzNDogLy8gVW5pb25FeHByIDo6PSBJbnRlcnNlY3RFeGNlcHRFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDQvKlVuaW9uRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzM6IC8vIE11bHRpcGxpY2F0aXZlRXhwciA6Oj0gTXVsdGlwbGljYXRpdmVFeHByIE1PRCBVbmlvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IE1vZEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ1LypNdWx0aXBsaWNhdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDMyOiAvLyBNdWx0aXBsaWNhdGl2ZUV4cHIgOjo9IE11bHRpcGxpY2F0aXZlRXhwciBJRElWIFVuaW9uRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSURpdkV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ1LypNdWx0aXBsaWNhdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDMxOiAvLyBNdWx0aXBsaWNhdGl2ZUV4cHIgOjo9IE11bHRpcGxpY2F0aXZlRXhwciBESVYgVW5pb25FeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBEaXZFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NS8qTXVsdGlwbGljYXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzMDogLy8gTXVsdGlwbGljYXRpdmVFeHByIDo6PSBNdWx0aXBsaWNhdGl2ZUV4cHIgU1RBUiBVbmlvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IE11bEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ1LypNdWx0aXBsaWNhdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI5OiAvLyBNdWx0aXBsaWNhdGl2ZUV4cHIgOjo9IFVuaW9uRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ1LypNdWx0aXBsaWNhdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI4OiAvLyBBZGRpdGl2ZUV4cHIgOjo9IEFkZGl0aXZlRXhwciBNSU5VUyBNdWx0aXBsaWNhdGl2ZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN1YkV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ4LypBZGRpdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3OiAvLyBBZGRpdGl2ZUV4cHIgOjo9IEFkZGl0aXZlRXhwciBQTFVTIE11bHRpcGxpY2F0aXZlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQWRkRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDgvKkFkZGl0aXZlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY6IC8vIEFkZGl0aXZlRXhwciA6Oj0gTXVsdGlwbGljYXRpdmVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDgvKkFkZGl0aXZlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU6IC8vIFJhbmdlRXhwciA6Oj0gQWRkaXRpdmVFeHByIFRPIEFkZGl0aXZlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUmFuZ2VFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1My8qUmFuZ2VFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDogLy8gUmFuZ2VFeHByIDo6PSBBZGRpdGl2ZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1My8qUmFuZ2VFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzogLy8gQ29tcGFyaXNvbkV4cHIgOjo9IFJhbmdlRXhwciBOb2RlQ29tcCBSYW5nZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlJbnRlZ2VyIHQgPSAoSW50ZWdlcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBDbXBFeHByKGwsIHIsIHQuaW50VmFsdWUoKSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU0LypDb21wYXJpc29uRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjI6IC8vIENvbXBhcmlzb25FeHByIDo6PSBSYW5nZUV4cHIgR2VuZXJhbENvbXAgUmFuZ2VFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJSW50ZWdlciB0ID0gKEludGVnZXIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQ21wRXhwcihsLCByLCB0LmludFZhbHVlKCkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1NC8qQ29tcGFyaXNvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxOiAvLyBDb21wYXJpc29uRXhwciA6Oj0gUmFuZ2VFeHByIFZhbHVlQ29tcCBSYW5nZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlJbnRlZ2VyIHQgPSAoSW50ZWdlcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBDbXBFeHByKGwsIHIsIHQuaW50VmFsdWUoKSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU0LypDb21wYXJpc29uRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjA6IC8vIENvbXBhcmlzb25FeHByIDo6PSBSYW5nZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1NC8qQ29tcGFyaXNvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5OiAvLyBBbmRFeHByIDo6PSBBbmRFeHByIEFORCBDb21wYXJpc29uRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQW5kRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTEvKkFuZEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4OiAvLyBBbmRFeHByIDo6PSBDb21wYXJpc29uRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUxLypBbmRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzogLy8gT3JFeHByIDo6PSBPckV4cHIgT1IgQW5kRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgT3JFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Mi8qT3JFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjogLy8gT3JFeHByIDo6PSBBbmRFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTIvKk9yRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTU6IC8vIElmRXhwciA6Oj0gSUYgTFBBUiBFeHByIFJQQVIgVEhFTiBFeHByU2luZ2xlIEVMU0UgRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSWZFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBleHBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5sZWZ0OwotCQlpbnQgZXhwc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGV4cHMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciB0ID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSWZFeHByKGV4cHMsIHQsIGUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3Ny8qSWZFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTcpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDogLy8gUXVhbnRpZmllZEV4cHJNaWRkbGUgOjo9IFF1YW50aWZpZWRFeHByTWlkZGxlIENPTU1BIERPTExBUiBWYXJOYW1lIElOIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IHBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5sZWZ0OwotCQlpbnQgcHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwcyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkudmFsdWU7Ci0JCWludCB2bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgdnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlRTmFtZSB2ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlWYXJFeHByUGFpciBwID0gbmV3IFZhckV4cHJQYWlyKHYsZSk7Ci0JCQkJcHMuYWRkKHApOwotCQkJCVJFU1VMVCA9IHBzOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjcvKlF1YW50aWZpZWRFeHByTWlkZGxlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzogLy8gUXVhbnRpZmllZEV4cHJNaWRkbGUgOjo9IFZhck5hbWUgSU4gRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgdmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHZyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJUU5hbWUgdiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJQ29sbGVjdGlvbiBwYWlycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlWYXJFeHByUGFpciBwID0gbmV3IFZhckV4cHJQYWlyKHYsZSk7Ci0JCQkJcGFpcnMuYWRkKHApOwotCQkJCVJFU1VMVCA9IHBhaXJzOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjcvKlF1YW50aWZpZWRFeHByTWlkZGxlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjogLy8gUXVhbnRpZmllZEV4cHIgOjo9IEVWRVJZIERPTExBUiBRdWFudGlmaWVkRXhwck1pZGRsZSBTQVRJU0ZJRVMgRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUXVhbnRpZmllZEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBhaXJzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcGFpcnNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwYWlycyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlRdWFudGlmaWVkRXhwciBxZSA9IG5ldyBRdWFudGlmaWVkRXhwcihRdWFudGlmaWVkRXhwci5BTEwsCi0JCQkJCQkJCSAgICAgICBwYWlycywgZSk7Ci0JCQkJUkVTVUxUID0gcWU7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3Ni8qUXVhbnRpZmllZEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExOiAvLyBRdWFudGlmaWVkRXhwciA6Oj0gU09NRSBET0xMQVIgUXVhbnRpZmllZEV4cHJNaWRkbGUgU0FUSVNGSUVTIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFF1YW50aWZpZWRFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwYWlyc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHBhaXJzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcGFpcnMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJUXVhbnRpZmllZEV4cHIgcWUgPSBuZXcgUXVhbnRpZmllZEV4cHIoUXVhbnRpZmllZEV4cHIuU09NRSwKLQkJCQkJCQkJICAgICAgIHBhaXJzLCBlKTsKLQkJCQlSRVNVTFQgPSBxZTsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc2LypRdWFudGlmaWVkRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC00KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTA6IC8vIFNpbXBsZUZvckNsYXVzZSA6Oj0gU2ltcGxlRm9yQ2xhdXNlIENPTU1BIERPTExBUiBWYXJOYW1lIElOIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IHBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5sZWZ0OwotCQlpbnQgcHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwcyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkudmFsdWU7Ci0JCWludCB2bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgdnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlRTmFtZSB2ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlWYXJFeHByUGFpciBwID0gbmV3IFZhckV4cHJQYWlyKHYsZSk7Ci0JCQkJcHMuYWRkKHApOwotCQkJCVJFU1VMVCA9IHBzOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjgvKlNpbXBsZUZvckNsYXVzZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTogLy8gU2ltcGxlRm9yQ2xhdXNlIDo6PSBGT1IgRE9MTEFSIFZhck5hbWUgSU4gRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgdmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHZyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJUU5hbWUgdiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJQ29sbGVjdGlvbiBwYWlycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlWYXJFeHByUGFpciBwID0gbmV3IFZhckV4cHJQYWlyKHYsZSk7Ci0JCQkJcGFpcnMuYWRkKHApOwotCQkJCVJFU1VMVCA9IHBhaXJzOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjgvKlNpbXBsZUZvckNsYXVzZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC00KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODogLy8gRm9yRXhwciA6Oj0gU2ltcGxlRm9yQ2xhdXNlIFJFVFVSTiBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGb3JFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwYWlyc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHBhaXJzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcGFpcnMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJRm9yRXhwciBmZXhwID0gbmV3IEZvckV4cHIocGFpcnMsZSk7Ci0JCQkJUkVTVUxUID0gZmV4cDsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc1LypGb3JFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3OiAvLyBFeHByU2luZ2xlIDo6PSBPckV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Ny8qRXhwclNpbmdsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjogLy8gRXhwclNpbmdsZSA6Oj0gSWZFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlJZkV4cHIgbiA9IChJZkV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ3LypFeHByU2luZ2xlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1OiAvLyBFeHByU2luZ2xlIDo6PSBRdWFudGlmaWVkRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUXVhbnRpZmllZEV4cHIgbiA9IChRdWFudGlmaWVkRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDcvKkV4cHJTaW5nbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQ6IC8vIEV4cHJTaW5nbGUgOjo9IEZvckV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUZvckV4cHIgbiA9IChGb3JFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Ny8qRXhwclNpbmdsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzogLy8gRXhwciA6Oj0gRXhwciBDT01NQSBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBleHByc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGV4cHJzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gZXhwcnMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZXhsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBleHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGV4ID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIAotCQkJCWV4cHJzLmFkZChleCk7Ci0JCQkJUkVTVUxUID0gZXhwcnM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNS8qRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjogLy8gRXhwciA6Oj0gRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgZXhsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBleHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGV4ID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIAotCQkJCUNvbGxlY3Rpb24gZXhwcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlleHBzLmFkZChleCk7Ci0JCQkJUkVTVUxUID0gZXhwczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI1LypFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOiAvLyAkU1RBUlQgOjo9IFhQYXRoIEVPRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgT2JqZWN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBzdGFydF92YWxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBzdGFydF92YWxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJWFBhdGggc3RhcnRfdmFsID0gKFhQYXRoKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCVJFU1VMVCA9IHN0YXJ0X3ZhbDsKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgwLyokU1RBUlQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAvKiBBQ0NFUFQgKi8KLSAgICAgICAgICBDVVAkWFBhdGhDdXAkcGFyc2VyLmRvbmVfcGFyc2luZygpOwotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMDogLy8gWFBhdGggOjo9IEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoIFJFU1VMVCA9IG51bGw7Ci0JCWludCBleHBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXhwc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGV4cHMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFhQYXRoKGV4cHMpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3NC8qWFBhdGgqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICJJbnZhbGlkIGFjdGlvbiBudW1iZXIgZm91bmQgaW4gaW50ZXJuYWwgcGFyc2UgdGFibGUiKTsKLQotICAgICAgICB9Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9YcGF0aFN5bS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvWHBhdGhTeW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAyY2M4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9YcGF0aFN5bS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIGdlbmVyYXRlZCBieSBDVVAgdjAuMTBrCi0vLyBNb24gRGVjIDE0IDAyOjAyOjIyIENFVCAyMDA5Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKiBDVVAgZ2VuZXJhdGVkIGNsYXNzIGNvbnRhaW5pbmcgc3ltYm9sIGNvbnN0YW50cy4gKi8KLXB1YmxpYyBjbGFzcyBYcGF0aFN5bSB7Ci0gIC8qIHRlcm1pbmFscyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDRU5EQU5UX09SX1NFTEYgPSAzMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVMgPSA1NjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1QgPSA0NTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9MTE9XSU5HID0gMzQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUldBUkRfU0xBU0hTTEFTSCA9IDE5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJFTlQgPSAzNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0UgPSA0NjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9DVU1FTlRfTk9ERSA9IDc1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOQU1FU1BBQ0UgPSAzNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9SV0FSRF9TTEFTSCA9IDE4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkVBVCA9IDU1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT0RFID0gNzQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1BID0gMjQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFOQ0VTVE9SID0gMzc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExUID0gNDM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVEVHRVIgPSA4MzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9VQkxFID0gODQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENISUxEID0gMjg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTExPV0lOR19TSUJMSU5HID0gMzM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRVJZID0gNjY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFTEYgPSAzMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEUgPSA0NDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUxFTUVOVCA9IDgwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURVhUID0gNzY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTkNFID0gNTM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PVEVRVUFMUyA9IDExOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSEVOID0gNjg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDSEVNQV9FTEVNRU5UID0gODE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDSEVNQV9BVFRSSUJVVEUgPSA3OTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5DRVNUT1JfT1JfU0VMRiA9IDQwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUSA9IDQxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUkVDRURJTkcgPSAzOTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9EID0gNDk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFUX1NZTSA9IDIxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET0xMQVIgPSAyNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVhDRVBUID0gNTI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFU1NUSEFOID0gMTI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBJUEUgPSA5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVNTRVFVQUwgPSAxMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFU1RJT05NQVJLID0gMjc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBMVVMgPSA2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRElWID0gNDg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExQQVIgPSA0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklPTiA9IDUwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkVBVEVSRVFVQUwgPSAxNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVDSU1BTCA9IDg1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1IgPSA2MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBUiA9IDg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVIgPSAxNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJFQ0VESU5HX1NJQkxJTkcgPSAzODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElWID0gNDc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFVFVSTiA9IDYyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTFNFID0gNjk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPVERPVCA9IDIyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET1QgPSAyNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU9GID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkNOQU1FID0gODc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1FTlQgPSA3NzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URVJTRUNUID0gNTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJQQVIgPSA1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJVEVNID0gNzM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVNUFRZX1NFUVVFTkNFID0gNzI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBU1RBQkxFID0gNTc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElTID0gNTk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlVTID0gNzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPQ0VTU0lOR19JTlNUUlVDVElPTiA9IDc4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTiA9IDYxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUiA9IDcxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBlcnJvciA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFUVFJJQlVURSA9IDMwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRiA9IDY3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFU1dJVENIID0gODI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBU1QgPSA1ODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0YgPSA1NDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09MT04gPSAyMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ0VOREFOVCA9IDI5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT01FID0gNjU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJCUkFDS0VUID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09MT05DT0xPTiA9IDIwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkVBVEVSX0dSRUFURVIgPSAxNzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RSSU5HID0gODY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNBVElTRklFUyA9IDYzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTkQgPSA3MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE8gPSA2NDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEJSQUNLRVQgPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORSA9IDQyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVNTX0xFU1MgPSAxNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVFVQUxTID0gMTA7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDMwMDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5BdWd1c3QsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MDgwMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGJpbi8sXAotICAgICAgICAgICAgICAgLgotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcwotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2J1aWxkLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzZmIxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IS0tCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjgzMjE0IC0gZml4IElGIFRIRU4gRUxTRSBwYXJzaW5nIGFuZCB1cGRhdGUgZ3JhbW1hcnMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLS0+Ci08cHJvamVjdCBuYW1lPSJwcm9qMSIgZGVmYXVsdD0iZ2VuZXJhdGVfcGFyc2VyIiBiYXNlZGlyPSIuIj4KLSAgICA8cHJvcGVydHkgbmFtZT0ic3JjIiBsb2NhdGlvbj0iJHtiYXNlZGlyfSIvPiAgIAotICAgIDxwcm9wZXJ0eSBuYW1lPSJjdXBKYXIiIGxvY2F0aW9uPSIke2Jhc2VkaXJ9L2xpYi9qYXZhY3VwMTAuamFyIi8+Ci0gICAgPGRlc2NyaXB0aW9uPgotICAgIEJ1aWxkIEZpbGUgZm9yIENvbXBpbGVyIFByb2plY3QKLTwvZGVzY3JpcHRpb24+Ci0KLQk8dGFza2RlZiBjbGFzc25hbWU9IkpGbGV4LmFudHRhc2suSkZsZXhUYXNrIiBuYW1lPSJqZmxleCIgY2xhc3NwYXRoPSIke2Jhc2VkaXJ9L2xpYi9KRmxleC5qYXIiIC8+Ci0KLQk8dGFyZ2V0IG5hbWU9ImdlbmVyYXRlX3BhcnNlciI+Ci0JCTxqZmxleCBmaWxlPSJncmFtbWFycy94cGF0aC5sZXgiIGRlc3RkaXI9ImdyYW1tYXJzL2dlbmVyYXRlZCIvPgotCSAgICA8amF2YSBqYXI9IiR7Y3VwSmFyfSIgaW5wdXQ9ImdyYW1tYXJzL3hwYXRoLmN1cCIgb3V0cHV0PSIke2Jhc2VkaXJ9L3N0YXRlLWR1bXAudHh0IiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JICAgIAk8YXJnIHZhbHVlPSItcGFyc2VyIi8+Ci0JICAgIAk8YXJnIHZhbHVlPSJYUGF0aEN1cCIvPgotCSAgICAJPGFyZyB2YWx1ZT0iLXN5bWJvbHMiLz4KLQkgICAgCTxhcmcgdmFsdWU9IlhwYXRoU3ltIi8+Ci0JICAgIAk8YXJnIHZhbHVlPSItcGFja2FnZSIvPgotCSAgICAJPGFyZyB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIi8+Ci0JICAgIAk8YXJnIHZhbHVlPSItZHVtcF9zdGF0ZXMiLz4gICAgCQotCSAgICA8L2phdmE+Ci0JCTxjb3B5ZmlsZSBkZXN0PSIke2Jhc2VkaXJ9L3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhDdXAuamF2YSIgc3JjPSJYUGF0aEN1cC5qYXZhIi8+Ci0JCTxjb3B5ZmlsZSBkZXN0PSIke2Jhc2VkaXJ9L3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWHBhdGhTeW0uamF2YSIgc3JjPSJYcGF0aFN5bS5qYXZhIi8+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy9nZW5lcmF0ZWQvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoRmxleC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMvZ2VuZXJhdGVkL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEZsZXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4MThjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy9nZW5lcmF0ZWQvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoRmxleC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMxNSArMCwwIEBACi0vKiBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIGdlbmVyYXRlZCBieSBKRmxleCAxLjQuMyBvbiAxMi8xNC8wOSAyOjAyIEFNICovCi0KLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLS8vICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotLy8gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLS8vICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLS8vICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLS8vICoKLS8vICogQ29udHJpYnV0b3JzOgotLy8gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotLy8gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDk4NyAtIGZpeGVkIGxpdGVyYWwgaXNzdWVzIGZvciBpbnRlZ2VyIGFuZCBkZWNpbWFsCi0vLyAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjgzMjE0IC0gZml4IElGIFRIRU4gRUxTRSBwYXJzaW5nIGFuZCB1cGRhdGUgZ3JhbW1hcnMKLS8vICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODYwNjEgICBjb3JyZWN0IGhhbmRsaW5nIG9mIHF1b3RlZCBzdHJpbmcgCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YV9jdXAucnVudGltZS4qOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBhIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IAotICogPGEgaHJlZj0iaHR0cDovL3d3dy5qZmxleC5kZS8iPkpGbGV4PC9hPiAxLjQuMwotICogb24gMTIvMTQvMDkgMjowMiBBTSBmcm9tIHRoZSBzcGVjaWZpY2F0aW9uIGZpbGUKLSAqIDx0dD4vVXNlcnMvamVzcGVyL0RvY3VtZW50cy93b3Jrc3BhY2UtMy41TTUvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL3hwYXRoLmxleDwvdHQ+Ci0gKi8KLWNsYXNzIFhQYXRoRmxleCBpbXBsZW1lbnRzIGphdmFfY3VwLnJ1bnRpbWUuU2Nhbm5lciB7Ci0KLSAgLyoqIFRoaXMgY2hhcmFjdGVyIGRlbm90ZXMgdGhlIGVuZCBvZiBmaWxlICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlZRU9GID0gLTE7Ci0KLSAgLyoqIGluaXRpYWwgc2l6ZSBvZiB0aGUgbG9va2FoZWFkIGJ1ZmZlciAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfQlVGRkVSU0laRSA9IDE2Mzg0OwotCi0gIC8qKiBsZXhpY2FsIHN0YXRlcyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZWUlOSVRJQUwgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01NRU5UID0gMjsKLQotICAvKioKLSAgICogWlpfTEVYU1RBVEVbbF0gaXMgdGhlIHN0YXRlIGluIHRoZSBERkEgZm9yIHRoZSBsZXhpY2FsIHN0YXRlIGwKLSAgICogWlpfTEVYU1RBVEVbbCsxXSBpcyB0aGUgc3RhdGUgaW4gdGhlIERGQSBmb3IgdGhlIGxleGljYWwgc3RhdGUgbAotICAgKiAgICAgICAgICAgICAgICAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCi0gICAqIGwgaXMgb2YgdGhlIGZvcm0gbCA9IDIqaywgayBhIG5vbiBuZWdhdGl2ZSBpbnRlZ2VyCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfTEVYU1RBVEVbXSA9IHsgCi0gICAgIDAsICAwLCAgMSwgMQotICB9OwotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBjaGFyYWN0ZXJzIHRvIGNoYXJhY3RlciBjbGFzc2VzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfQ01BUF9QQUNLRUQgPSAKLSAgICAiXDExXDBcMVwxXDFcMVwyXDBcMVwxXDIyXDBcMVwxXDFcMjJcMVwyXDFcMCIrCi0gICAgIlwxXDMwXDJcMFwxXDNcMVwxMlwxXDE2XDFcMTdcMVw3XDFcMjdcMVwxMVwxXDUiKwotICAgICJcMVwyNVwxMlw0XDFcMTNcMVwwXDFcMjNcMVwyMVwxXDI0XDFcMzFcMVwyNlw0XDEwIisKLSAgICAiXDFcNlwyNVwxMFwxXDE0XDFcMFwxXDE1XDFcMFwxXDEwXDFcMFwxXDQyXDFcNDUiKwotICAgICJcMVwzMlwxXDM2XDFcMzdcMVw0N1wxXDUyXDFcMzNcMVwzNFwyXDEwXDFcMzVcMVw1MyIrCi0gICAgIlwxXDQxXDFcNTBcMVw1NFwxXDU1XDFcNDRcMVw0MFwxXDQzXDFcNDZcMVw1NlwxXDUxIisKLSAgICAiXDFcNTdcMVw2MFwxXDEwXDFcMFwxXDIwXHVmZjgzXDAiOwotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBjaGFyYWN0ZXJzIHRvIGNoYXJhY3RlciBjbGFzc2VzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFtdIFpaX0NNQVAgPSB6elVucGFja0NNYXAoWlpfQ01BUF9QQUNLRUQpOwotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBERkEgc3RhdGVzIHRvIGFjdGlvbiBzd2l0Y2ggbGFiZWxzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX0FDVElPTiA9IHp6VW5wYWNrQWN0aW9uKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0FDVElPTl9QQUNLRURfMCA9Ci0gICAgIlwyXDBcMVwxXDFcMlwyXDFcMVwzXDFcNFwxXDVcMVw2IisKLSAgICAiXDFcN1wxXDEwXDFcMTFcMVwxMlwxXDEzXDFcMTRcMVwxNVwxXDE2IisKLSAgICAiXDFcMTdcMVwxXDFcMjBcMVwyMVwxXDIyXDFcMjNcMVwyNFwxXDI1IisKLSAgICAiXDFcMjZcMjBcNVwyXDJcMVwwXDFcMjdcMVwwXDFcMjdcMVwzMCIrCi0gICAgIlwxXDBcMVwzMVwxXDMyXDFcMzNcMVwzNFwxXDM1XDFcMzZcMVwzNyIrCi0gICAgIlwxXDQwXDFcNDFcNFw1XDFcNDJcMVw0M1wxXDVcMVw0NFwxXDQ1IisKLSAgICAiXDFcNDZcNVw1XDFcNDdcNlw1XDFcNTBcMlw1XDFcNTFcNVw1IisKLSAgICAiXDFcNTJcNFw1XDFcNTNcMVw1NFwxXDU1XDFcNTZcM1w1XDFcNTciKwotICAgICJcMVw2MFwxXDYxXDFcMFw3XDVcMVw2MlwxNlw1XDFcNjNcMTBcNSIrCi0gICAgIlwxXDY0XDFcNjVcNFw1XDFcNjZcMVw1XDFcNjdcMlw1XDFcNzAiKwotICAgICJcM1w1XDFcNzFcNFw1XDFcNzJcMVw1XDFcNzNcMVw1XDFcNzQiKwotICAgICJcMlw1XDFcNzVcMVw3NlwxMFw1XDFcNzdcMTBcNVwxXDEwMFw2XDUiKwotICAgICJcMVwxMDFcMlw1XDFcMTAyXDE0XDVcMVwxMDNcNlw1XDFcMTA0XDFcNSIrCi0gICAgIlwxXDEwNVwzXDVcMVwxMDZcNFw1XDFcMTA3XDEyXDVcMVwxMTBcMVwxMTEiKwotICAgICJcMTBcNVwxXDExMlw1XDVcMVwxMTNcNVw1XDFcMTE0XDFcMTE1XDFcNSIrCi0gICAgIlwxXDExNlwxXDVcMVwxMTdcMVwxMjBcMVw1XDFcMTIxXDVcNVwxXDEyMiIrCi0gICAgIlwyNlw1XDFcMTIzXDEwXDVcMVwxMjRcMVwxMjVcMTRcNVwxXDEyNlwxXDEyNyIrCi0gICAgIlw0XDVcMVwxMzBcMVwxMzFcMVw1XDFcMTMyXDRcNVwxXDEzMyI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IFtdIHp6VW5wYWNrQWN0aW9uKCkgewotICAgIGludCBbXSByZXN1bHQgPSBuZXcgaW50WzMzM107Ci0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgb2Zmc2V0ID0genpVbnBhY2tBY3Rpb24oWlpfQUNUSU9OX1BBQ0tFRF8wLCBvZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGludCB6elVucGFja0FjdGlvbihTdHJpbmcgcGFja2VkLCBpbnQgb2Zmc2V0LCBpbnQgW10gcmVzdWx0KSB7Ci0gICAgaW50IGkgPSAwOyAgICAgICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGludCB2YWx1ZSA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGRvIHJlc3VsdFtqKytdID0gdmFsdWU7IHdoaWxlICgtLWNvdW50ID4gMCk7Ci0gICAgfQotICAgIHJldHVybiBqOwotICB9Ci0KLQotICAvKiogCi0gICAqIFRyYW5zbGF0ZXMgYSBzdGF0ZSB0byBhIHJvdyBpbmRleCBpbiB0aGUgdHJhbnNpdGlvbiB0YWJsZQotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX1JPV01BUCA9IHp6VW5wYWNrUm93TWFwKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX1JPV01BUF9QQUNLRURfMCA9Ci0gICAgIlwwXDBcMFw2MVwwXDE0MlwwXDE0MlwwXDIyM1wwXDMwNFwwXDM2NVwwXHUwMTI2IisKLSAgICAiXDBcdTAxNTdcMFwxNDJcMFwxNDJcMFx1MDE4OFwwXHUwMWI5XDBcMTQyXDBcMTQyXDBcMTQyIisKLSAgICAiXDBcMTQyXDBcMTQyXDBcMTQyXDBcdTAxZWFcMFx1MDIxYlwwXHUwMjRjXDBcdTAyN2RcMFwxNDIiKwotICAgICJcMFwxNDJcMFwxNDJcMFwxNDJcMFx1MDJhZVwwXHUwMmRmXDBcdTAzMTBcMFx1MDM0MVwwXHUwMzcyIisKLSAgICAiXDBcdTAzYTNcMFx1MDNkNFwwXHUwNDA1XDBcdTA0MzZcMFx1MDQ2N1wwXHUwNDk4XDBcdTA0YzlcMFx1MDRmYSIrCi0gICAgIlwwXHUwNTJiXDBcdTA1NWNcMFx1MDU4ZFwwXHUwNWJlXDBcdTA1ZWZcMFwyMjNcMFx1MDYyMFwwXDMwNCIrCi0gICAgIlwwXHUwNjUxXDBcdTA2ODJcMFx1MDZiM1wwXDE0MlwwXDE0MlwwXDE0MlwwXDE0MlwwXDE0MiIrCi0gICAgIlwwXDE0MlwwXDE0MlwwXDE0MlwwXDE0MlwwXHUwNmU0XDBcdTA3MTVcMFx1MDc0NlwwXHUwNzc3IisKLSAgICAiXDBcdTAxNTdcMFx1MDdhOFwwXHUwN2Q5XDBcdTAxNTdcMFx1MDE1N1wwXHUwMTU3XDBcdTA4MGFcMFx1MDgzYiIrCi0gICAgIlwwXHUwODZjXDBcdTA4OWRcMFx1MDhjZVwwXHUwMTU3XDBcdTA4ZmZcMFx1MDkzMFwwXHUwOTYxXDBcdTA5OTIiKwotICAgICJcMFx1MDljM1wwXHUwOWY0XDBcdTAxNTdcMFx1MGEyNVwwXHUwYTU2XDBcdTAxNTdcMFx1MGE4N1wwXHUwYWI4IisKLSAgICAiXDBcdTBhZTlcMFx1MGIxYVwwXHUwYjRiXDBcdTAxNTdcMFx1MGI3Y1wwXHUwYmFkXDBcdTBiZGVcMFx1MGMwZiIrCi0gICAgIlwwXHUwMTU3XDBcdTAxNTdcMFx1MDE1N1wwXHUwMTU3XDBcdTBjNDBcMFx1MGM3MVwwXHUwY2EyXDBcMTQyIisKLSAgICAiXDBcMTQyXDBcdTBjZDNcMFx1MGNkM1wwXHUwZDA0XDBcdTBkMzVcMFx1MGQ2NlwwXHUwZDk3XDBcdTBkYzgiKwotICAgICJcMFx1MGRmOVwwXHUwZTJhXDBcdTAxNTdcMFx1MGU1YlwwXHUwZThjXDBcdTBlYmRcMFx1MGVlZVwwXHUwZjFmIisKLSAgICAiXDBcdTBmNTBcMFx1MGY4MVwwXHUwZmIyXDBcdTBmZTNcMFx1MTAxNFwwXHUxMDQ1XDBcdTEwNzZcMFx1MTBhNyIrCi0gICAgIlwwXHUxMGQ4XDBcdTAxNTdcMFx1MTEwOVwwXHUxMTNhXDBcdTExNmJcMFx1MTE5Y1wwXHUxMWNkXDBcdTExZmUiKwotICAgICJcMFx1MTIyZlwwXHUxMjYwXDBcdTAxNTdcMFx1MDE1N1wwXHUxMjkxXDBcdTEyYzJcMFx1MTJmM1wwXHUxMzI0IisKLSAgICAiXDBcdTEzNTVcMFx1MTM4NlwwXHUwMTU3XDBcdTEzYjdcMFx1MTNlOFwwXHUwMTU3XDBcdTE0MTlcMFx1MTQ0YSIrCi0gICAgIlwwXHUxNDdiXDBcdTAxNTdcMFx1MTRhY1wwXHUxNGRkXDBcdTE1MGVcMFx1MTUzZlwwXHUwMTU3XDBcdTE1NzAiKwotICAgICJcMFx1MDE1N1wwXHUxNWExXDBcdTAxNTdcMFx1MTVkMlwwXHUxNjAzXDBcdTAxNTdcMFx1MDE1N1wwXHUxNjM0IisKLSAgICAiXDBcdTE2NjVcMFx1MTY5NlwwXHUxNmM3XDBcdTE2ZjhcMFx1MTcyOVwwXHUxNzVhXDBcdTE3OGJcMFx1MDE1NyIrCi0gICAgIlwwXHUxN2JjXDBcdTE3ZWRcMFx1MTgxZVwwXHUxODRmXDBcdTE4ODBcMFx1MThiMVwwXHUxOGUyXDBcdTE5MTMiKwotICAgICJcMFx1MDE1N1wwXHUxOTQ0XDBcdTE5NzVcMFx1MTlhNlwwXHUxOWQ3XDBcdTFhMDhcMFx1MWEzOVwwXHUwMTU3IisKLSAgICAiXDBcdTFhNmFcMFx1MWE5YlwwXHUwMTU3XDBcdTFhY2NcMFx1MWFmZFwwXHUxYjJlXDBcdTFiNWZcMFx1MWI5MCIrCi0gICAgIlwwXHUxYmMxXDBcdTFiZjJcMFx1MWMyM1wwXHUxYzU0XDBcdTFjODVcMFx1MWNiNlwwXHUxY2U3XDBcdTAxNTciKwotICAgICJcMFx1MWQxOFwwXHUxZDQ5XDBcdTFkN2FcMFx1MWRhYlwwXHUxZGRjXDBcdTFlMGRcMFx1MDE1N1wwXHUxZTNlIisKLSAgICAiXDBcdTAxNTdcMFx1MWU2ZlwwXHUxZWEwXDBcdTFlZDFcMFx1MDE1N1wwXHUxZjAyXDBcdTFmMzNcMFx1MWY2NCIrCi0gICAgIlwwXHUxZjk1XDBcdTAxNTdcMFx1MWZjNlwwXHUxZmY3XDBcdTIwMjhcMFx1MjA1OVwwXHUyMDhhXDBcdTIwYmIiKwotICAgICJcMFx1MjBlY1wwXHUyMTFkXDBcdTIxNGVcMFx1MjE3ZlwwXHUwMTU3XDBcdTAxNTdcMFx1MjFiMFwwXHUyMWUxIisKLSAgICAiXDBcdTIyMTJcMFx1MjI0M1wwXHUyMjc0XDBcdTIyYTVcMFx1MjJkNlwwXHUyMzA3XDBcdTIzMzhcMFx1MjM2OSIrCi0gICAgIlwwXHUyMzlhXDBcdTIzY2JcMFx1MjNmY1wwXHUyNDJkXDBcdTAxNTdcMFx1MjQ1ZVwwXHUyNDhmXDBcdTI0YzAiKwotICAgICJcMFx1MjRmMVwwXHUyNTIyXDBcdTAxNTdcMFx1MDE1N1wwXHUyNTUzXDBcdTAxNTdcMFx1MjU4NFwwXHUyNWI1IisKLSAgICAiXDBcdTI1ZTZcMFx1MjYxN1wwXHUyNjQ4XDBcdTI2NzlcMFx1MjZhYVwwXHUyNmRiXDBcdTI3MGNcMFx1MjczZCIrCi0gICAgIlwwXHUwMTU3XDBcdTI3NmVcMFx1Mjc5ZlwwXHUyN2QwXDBcdTI4MDFcMFx1MjgzMlwwXHUyODYzXDBcdTI4OTQiKwotICAgICJcMFx1MjhjNVwwXHUyOGY2XDBcdTI5MjdcMFx1Mjk1OFwwXHUyOTg5XDBcdTI5YmFcMFx1MjllYlwwXHUyYTFjIisKLSAgICAiXDBcdTJhNGRcMFx1MmE3ZVwwXHUyYWFmXDBcdTJhZTBcMFx1MmIxMVwwXHUyYjQyXDBcdTJiNzNcMFx1MDE1NyIrCi0gICAgIlwwXHUyYmE0XDBcdTJiZDVcMFx1MmMwNlwwXHUyYzM3XDBcdTJjNjhcMFx1MmM5OVwwXHUyY2NhXDBcdTJjZmIiKwotICAgICJcMFx1MDE1N1wwXHUwMTU3XDBcdTJkMmNcMFx1MmQ1ZFwwXHUyZDhlXDBcdTJkYmZcMFx1MmRmMFwwXHUyZTIxIisKLSAgICAiXDBcdTJlNTJcMFx1MmU4M1wwXHUyZWI0XDBcdTJlZTVcMFx1MmYxNlwwXHUyZjQ3XDBcdTAxNTdcMFx1MDE1NyIrCi0gICAgIlwwXHUyZjc4XDBcdTJmYTlcMFx1MmZkYVwwXHUzMDBiXDBcdTAxNTdcMFx1MDE1N1wwXHUzMDNjXDBcdTAxNTciKwotICAgICJcMFx1MzA2ZFwwXHUzMDllXDBcdTMwY2ZcMFx1MzEwMFwwXHUwMTU3IjsKLQotICBwcml2YXRlIHN0YXRpYyBpbnQgW10genpVbnBhY2tSb3dNYXAoKSB7Ci0gICAgaW50IFtdIHJlc3VsdCA9IG5ldyBpbnRbMzMzXTsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBvZmZzZXQgPSB6elVucGFja1Jvd01hcChaWl9ST1dNQVBfUEFDS0VEXzAsIG9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHp6VW5wYWNrUm93TWFwKFN0cmluZyBwYWNrZWQsIGludCBvZmZzZXQsIGludCBbXSByZXN1bHQpIHsKLSAgICBpbnQgaSA9IDA7ICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBoaWdoID0gcGFja2VkLmNoYXJBdChpKyspIDw8IDE2OwotICAgICAgcmVzdWx0W2orK10gPSBoaWdoIHwgcGFja2VkLmNoYXJBdChpKyspOwotICAgIH0KLSAgICByZXR1cm4gajsKLSAgfQotCi0gIC8qKiAKLSAgICogVGhlIHRyYW5zaXRpb24gdGFibGUgb2YgdGhlIERGQQotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX1RSQU5TID0genpVbnBhY2tUcmFucygpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaWl9UUkFOU19QQUNLRURfMCA9Ci0gICAgIlwxXDNcMVw0XDFcNVwxXDZcMVw3XDFcMTBcMVwxMVwxXDEyIisKLSAgICAiXDFcMTFcMVwxM1wxXDE0XDFcMTVcMVwxNlwxXDE3XDFcMjBcMVwyMSIrCi0gICAgIlwxXDIyXDFcMjNcMVwyNFwxXDI1XDFcMjZcMVwyN1wxXDMwXDFcMzEiKwotICAgICJcMVwzMlwxXDMzXDFcMzRcMVwxMVwxXDM1XDFcMzZcMVwzN1wxXDQwIisKLSAgICAiXDFcNDFcMVw0MlwxXDQzXDFcNDRcMVw0NVwxXDExXDFcNDZcMVw0NyIrCi0gICAgIlwxXDUwXDFcMTFcMVw1MVwxXDUyXDFcNTNcNFwxMVwxMlw0XDFcNTQiKwotICAgICJcMVw1NVw0NVw0XDYxXDBcMlw1NlwxXDU3XDU2XDU2XDNcNjBcMVw2MSIrCi0gICAgIlw1NVw2MFw0XDBcMVw3XDFcNjJcMVw2M1wzMFwwXDFcNjNcMjVcMCIrCi0gICAgIlwxXDYyXDFcNjRcNTdcMFwzXDExXDFcMFwyXDExXDIwXDBcMjdcMTEiKwotICAgICJcMTNcMFwxXDY1XDYwXDBcMVw2Nlw2NlwwXDFcNjdcNjBcMFwxXDcwIisKLSAgICAiXDFcMFwxXDcxXDU2XDBcMVw3MlwyXDBcMVw3M1w2MVwwXDFcNzQiKwotICAgICJcMzdcMFwzXDExXDFcMFwyXDExXDIwXDBcMVwxMVwxXDc1XDZcMTEiKwotICAgICJcMVw3Nlw1XDExXDFcNzdcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw0XDExXDFcMTAwXDFcMTFcMVwxMDFcMVwxMDJcMVwxMVwxXDEwMyIrCi0gICAgIlwzXDExXDFcMTA0XDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDEwNVwzXDExXDFcMTA2XDE1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMlwxMVwxXDEwN1wyXDExXDFcMTEwXDEwXDExXDFcMTExIisKLSAgICAiXDEwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcM1wxMVwxXDExMiIrCi0gICAgIlwxNVwxMVwxXDExM1wxXDExXDFcMTE0XDFcMTE1XDFcMTE2XDFcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDExN1w0XDExXDFcMTIwXDJcMTEiKwotICAgICJcMVwxMjFcNVwxMVwxXDEyMlwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwxMjNcMlwxMVwxXDEyNFw1XDExXDFcMTI1XDEwXDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDEyNlwxXDEyNyIrCi0gICAgIlwxXDExXDFcMTMwXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMVwxMVwxXDEzMVwzXDExXDFcMTMyXDRcMTFcMVwxMzNcM1wxMVwxXDEzNCIrCi0gICAgIlw3XDExXDFcMTM1XDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXDEzNlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTEiKwotICAgICJcMVwxMzdcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNlwxMSIrCi0gICAgIlwxXDE0MFwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExIisKLSAgICAiXDFcMTQxXDJcMTFcMVwxNDJcMTFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMTQzXDNcMTFcMVwxNDRcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXDE0NVwxMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEwXDExXDFcMTQ2XDFcMTFcMVwxNDdcMTRcMTEiKwotICAgICJcMTNcMFwxXDE1MFw2M1wwXDFcMTUxXDQ0XDBcMVw1Nlw2MVwwXDFcNjAiKwotICAgICJcNjFcMFwxXDYyXDFcMFwxXDYzXDMwXDBcMVw2M1wyNVwwXDFcMTUyIisKLSAgICAiXDJcMFwxXDE1M1wxXDBcMVwxNTNcNTNcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDE1NFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDZcMTFcMVwxNTVcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyMVwxMVwxXDE1Nlw1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDE1N1wyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDZcMTFcMVwxNjBcMlwxMVwxXDE2MVwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDVcMTFcMVwxNjJcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyNFwxMVwxXDE2M1wyXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNlwxMVwxXDE2NFwyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDFcMTY1XDI2XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNVwxMVwxXDE2NlwxXDE2N1wyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDIyXDExXDFcMTcwXDRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcMTcxXDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMVwxNzJcMjZcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxXDExXDFcMTczXDI1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcM1wxMVwxXDE3NFwyM1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDExXDExXDFcMTc1XDE1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMjFcMTFcMVwxNzZcNVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDIxXDExXDFcMTc3XDVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw0XDExXDFcMjAwXDIyXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMVwyMDFcM1wxMVwxXDIwMlwyMlwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMjAzXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXDIwNFwyMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDI1XDExXDFcMjA1XDFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjA2XDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjJcMTFcMVwyMDdcNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMjEwXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMlwxMVwxXDIxMVwyNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDNcMTFcMVwyMTJcNlwxMVwxXDIxM1wxNFwxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDRcMTFcMVwyMTRcMjJcMTEiKwotICAgICJcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXDIxNVwxNFwxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyMTZcMTBcMTEiKwotICAgICJcMVwyMTdcMTBcMTFcNFwwXDFcMTUyXDYwXDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDNcMTFcMVwyMjBcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDIyMVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDIxXDExXDFcMjIyXDVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyNFwxMVwxXDIyM1wyXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwyMjRcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMjI1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMjFcMTFcMVwyMjZcNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDFcMjI3XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTRcMTFcMVwyMzBcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwyMVwxMVwxXDIzMVw1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDIzMlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcMjMzXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTJcMTFcMVwyMzRcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjM1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDIzNlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDE1XDExXDFcMjM3XDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMlwxMVwxXDI0MFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNDFcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjQyXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI0M1wyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNDRcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMlwxMVwxXDI0NVwxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDdcMTFcMVwyNDZcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMVwxMVwxXDI0N1wxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEwXDExXDFcMjUwXDE2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI1MVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDE0XDExXDFcMjUyXDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTZcMTFcMVwyNTNcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwzXDExXDFcMjU0XDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI1NVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDFcMjU2XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMVwyNTciKwotICAgICJcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw0XDExXDFcMjYwIisKLSAgICAiXDIyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwyNjEiKwotICAgICJcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjYyIisKLSAgICAiXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwyNjMiKwotICAgICJcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXDI2NCIrCi0gICAgIlwxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyNjUiKwotICAgICJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMVwxMVwxXDI2NiIrCi0gICAgIlw1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDI2NyIrCi0gICAgIlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDI2XDExXDFcMjcwIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjZcMTFcMVwyNzFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwyMlwxMVwxXDI3Mlw0XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMjFcMTFcMVwyNzNcNVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwyNzRcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMjc1XDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDI3NlwyMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDJcMTFcMVwyNzdcMjRcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMwMFwxNVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwzMDFcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXDMwMlwxNFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMDNcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXDMwNFwxMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMDVcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMzA2XDIxXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDMwN1wyMVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDEzXDExXDFcMzEwXDEzXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMxMVwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMTJcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMzEzXDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMxNFwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwzMTVcMjFcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzE2XDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwxXDExXDFcMzE3XDIwXDBcMjdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMyMFwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEwXDExXDFcMzIxXDE2XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTVcMTFcMVwzMjJcMTFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyMlwxMVwxXDMyM1w0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMjRcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxM1wxMVwxXDMyNVwxM1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDE3XDExXDFcMzI2XDdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzI3XDE3XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTdcMTFcMVwzMzBcN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMzMxXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNFwxMVwxXDMzMlwyMlwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDZcMTFcMVwzMzNcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwzXDExXDFcMzM0XDIzXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMzVcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxXDMzNlwyNlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDVcMTFcMVwzMzdcMjFcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw0XDExXDFcMzQwXDIyXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcN1wxMVwxXDM0MVwxN1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDExXDExXDFcMzQyXDE1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNlwxMVwxXDM0M1wyMFwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMVwxMVwxXDM0NFwyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM0NVwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDEwXDExXDFcMzQ2XDE2XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTZcMTFcMVwzNDdcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxNFwxMVwxXDM1MFwxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNTFcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMzUyXDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM1M1wyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDZcMTFcMVwzNTRcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMzU1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXDM1NlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDFcMzU3XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTBcMTFcMVwzNjBcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMVwxMVwxXDM2MVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwzNjJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMzYzXDJcMTFcMVwzNjRcMTZcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw1XDExXDFcMzY1XDIxXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMVwzNjZcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMlwxMVwxXDM2N1wxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDExXDExXDFcMzcwXDE1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwzNzFcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw3XDExXDFcMzcyXDE3XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcN1wxMVwxXDM3M1wxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNzRcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDM3NVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDdcMTFcMVwzNzZcMTdcMTFcNFwwXDNcMTFcMVwwXDFcMTEiKwotICAgICJcMVwzNzdcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDIzXDExXDFcdTAxMDBcM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDNcMTFcMVx1MDEwMVwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcdTAxMDJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw2XDExXDFcdTAxMDNcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcdTAxMDRcMjFcMTFcNFwwXDNcMTFcMVwwXDFcMTFcMVx1MDEwNSIrCi0gICAgIlwyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTA2XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMVx1MDEwNyIrCi0gICAgIlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExXDFcdTAxMDgiKwotICAgICJcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExXDFcdTAxMDkiKwotICAgICJcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVx1MDEwYSIrCi0gICAgIlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExXDFcdTAxMGIiKwotICAgICJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcdTAxMGMiKwotICAgICJcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNFwxMVwxXHUwMTBkIisKLSAgICAiXDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXHUwMTBlIisKLSAgICAiXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTFcMVx1MDEwZiIrCi0gICAgIlwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE2XDExXDFcdTAxMTAiKwotICAgICJcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDExXDFcdTAxMTEiKwotICAgICJcMjVcMTFcNFwwXDNcMTFcMVwwXDFcMTFcMVx1MDExMlwyMFwwXDI3XDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwxXDExXDFcdTAxMTNcMjBcMFwyN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExXDFcdTAxMTRcNlwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMVwxMVwxXHUwMTE1XDIwXDBcMjdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXHUwMTE2XDEwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXHUwMTE3XDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjFcMTFcMVx1MDExOFw1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTJcMTFcMVx1MDExOVwxNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEyXDExXDFcdTAxMWFcMTRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw2XDExXDFcdTAxMWJcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw2XDExXDFcdTAxMWNcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDFcMTFcMVx1MDExZFwyMFwwXDI3XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMTZcMTFcMVx1MDExZVwxMFwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDRcMTFcMVx1MDExZlwyMlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDdcMTFcMVx1MDEyMFwxN1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDVcMTFcMVx1MDEyMVwyMVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDJcMTFcMVx1MDEyMlwyNFwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMVwxMVwxXHUwMTIzXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcdTAxMjRcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcdTAxMjVcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcdTAxMjZcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMlwxMVwxXHUwMTI3XDE0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXHUwMTI4XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMVx1MDEyOVwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDdcMTFcMVx1MDEyYVwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEzXDExXDFcdTAxMmJcMTNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw2XDExXDFcdTAxMmNcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxM1wxMVwxXHUwMTJkXDEzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTNcMTFcMVx1MDEyZVwxM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDdcMTFcMVx1MDEyZlwxN1wxMVw0XDBcM1wxMVwxXDBcMVwxMVwxXHUwMTMwIisKLSAgICAiXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxMzFcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMSIrCi0gICAgIlwxXHUwMTMyXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTRcMTEiKwotICAgICJcMVx1MDEzM1wxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTEiKwotICAgICJcMVx1MDEzNFwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDEzNVwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDEzNlwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTEiKwotICAgICJcMVx1MDEzN1wyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTEiKwotICAgICJcMVx1MDEzOFwyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExIisKLSAgICAiXDFcdTAxMzlcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExIisKLSAgICAiXDFcdTAxM2FcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyXDExIisKLSAgICAiXDFcdTAxM2JcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyXDExIisKLSAgICAiXDFcdTAxM2NcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMSIrCi0gICAgIlwxXHUwMTNkXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTNlXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTNmXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTVcMTEiKwotICAgICJcMVx1MDE0MFwxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTEiKwotICAgICJcMVx1MDE0MVwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTEiKwotICAgICJcMVx1MDE0MlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExIisKLSAgICAiXDFcdTAxNDNcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExIisKLSAgICAiXDFcdTAxNDRcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMFwxMSIrCi0gICAgIlwxXHUwMTQ1XDZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMFwxMSIrCi0gICAgIlwxXHUwMTQ2XDZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNFwxMSIrCi0gICAgIlwxXHUwMTQ3XDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTVcMTEiKwotICAgICJcMVx1MDE0OFwxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDFcdTAxNDkiKwotICAgICJcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXHUwMTRhIisKLSAgICAiXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMlwxMVwxXHUwMTRiIisKLSAgICAiXDI0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTZcMTFcMVx1MDE0YyIrCi0gICAgIlwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVx1MDE0ZCIrCi0gICAgIlwxN1wxMSI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IFtdIHp6VW5wYWNrVHJhbnMoKSB7Ci0gICAgaW50IFtdIHJlc3VsdCA9IG5ldyBpbnRbMTI1OTNdOwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIG9mZnNldCA9IHp6VW5wYWNrVHJhbnMoWlpfVFJBTlNfUEFDS0VEXzAsIG9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHp6VW5wYWNrVHJhbnMoU3RyaW5nIHBhY2tlZCwgaW50IG9mZnNldCwgaW50IFtdIHJlc3VsdCkgewotICAgIGludCBpID0gMDsgICAgICAgLyogaW5kZXggaW4gcGFja2VkIHN0cmluZyAgKi8KLSAgICBpbnQgaiA9IG9mZnNldDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgaW50IGwgPSBwYWNrZWQubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKGkgPCBsKSB7Ci0gICAgICBpbnQgY291bnQgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBpbnQgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICB2YWx1ZS0tOwotICAgICAgZG8gcmVzdWx0W2orK10gPSB2YWx1ZTsgd2hpbGUgKC0tY291bnQgPiAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGo7Ci0gIH0KLQotCi0gIC8qIGVycm9yIGNvZGVzICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaWl9VTktOT1dOX0VSUk9SID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX05PX01BVENIID0gMTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX1BVU0hCQUNLXzJCSUcgPSAyOwotCi0gIC8qIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgY29kZXMgYWJvdmUgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0VSUk9SX01TR1tdID0gewotICAgICJVbmtvd24gaW50ZXJuYWwgc2Nhbm5lciBlcnJvciIsCi0gICAgIkVycm9yOiBjb3VsZCBub3QgbWF0Y2ggaW5wdXQiLAotICAgICJFcnJvcjogcHVzaGJhY2sgdmFsdWUgd2FzIHRvbyBsYXJnZSIKLSAgfTsKLQotICAvKioKLSAgICogWlpfQVRUUklCVVRFW2FTdGF0ZV0gY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2Ygc3RhdGUgPGNvZGU+YVN0YXRlPC9jb2RlPgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX0FUVFJJQlVURSA9IHp6VW5wYWNrQXR0cmlidXRlKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0FUVFJJQlVURV9QQUNLRURfMCA9Ci0gICAgIlwyXDBcMlwxMVw1XDFcMlwxMVwyXDFcNlwxMVw0XDFcNFwxMSIrCi0gICAgIlwyMlwxXDFcMFwxXDFcMVwwXDJcMVwxXDBcMTFcMTFcNTNcMSIrCi0gICAgIlwyXDExXDFcMVwxXDBcMzQyXDEiOwotCi0gIHByaXZhdGUgc3RhdGljIGludCBbXSB6elVucGFja0F0dHJpYnV0ZSgpIHsKLSAgICBpbnQgW10gcmVzdWx0ID0gbmV3IGludFszMzNdOwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIG9mZnNldCA9IHp6VW5wYWNrQXR0cmlidXRlKFpaX0FUVFJJQlVURV9QQUNLRURfMCwgb2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgenpVbnBhY2tBdHRyaWJ1dGUoU3RyaW5nIHBhY2tlZCwgaW50IG9mZnNldCwgaW50IFtdIHJlc3VsdCkgewotICAgIGludCBpID0gMDsgICAgICAgLyogaW5kZXggaW4gcGFja2VkIHN0cmluZyAgKi8KLSAgICBpbnQgaiA9IG9mZnNldDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgaW50IGwgPSBwYWNrZWQubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKGkgPCBsKSB7Ci0gICAgICBpbnQgY291bnQgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBpbnQgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBkbyByZXN1bHRbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gajsKLSAgfQotCi0gIC8qKiB0aGUgaW5wdXQgZGV2aWNlICovCi0gIHByaXZhdGUgamF2YS5pby5SZWFkZXIgenpSZWFkZXI7Ci0KLSAgLyoqIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBERkEgKi8KLSAgcHJpdmF0ZSBpbnQgenpTdGF0ZTsKLQotICAvKiogdGhlIGN1cnJlbnQgbGV4aWNhbCBzdGF0ZSAqLwotICBwcml2YXRlIGludCB6ekxleGljYWxTdGF0ZSA9IFlZSU5JVElBTDsKLQotICAvKiogdGhpcyBidWZmZXIgY29udGFpbnMgdGhlIGN1cnJlbnQgdGV4dCB0byBiZSBtYXRjaGVkIGFuZCBpcwotICAgICAgdGhlIHNvdXJjZSBvZiB0aGUgeXl0ZXh0KCkgc3RyaW5nICovCi0gIHByaXZhdGUgY2hhciB6ekJ1ZmZlcltdID0gbmV3IGNoYXJbWlpfQlVGRkVSU0laRV07Ci0KLSAgLyoqIHRoZSB0ZXh0cG9zaXRpb24gYXQgdGhlIGxhc3QgYWNjZXB0aW5nIHN0YXRlICovCi0gIHByaXZhdGUgaW50IHp6TWFya2VkUG9zOwotCi0gIC8qKiB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGluIHRoZSBidWZmZXIgKi8KLSAgcHJpdmF0ZSBpbnQgenpDdXJyZW50UG9zOwotCi0gIC8qKiBzdGFydFJlYWQgbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgeXl0ZXh0KCkgc3RyaW5nIGluIHRoZSBidWZmZXIgKi8KLSAgcHJpdmF0ZSBpbnQgenpTdGFydFJlYWQ7Ci0KLSAgLyoqIGVuZFJlYWQgbWFya3MgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIsIHRoYXQgaGFzIGJlZW4gcmVhZAotICAgICAgZnJvbSBpbnB1dCAqLwotICBwcml2YXRlIGludCB6ekVuZFJlYWQ7Ci0KLSAgLyoqIG51bWJlciBvZiBuZXdsaW5lcyBlbmNvdW50ZXJlZCB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZWQgdGV4dCAqLwotICBwcml2YXRlIGludCB5eWxpbmU7Ci0KLSAgLyoqIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZWQgdGV4dCAqLwotICBwcml2YXRlIGludCB5eWNoYXI7Ci0KLSAgLyoqCi0gICAqIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBsYXN0IG5ld2xpbmUgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSAKLSAgICogbWF0Y2hlZCB0ZXh0Ci0gICAqLwotICBwcml2YXRlIGludCB5eWNvbHVtbjsKLQotICAvKiogCi0gICAqIHp6QXRCT0wgPT0gdHJ1ZSA8PT4gdGhlIHNjYW5uZXIgaXMgY3VycmVudGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4genpBdEJPTCA9IHRydWU7Ci0KLSAgLyoqIHp6QXRFT0YgPT0gdHJ1ZSA8PT4gdGhlIHNjYW5uZXIgaXMgYXQgdGhlIEVPRiAqLwotICBwcml2YXRlIGJvb2xlYW4genpBdEVPRjsKLQotICAvKiogZGVub3RlcyBpZiB0aGUgdXNlci1FT0YtY29kZSBoYXMgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkICovCi0gIHByaXZhdGUgYm9vbGVhbiB6ekVPRkRvbmU7Ci0KLSAgLyogdXNlciBjb2RlOiAqLwotCXB1YmxpYyBpbnQgbGluZW5vKCkgeyByZXR1cm4geXlsaW5lICsgMTsgfQotCXB1YmxpYyBpbnQgY29sbm8oKSB7IHJldHVybiB5eWNvbHVtbiArIDE7IH0KLQotCXByaXZhdGUgU3ltYm9sIHN5bWJvbChpbnQgdHlwZSkgewotCQlyZXR1cm4gbmV3IFN5bWJvbCh0eXBlLCBsaW5lbm8oKSwgY29sbm8oKSk7Ci0JfQotCXByaXZhdGUgU3ltYm9sIHN5bWJvbChpbnQgdHlwZSwgT2JqZWN0IHZhbHVlKSB7Ci0JCXJldHVybiBuZXcgU3ltYm9sKHR5cGUsIGxpbmVubygpLCBjb2xubygpLCB2YWx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSBpbnQgY29tbWVudExldmVsID0gMDsKLQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IHNjYW5uZXIKLSAgICogVGhlcmUgaXMgYWxzbyBhIGphdmEuaW8uSW5wdXRTdHJlYW0gdmVyc2lvbiBvZiB0aGlzIGNvbnN0cnVjdG9yLgotICAgKgotICAgKiBAcGFyYW0gICBpbiAgdGhlIGphdmEuaW8uUmVhZGVyIHRvIHJlYWQgaW5wdXQgZnJvbS4KLSAgICovCi0gIFhQYXRoRmxleChqYXZhLmlvLlJlYWRlciBpbikgewotICAgIHRoaXMuenpSZWFkZXIgPSBpbjsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IHNjYW5uZXIuCi0gICAqIFRoZXJlIGlzIGFsc28gamF2YS5pby5SZWFkZXIgdmVyc2lvbiBvZiB0aGlzIGNvbnN0cnVjdG9yLgotICAgKgotICAgKiBAcGFyYW0gICBpbiAgdGhlIGphdmEuaW8uSW5wdXRzdHJlYW0gdG8gcmVhZCBpbnB1dCBmcm9tLgotICAgKi8KLSAgWFBhdGhGbGV4KGphdmEuaW8uSW5wdXRTdHJlYW0gaW4pIHsKLSAgICB0aGlzKG5ldyBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyKGluKSk7Ci0gIH0KLQotICAvKiogCi0gICAqIFVucGFja3MgdGhlIGNvbXByZXNzZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRhYmxlLgotICAgKgotICAgKiBAcGFyYW0gcGFja2VkICAgdGhlIHBhY2tlZCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUKLSAgICogQHJldHVybiAgICAgICAgIHRoZSB1bnBhY2tlZCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNoYXIgW10genpVbnBhY2tDTWFwKFN0cmluZyBwYWNrZWQpIHsKLSAgICBjaGFyIFtdIG1hcCA9IG5ldyBjaGFyWzB4MTAwMDBdOwotICAgIGludCBpID0gMDsgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSAwOyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICB3aGlsZSAoaSA8IDEzMikgewotICAgICAgaW50ICBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGNoYXIgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBkbyBtYXBbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLQotICAvKioKLSAgICogUmVmaWxscyB0aGUgaW5wdXQgYnVmZmVyLgotICAgKgotICAgKiBAcmV0dXJuICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+LCBpZmYgdGhlcmUgd2FzIG5ldyBpbnB1dC4KLSAgICogCi0gICAqIEBleGNlcHRpb24gICBqYXZhLmlvLklPRXhjZXB0aW9uICBpZiBhbnkgSS9PLUVycm9yIG9jY3VycwotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHp6UmVmaWxsKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotCi0gICAgLyogZmlyc3Q6IG1ha2Ugcm9vbSAoaWYgeW91IGNhbikgKi8KLSAgICBpZiAoenpTdGFydFJlYWQgPiAwKSB7Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHp6QnVmZmVyLCB6elN0YXJ0UmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgenpCdWZmZXIsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIHp6RW5kUmVhZC16elN0YXJ0UmVhZCk7Ci0KLSAgICAgIC8qIHRyYW5zbGF0ZSBzdG9yZWQgcG9zaXRpb25zICovCi0gICAgICB6ekVuZFJlYWQtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6Q3VycmVudFBvcy09IHp6U3RhcnRSZWFkOwotICAgICAgenpNYXJrZWRQb3MtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6U3RhcnRSZWFkID0gMDsKLSAgICB9Ci0KLSAgICAvKiBpcyB0aGUgYnVmZmVyIGJpZyBlbm91Z2g/ICovCi0gICAgaWYgKHp6Q3VycmVudFBvcyA+PSB6ekJ1ZmZlci5sZW5ndGgpIHsKLSAgICAgIC8qIGlmIG5vdDogYmxvdyBpdCB1cCAqLwotICAgICAgY2hhciBuZXdCdWZmZXJbXSA9IG5ldyBjaGFyW3p6Q3VycmVudFBvcyoyXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoenpCdWZmZXIsIDAsIG5ld0J1ZmZlciwgMCwgenpCdWZmZXIubGVuZ3RoKTsKLSAgICAgIHp6QnVmZmVyID0gbmV3QnVmZmVyOwotICAgIH0KLQotICAgIC8qIGZpbmFsbHk6IGZpbGwgdGhlIGJ1ZmZlciB3aXRoIG5ldyBpbnB1dCAqLwotICAgIGludCBudW1SZWFkID0genpSZWFkZXIucmVhZCh6ekJ1ZmZlciwgenpFbmRSZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ekJ1ZmZlci5sZW5ndGgtenpFbmRSZWFkKTsKLQotICAgIGlmIChudW1SZWFkID4gMCkgewotICAgICAgenpFbmRSZWFkKz0gbnVtUmVhZDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gdW5saWtlbHkgYnV0IG5vdCBpbXBvc3NpYmxlOiByZWFkIDAgY2hhcmFjdGVycywgYnV0IG5vdCBhdCBlbmQgb2Ygc3RyZWFtICAgIAotICAgIGlmIChudW1SZWFkID09IDApIHsKLSAgICAgIGludCBjID0genpSZWFkZXIucmVhZCgpOwotICAgICAgaWYgKGMgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB6ekJ1ZmZlclt6ekVuZFJlYWQrK10gPSAoY2hhcikgYzsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAgCi0gICAgfQotCi0JLy8gbnVtUmVhZCA8IDAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gICAgCi0gIC8qKgotICAgKiBDbG9zZXMgdGhlIGlucHV0IHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHl5Y2xvc2UoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgenpBdEVPRiA9IHRydWU7ICAgICAgICAgICAgLyogaW5kaWNhdGUgZW5kIG9mIGZpbGUgKi8KLSAgICB6ekVuZFJlYWQgPSB6elN0YXJ0UmVhZDsgIC8qIGludmFsaWRhdGUgYnVmZmVyICAgICovCi0KLSAgICBpZiAoenpSZWFkZXIgIT0gbnVsbCkKLSAgICAgIHp6UmVhZGVyLmNsb3NlKCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXNldHMgdGhlIHNjYW5uZXIgdG8gcmVhZCBmcm9tIGEgbmV3IGlucHV0IHN0cmVhbS4KLSAgICogRG9lcyBub3QgY2xvc2UgdGhlIG9sZCByZWFkZXIuCi0gICAqCi0gICAqIEFsbCBpbnRlcm5hbCB2YXJpYWJsZXMgYXJlIHJlc2V0LCB0aGUgb2xkIGlucHV0IHN0cmVhbSAKLSAgICogPGI+Y2Fubm90PC9iPiBiZSByZXVzZWQgKGludGVybmFsIGJ1ZmZlciBpcyBkaXNjYXJkZWQgYW5kIGxvc3QpLgotICAgKiBMZXhpY2FsIHN0YXRlIGlzIHNldCB0byA8dHQ+WlpfSU5JVElBTDwvdHQ+LgotICAgKgotICAgKiBAcGFyYW0gcmVhZGVyICAgdGhlIG5ldyBpbnB1dCBzdHJlYW0gCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB5eXJlc2V0KGphdmEuaW8uUmVhZGVyIHJlYWRlcikgewotICAgIHp6UmVhZGVyID0gcmVhZGVyOwotICAgIHp6QXRCT0wgID0gdHJ1ZTsKLSAgICB6ekF0RU9GICA9IGZhbHNlOwotICAgIHp6RU9GRG9uZSA9IGZhbHNlOwotICAgIHp6RW5kUmVhZCA9IHp6U3RhcnRSZWFkID0gMDsKLSAgICB6ekN1cnJlbnRQb3MgPSB6ek1hcmtlZFBvcyA9IDA7Ci0gICAgeXlsaW5lID0geXljaGFyID0geXljb2x1bW4gPSAwOwotICAgIHp6TGV4aWNhbFN0YXRlID0gWVlJTklUSUFMOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY3VycmVudCBsZXhpY2FsIHN0YXRlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIGludCB5eXN0YXRlKCkgewotICAgIHJldHVybiB6ekxleGljYWxTdGF0ZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIEVudGVycyBhIG5ldyBsZXhpY2FsIHN0YXRlCi0gICAqCi0gICAqIEBwYXJhbSBuZXdTdGF0ZSB0aGUgbmV3IGxleGljYWwgc3RhdGUKLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHl5YmVnaW4oaW50IG5ld1N0YXRlKSB7Ci0gICAgenpMZXhpY2FsU3RhdGUgPSBuZXdTdGF0ZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRleHQgbWF0Y2hlZCBieSB0aGUgY3VycmVudCByZWd1bGFyIGV4cHJlc3Npb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHl5dGV4dCgpIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZyggenpCdWZmZXIsIHp6U3RhcnRSZWFkLCB6ek1hcmtlZFBvcy16elN0YXJ0UmVhZCApOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIDx0dD5wb3M8L3R0PiBmcm9tIHRoZSAKLSAgICogbWF0Y2hlZCB0ZXh0LiAKLSAgICogCi0gICAqIEl0IGlzIGVxdWl2YWxlbnQgdG8geXl0ZXh0KCkuY2hhckF0KHBvcyksIGJ1dCBmYXN0ZXIKLSAgICoKLSAgICogQHBhcmFtIHBvcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciB0byBmZXRjaC4gCi0gICAqICAgICAgICAgICAgQSB2YWx1ZSBmcm9tIDAgdG8geXlsZW5ndGgoKS0xLgotICAgKgotICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gcG9zCi0gICAqLwotICBwdWJsaWMgZmluYWwgY2hhciB5eWNoYXJhdChpbnQgcG9zKSB7Ci0gICAgcmV0dXJuIHp6QnVmZmVyW3p6U3RhcnRSZWFkK3Bvc107Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgdGV4dCByZWdpb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgaW50IHl5bGVuZ3RoKCkgewotICAgIHJldHVybiB6ek1hcmtlZFBvcy16elN0YXJ0UmVhZDsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJlcG9ydHMgYW4gZXJyb3IgdGhhdCBvY2N1cmVkIHdoaWxlIHNjYW5uaW5nLgotICAgKgotICAgKiBJbiBhIHdlbGxmb3JtZWQgc2Nhbm5lciAobm8gb3Igb25seSBjb3JyZWN0IHVzYWdlIG9mIAotICAgKiB5eXB1c2hiYWNrKGludCkgYW5kIGEgbWF0Y2gtYWxsIGZhbGxiYWNrIHJ1bGUpIHRoaXMgbWV0aG9kIAotICAgKiB3aWxsIG9ubHkgYmUgY2FsbGVkIHdpdGggdGhpbmdzIHRoYXQgIkNhbid0IFBvc3NpYmx5IEhhcHBlbiIuCi0gICAqIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgc29tZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZwotICAgKiAoZS5nLiBhIEpGbGV4IGJ1ZyBwcm9kdWNpbmcgYSBmYXVsdHkgc2Nhbm5lciBldGMuKS4KLSAgICoKLSAgICogVXN1YWwgc3ludGF4L3NjYW5uZXIgbGV2ZWwgZXJyb3IgaGFuZGxpbmcgc2hvdWxkIGJlIGRvbmUKLSAgICogaW4gZXJyb3IgZmFsbGJhY2sgcnVsZXMuCi0gICAqCi0gICAqIEBwYXJhbSAgIGVycm9yQ29kZSAgdGhlIGNvZGUgb2YgdGhlIGVycm9ybWVzc2FnZSB0byBkaXNwbGF5Ci0gICAqLwotICBwcml2YXRlIHZvaWQgenpTY2FuRXJyb3IoaW50IGVycm9yQ29kZSkgewotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIHRyeSB7Ci0gICAgICBtZXNzYWdlID0gWlpfRVJST1JfTVNHW2Vycm9yQ29kZV07Ci0gICAgfQotICAgIGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZSA9IFpaX0VSUk9SX01TR1taWl9VTktOT1dOX0VSUk9SXTsKLSAgICB9Ci0KLSAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7Ci0gIH0gCi0KLQotICAvKioKLSAgICogUHVzaGVzIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgYmFjayBpbnRvIHRoZSBpbnB1dCBzdHJlYW0uCi0gICAqCi0gICAqIFRoZXkgd2lsbCBiZSByZWFkIGFnYWluIGJ5IHRoZW4gbmV4dCBjYWxsIG9mIHRoZSBzY2FubmluZyBtZXRob2QKLSAgICoKLSAgICogQHBhcmFtIG51bWJlciAgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlYWQgYWdhaW4uCi0gICAqICAgICAgICAgICAgICAgIFRoaXMgbnVtYmVyIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiB5eWxlbmd0aCgpIQotICAgKi8KLSAgcHVibGljIHZvaWQgeXlwdXNoYmFjayhpbnQgbnVtYmVyKSAgewotICAgIGlmICggbnVtYmVyID4geXlsZW5ndGgoKSApCi0gICAgICB6elNjYW5FcnJvcihaWl9QVVNIQkFDS18yQklHKTsKLQotICAgIHp6TWFya2VkUG9zIC09IG51bWJlcjsKLSAgfQotCi0KLSAgLyoqCi0gICAqIENvbnRhaW5zIHVzZXIgRU9GLWNvZGUsIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgZXhhY3RseSBvbmNlLAotICAgKiB3aGVuIHRoZSBlbmQgb2YgZmlsZSBpcyByZWFjaGVkCi0gICAqLwotICBwcml2YXRlIHZvaWQgenpEb0VPRigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICBpZiAoIXp6RU9GRG9uZSkgewotICAgICAgenpFT0ZEb25lID0gdHJ1ZTsKLSAgICAgIHl5Y2xvc2UoKTsKLSAgICB9Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXN1bWVzIHNjYW5uaW5nIHVudGlsIHRoZSBuZXh0IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLAotICAgKiB0aGUgZW5kIG9mIGlucHV0IGlzIGVuY291bnRlcmVkIG9yIGFuIEkvTy1FcnJvciBvY2N1cnMuCi0gICAqCi0gICAqIEByZXR1cm4gICAgICB0aGUgbmV4dCB0b2tlbgotICAgKiBAZXhjZXB0aW9uICAgamF2YS5pby5JT0V4Y2VwdGlvbiAgaWYgYW55IEkvTy1FcnJvciBvY2N1cnMKLSAgICovCi0gIHB1YmxpYyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCBuZXh0X3Rva2VuKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgIGludCB6eklucHV0OwotICAgIGludCB6ekFjdGlvbjsKLQotICAgIC8vIGNhY2hlZCBmaWVsZHM6Ci0gICAgaW50IHp6Q3VycmVudFBvc0w7Ci0gICAgaW50IHp6TWFya2VkUG9zTDsKLSAgICBpbnQgenpFbmRSZWFkTCA9IHp6RW5kUmVhZDsKLSAgICBjaGFyIFtdIHp6QnVmZmVyTCA9IHp6QnVmZmVyOwotICAgIGNoYXIgW10genpDTWFwTCA9IFpaX0NNQVA7Ci0KLSAgICBpbnQgW10genpUcmFuc0wgPSBaWl9UUkFOUzsKLSAgICBpbnQgW10genpSb3dNYXBMID0gWlpfUk9XTUFQOwotICAgIGludCBbXSB6ekF0dHJMID0gWlpfQVRUUklCVVRFOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIHp6TWFya2VkUG9zTCA9IHp6TWFya2VkUG9zOwotCi0gICAgICBib29sZWFuIHp6UiA9IGZhbHNlOwotICAgICAgZm9yICh6ekN1cnJlbnRQb3NMID0genpTdGFydFJlYWQ7IHp6Q3VycmVudFBvc0wgPCB6ek1hcmtlZFBvc0w7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenpDdXJyZW50UG9zTCsrKSB7Ci0gICAgICAgIHN3aXRjaCAoenpCdWZmZXJMW3p6Q3VycmVudFBvc0xdKSB7Ci0gICAgICAgIGNhc2UgJ1x1MDAwQic6Ci0gICAgICAgIGNhc2UgJ1x1MDAwQyc6Ci0gICAgICAgIGNhc2UgJ1x1MDA4NSc6Ci0gICAgICAgIGNhc2UgJ1x1MjAyOCc6Ci0gICAgICAgIGNhc2UgJ1x1MjAyOSc6Ci0gICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgeXljb2x1bW4gPSAwOwotICAgICAgICAgIHp6UiA9IGZhbHNlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdccic6Ci0gICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgeXljb2x1bW4gPSAwOwotICAgICAgICAgIHp6UiA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICBpZiAoenpSKQotICAgICAgICAgICAgenpSID0gZmFsc2U7Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB5eWxpbmUrKzsKLSAgICAgICAgICAgIHl5Y29sdW1uID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgenpSID0gZmFsc2U7Ci0gICAgICAgICAgeXljb2x1bW4rKzsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoenpSKSB7Ci0gICAgICAgIC8vIHBlZWsgb25lIGNoYXJhY3RlciBhaGVhZCBpZiBpdCBpcyBcbiAoaWYgd2UgaGF2ZSBjb3VudGVkIG9uZSBsaW5lIHRvbyBtdWNoKQotICAgICAgICBib29sZWFuIHp6UGVlazsKLSAgICAgICAgaWYgKHp6TWFya2VkUG9zTCA8IHp6RW5kUmVhZEwpCi0gICAgICAgICAgenpQZWVrID0genpCdWZmZXJMW3p6TWFya2VkUG9zTF0gPT0gJ1xuJzsKLSAgICAgICAgZWxzZSBpZiAoenpBdEVPRikKLSAgICAgICAgICB6elBlZWsgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYm9vbGVhbiBlb2YgPSB6elJlZmlsbCgpOwotICAgICAgICAgIHp6RW5kUmVhZEwgPSB6ekVuZFJlYWQ7Ci0gICAgICAgICAgenpNYXJrZWRQb3NMID0genpNYXJrZWRQb3M7Ci0gICAgICAgICAgenpCdWZmZXJMID0genpCdWZmZXI7Ci0gICAgICAgICAgaWYgKGVvZikgCi0gICAgICAgICAgICB6elBlZWsgPSBmYWxzZTsKLSAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgenpQZWVrID0genpCdWZmZXJMW3p6TWFya2VkUG9zTF0gPT0gJ1xuJzsKLSAgICAgICAgfQotICAgICAgICBpZiAoenpQZWVrKSB5eWxpbmUtLTsKLSAgICAgIH0KLSAgICAgIHp6QWN0aW9uID0gLTE7Ci0KLSAgICAgIHp6Q3VycmVudFBvc0wgPSB6ekN1cnJlbnRQb3MgPSB6elN0YXJ0UmVhZCA9IHp6TWFya2VkUG9zTDsKLSAgCi0gICAgICB6elN0YXRlID0gWlpfTEVYU1RBVEVbenpMZXhpY2FsU3RhdGVdOwotCi0KLSAgICAgIHp6Rm9yQWN0aW9uOiB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgCi0gICAgICAgICAgaWYgKHp6Q3VycmVudFBvc0wgPCB6ekVuZFJlYWRMKQotICAgICAgICAgICAgenpJbnB1dCA9IHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMKytdOwotICAgICAgICAgIGVsc2UgaWYgKHp6QXRFT0YpIHsKLSAgICAgICAgICAgIHp6SW5wdXQgPSBZWUVPRjsKLSAgICAgICAgICAgIGJyZWFrIHp6Rm9yQWN0aW9uOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIHN0b3JlIGJhY2sgY2FjaGVkIHBvc2l0aW9ucwotICAgICAgICAgICAgenpDdXJyZW50UG9zICA9IHp6Q3VycmVudFBvc0w7Ci0gICAgICAgICAgICB6ek1hcmtlZFBvcyAgID0genpNYXJrZWRQb3NMOwotICAgICAgICAgICAgYm9vbGVhbiBlb2YgPSB6elJlZmlsbCgpOwotICAgICAgICAgICAgLy8gZ2V0IHRyYW5zbGF0ZWQgcG9zaXRpb25zIGFuZCBwb3NzaWJseSBuZXcgYnVmZmVyCi0gICAgICAgICAgICB6ekN1cnJlbnRQb3NMICA9IHp6Q3VycmVudFBvczsKLSAgICAgICAgICAgIHp6TWFya2VkUG9zTCAgID0genpNYXJrZWRQb3M7Ci0gICAgICAgICAgICB6ekJ1ZmZlckwgICAgICA9IHp6QnVmZmVyOwotICAgICAgICAgICAgenpFbmRSZWFkTCAgICAgPSB6ekVuZFJlYWQ7Ci0gICAgICAgICAgICBpZiAoZW9mKSB7Ci0gICAgICAgICAgICAgIHp6SW5wdXQgPSBZWUVPRjsKLSAgICAgICAgICAgICAgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgenpJbnB1dCA9IHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMKytdOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpbnQgenpOZXh0ID0genpUcmFuc0xbIHp6Um93TWFwTFt6elN0YXRlXSArIHp6Q01hcExbenpJbnB1dF0gXTsKLSAgICAgICAgICBpZiAoenpOZXh0ID09IC0xKSBicmVhayB6ekZvckFjdGlvbjsKLSAgICAgICAgICB6elN0YXRlID0genpOZXh0OwotCi0gICAgICAgICAgaW50IHp6QXR0cmlidXRlcyA9IHp6QXR0ckxbenpTdGF0ZV07Ci0gICAgICAgICAgaWYgKCAoenpBdHRyaWJ1dGVzICYgMSkgPT0gMSApIHsKLSAgICAgICAgICAgIHp6QWN0aW9uID0genpTdGF0ZTsKLSAgICAgICAgICAgIHp6TWFya2VkUG9zTCA9IHp6Q3VycmVudFBvc0w7Ci0gICAgICAgICAgICBpZiAoICh6ekF0dHJpYnV0ZXMgJiA4KSA9PSA4ICkgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gc3RvcmUgYmFjayBjYWNoZWQgcG9zaXRpb24KLSAgICAgIHp6TWFya2VkUG9zID0genpNYXJrZWRQb3NMOwotCi0gICAgICBzd2l0Y2ggKHp6QWN0aW9uIDwgMCA/IHp6QWN0aW9uIDogWlpfQUNUSU9OW3p6QWN0aW9uXSkgewotICAgICAgICBjYXNlIDc0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1IpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JVEVNKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTM6IGJyZWFrOwotICAgICAgICBjYXNlIDQ2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgODE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTU6IGJyZWFrOwotICAgICAgICBjYXNlIDE1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVFVQUxTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTY6IGJyZWFrOwotICAgICAgICBjYXNlIDM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlRFR0VSLCBuZXcgQmlnSW50ZWdlcih5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FUSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDk4OiBicmVhazsKLSAgICAgICAgY2FzZSA3MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVMRU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQU1FU1BBQ0UpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDA6IGJyZWFrOwotICAgICAgICBjYXNlIDM0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSVMpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDE6IGJyZWFrOwotICAgICAgICBjYXNlIDIzOiAKLSAgICAgICAgICB7IC8vIGdldCByaWQgb2YgcXVvdGVzCi0JCQkJU3RyaW5nIHN0ciA9IHl5dGV4dCgpOwotCQkJCWFzc2VydCBzdHIubGVuZ3RoKCkgPj0gMjsKLQkJCQlyZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNUUklORywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkxpdGVyYWxVdGlscy51bnF1b3RlKHN0cikpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDI6IGJyZWFrOwotICAgICAgICBjYXNlIDE6IAotICAgICAgICAgIHsgU3RyaW5nIGVyciA9ICJVbmtub3duIGNoYXJhY3RlciBhdCBsaW5lICIgKyBsaW5lbm8oKTsgCi0JCWVyciArPSAiIGNvbCAiICsgY29sbm8oKTsKLQkJZXJyICs9ICI6ICIgKyB5eXRleHQoKTsgCi0JCQkgICAgIAotCQl0aHJvdyBuZXcgSkZsZXhFcnJvcihlcnIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDM6IGJyZWFrOwotICAgICAgICBjYXNlIDIwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUEpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDQ6IGJyZWFrOwotICAgICAgICBjYXNlIDcwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRVNTX0xFU1MpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDc6IGJyZWFrOwotICAgICAgICBjYXNlIDY1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVFJFQVQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDg6IGJyZWFrOwotICAgICAgICBjYXNlIDEzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU1RBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwOTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5VTklPTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExMDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0xMQVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTE6IGJyZWFrOwotICAgICAgICBjYXNlIDg1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0VMRU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTI6IGJyZWFrOwotICAgICAgICBjYXNlIDM1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTM6IGJyZWFrOwotICAgICAgICBjYXNlIDQzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uT1IpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTQ6IGJyZWFrOwotICAgICAgICBjYXNlIDI1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9URE9UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE1OiBicmVhazsKLSAgICAgICAgY2FzZSA4MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRZUEVTV0lUQ0gpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTY6IGJyZWFrOwotICAgICAgICBjYXNlIDU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQ05BTUUsIHl5dGV4dCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE3OiBicmVhazsKLSAgICAgICAgY2FzZSAyNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRFQ0lNQUwsIG5ldyBCaWdEZWNpbWFsKHl5dGV4dCgpKSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExODogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVF9TWU0pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTk6IGJyZWFrOwotICAgICAgICBjYXNlIDI5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU0VRVUFMKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTIwOiBicmVhazsKLSAgICAgICAgY2FzZSAyNjogCi0gICAgICAgICAgeyBjb21tZW50TGV2ZWwrKzsgLy8gaW50IG92ZXJmbG93ID1QCi0JCQkgIHl5YmVnaW4oQ09NTUVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0NVTUVOVF9OT0RFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTIyOiBicmVhazsKLSAgICAgICAgY2FzZSAzMzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPUldBUkRfU0xBU0hTTEFTSCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT1JXQVJEX1NMQVNIKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI0OiBicmVhazsKLSAgICAgICAgY2FzZSA2NzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVYQ0VQVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUkVDRURJTkdfU0lCTElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlNUQU5DRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTFNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI4OiBicmVhazsKLSAgICAgICAgY2FzZSA0NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI5OiBicmVhazsKLSAgICAgICAgY2FzZSA0NzogCi0gICAgICAgICAgeyBjb21tZW50TGV2ZWwrKzsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMwOiBicmVhazsKLSAgICAgICAgY2FzZSAzNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMxOiBicmVhazsKLSAgICAgICAgY2FzZSA0MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRPKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMyOiBicmVhazsKLSAgICAgICAgY2FzZSA4NDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVNUFRZX1NFUVVFTkNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMzOiBicmVhazsKLSAgICAgICAgY2FzZSA4MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBSRUNFRElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzNDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSRVFVQUwpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzU6IGJyZWFrOwotICAgICAgICBjYXNlIDg3OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1JfT1JfU0VMRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVFRSSUJVVEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzc6IGJyZWFrOwotICAgICAgICBjYXNlIDg2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0FUVFJJQlVURSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT0xMT1dJTkcpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzk6IGJyZWFrOwotICAgICAgICBjYXNlIDUyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9SKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQwOiBicmVhazsKLSAgICAgICAgY2FzZSAxNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBJUEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDE6IGJyZWFrOwotICAgICAgICBjYXNlIDIyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUVVFU1RJT05NQVJLKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQyOiBicmVhazsKLSAgICAgICAgY2FzZSAzNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQzOiBicmVhazsKLSAgICAgICAgY2FzZSA3NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOVEVSU0VDVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDg6IAotICAgICAgICAgIHsgY29tbWVudExldmVsLS07IAotCQkJICBpZihjb21tZW50TGV2ZWwgPT0gMCkKLQkJICAgICAgICAgIAl5eWJlZ2luKFlZSU5JVElBTCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5PRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DSElMRCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ORSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TRUxGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQ5OiBicmVhazsKLSAgICAgICAgY2FzZSAyNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OQ09MT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTA6IGJyZWFrOwotICAgICAgICBjYXNlIDUwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRElWKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUxOiBicmVhazsKLSAgICAgICAgY2FzZSA4ODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPTExPV0lOR19TSUJMSU5HKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUyOiBicmVhazsKLSAgICAgICAgY2FzZSA2MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRFWFQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTM6IGJyZWFrOwotICAgICAgICBjYXNlIDY4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUkVUVVJOKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU0OiBicmVhazsKLSAgICAgICAgY2FzZSA1MzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1PRCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBMVVMpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTY6IGJyZWFrOwotICAgICAgICBjYXNlIDI4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9URVFVQUxTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU3OiBicmVhazsKLSAgICAgICAgY2FzZSAzMjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVJfR1JFQVRFUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FVkVSWSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DQVNUQUJMRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UX09SX1NFTEYpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjE6IGJyZWFrOwotICAgICAgICBjYXNlIDc2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0FUSVNGSUVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTYyOiBicmVhazsKLSAgICAgICAgY2FzZSA5MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBST0NFU1NJTkdfSU5TVFJVQ1RJT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjM6IGJyZWFrOwotICAgICAgICBjYXNlIDE2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU1RIQU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjQ6IGJyZWFrOwotICAgICAgICBjYXNlIDU0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0FTVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5SUEFSKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY2OiBicmVhazsKLSAgICAgICAgY2FzZSAyOiAKLSAgICAgICAgICB7IC8qIGlnbm9yZSAqLwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjc6IGJyZWFrOwotICAgICAgICBjYXNlIDEwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEJSQUNLRVQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjg6IGJyZWFrOwotICAgICAgICBjYXNlIDYwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9ERSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JRElWKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTcwOiBicmVhazsKLSAgICAgICAgY2FzZSA0OTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVUJMRSwgbmV3IERvdWJsZSh5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzE6IGJyZWFrOwotICAgICAgICBjYXNlIDYxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVEhFTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TT01FKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTczOiBicmVhazsKLSAgICAgICAgY2FzZSA2OTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBBUkVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1JTlVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc1OiBicmVhazsKLSAgICAgICAgY2FzZSA0MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc2OiBicmVhazsKLSAgICAgICAgY2FzZSA0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc3OiBicmVhazsKLSAgICAgICAgY2FzZSAxMTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlJCUkFDS0VUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc4OiBicmVhazsKLSAgICAgICAgY2FzZSAxNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzk6IGJyZWFrOwotICAgICAgICBjYXNlIDUxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5EKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTgwOiBicmVhazsKLSAgICAgICAgY2FzZSA4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTFBBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE4MTogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTgyOiBicmVhazsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgaWYgKHp6SW5wdXQgPT0gWVlFT0YgJiYgenpTdGFydFJlYWQgPT0genpDdXJyZW50UG9zKSB7Ci0gICAgICAgICAgICB6ekF0RU9GID0gdHJ1ZTsKLSAgICAgICAgICAgIHp6RG9FT0YoKTsKLSAgICAgICAgICAgICAgeyByZXR1cm4gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKHN5bS5FT0YpOyB9Ci0gICAgICAgICAgfSAKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHp6U2NhbkVycm9yKFpaX05PX01BVENIKTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMveHBhdGguY3VwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMveHBhdGguY3VwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZThlOWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL3hwYXRoLmN1cAorKysgL2Rldi9udWxsCkBAIC0xLDc1NiArMCwwIEBACi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0vLyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAqCi0vLyAqIENvbnRyaWJ1dG9yczoKLS8vICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLS8vICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjk4MzMgLSBBIHdvcmsgYXJvdW5kIGZvciB0aGUga2V5d29yZCBpbiBub2RlIGlzc3VlLgotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4MzIxNCAtIGZpeCBJRiBUSEVOIEVMU0UgcGFyc2luZyBhbmQgdXBkYXRlIGdyYW1tYXJzCi0vLyAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIEZpeGVkIFdpbGRjYXJkIGFuZCBOQ05hbWUgaXNzdWUuIAotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI5NzcwNyAtIE1pc3NpbmcgdGhlIGVtcHR5LXNlcXVlbmNlKCkgdHlwZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0gCi1wYXJzZXIgY29kZSAJezoKLQotcHVibGljIHZvaWQgcmVwb3J0X2Vycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgaW5mbykgewotCVN0cmluZyBlcnIgPSAiUGFyc2VyIGVycm9yOiAiOwotCi0JWFBhdGhGbGV4IGxleGVyID0gKFhQYXRoRmxleCkgZ2V0U2Nhbm5lcigpOwotCi0JZXJyICs9ICJsaW5lICIgKyBsZXhlci5saW5lbm8oKTsKLQllcnIgKz0gIiBjb2wgIiArIGxleGVyLmNvbG5vKCk7Ci0JZXJyICs9ICI6ICIgKyBsZXhlci55eXRleHQoKTsKLQotCQotCXRocm93IG5ldyBDdXBFcnJvcihlcnIpOwotfQotOn0KLQotCi0KLXRlcm1pbmFsIExCUkFDS0VULCBSQlJBQ0tFVCwgTFBBUiwgUlBBUjsKLXRlcm1pbmFsIFBMVVMsIE1JTlVTLCBTVEFSLCBQSVBFOwotdGVybWluYWwgRVFVQUxTLCBOT1RFUVVBTFMsIExFU1NUSEFOLCBMRVNTRVFVQUwsIEdSRUFURVIsIEdSRUFURVJFUVVBTDsKLXRlcm1pbmFsIExFU1NfTEVTUywgR1JFQVRFUl9HUkVBVEVSOwotdGVybWluYWwgRk9SV0FSRF9TTEFTSCwgRk9SV0FSRF9TTEFTSFNMQVNIOwotdGVybWluYWwgQ09MT05DT0xPTiwgQVRfU1lNLCBET1RET1QsIENPTE9OLCBDT01NQSwgRE9MTEFSLCBET1QsIFFVRVNUSU9OTUFSSzsKLQotdGVybWluYWwgU3RyaW5nIENISUxELCBERVNDRU5EQU5ULCBBVFRSSUJVVEUsIFNFTEYsIERFU0NFTkRBTlRfT1JfU0VMRjsKLXRlcm1pbmFsIFN0cmluZyBGT0xMT1dJTkdfU0lCTElORywgRk9MTE9XSU5HLCBOQU1FU1BBQ0UsIFBBUkVOVDsKLXRlcm1pbmFsIFN0cmluZyBBTkNFU1RPUiwgUFJFQ0VESU5HX1NJQkxJTkcsIFBSRUNFRElORywgQU5DRVNUT1JfT1JfU0VMRjsKLXRlcm1pbmFsIEVRLCBORSwgTFQsIExFLCBHVCwgR0U7Ci10ZXJtaW5hbCBTdHJpbmcgRElWLCBJRElWLCBNT0Q7Ci10ZXJtaW5hbCBTdHJpbmcgVU5JT04sIElOVEVSU0VDVCwgRVhDRVBUOwotdGVybWluYWwgU3RyaW5nIElOU1RBTkNFLCBPRiwgVFJFQVQsIEFTLCBDQVNUQUJMRSwgQ0FTVCwgSVM7Ci10ZXJtaW5hbCBTdHJpbmcgRk9SLCBJTiwgUkVUVVJOLCBTQVRJU0ZJRVMsIFRPOwotdGVybWluYWwgU3RyaW5nIFNPTUUsIEVWRVJZOwotdGVybWluYWwgU3RyaW5nIElGLCBUSEVOLCBFTFNFOwotdGVybWluYWwgU3RyaW5nIEFORCwgT1I7Ci10ZXJtaW5hbCBFTVBUWV9TRVFVRU5DRSwgSVRFTSwgTk9ERSwgRE9DVU1FTlRfTk9ERSwgVEVYVCwgQ09NTUVOVDsKLXRlcm1pbmFsIFBST0NFU1NJTkdfSU5TVFJVQ1RJT04sIFNDSEVNQV9BVFRSSUJVVEUsIEVMRU1FTlQsIFNDSEVNQV9FTEVNRU5UOwotLy8gVW51c2VkIGluIFhQYXRoIDIsIGJ1dCByZXNlcnZlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFhRdWVyeQotdGVybWluYWwgVFlQRVNXSVRDSDsKLQotdGVybWluYWwgQmlnSW50ZWdlciBJTlRFR0VSOwotdGVybWluYWwgRG91YmxlIERPVUJMRTsKLXRlcm1pbmFsIEJpZ0RlY2ltYWwgREVDSU1BTDsKLXRlcm1pbmFsIFN0cmluZyBTVFJJTkcsIE5DTkFNRTsKLQotCi1ub24gdGVybWluYWwgU3RyaW5nIFByZWZpeCwgTG9jYWxQYXJ0LCBOQ05hbWUsIFVucXVhbGlmaWVkTkNOYW1lLCBVbnF1YWxpZmllZExvY2FsUGFydDsKLW5vbiB0ZXJtaW5hbCBTdHJpbmdMaXRlcmFsIFN0cmluZ0xpdGVyYWw7Ci1ub24gdGVybWluYWwgUU5hbWUgRWxlbWVudERlY2xhcmF0aW9uLCBFbGVtZW50TmFtZU9yV2lsZGNhcmQsIFR5cGVOYW1lLCBFbGVtZW50TmFtZTsKLW5vbiB0ZXJtaW5hbCBRTmFtZSBBdHRyaWJ1dGVEZWNsYXJhdGlvbiwgQXR0cmliTmFtZU9yV2lsZGNhcmQsIEF0dHJpYnV0ZU5hbWU7Ci1ub24gdGVybWluYWwgUU5hbWUgQXRvbWljVHlwZSwgUU5hbWUsIFZhck5hbWUsIFdpbGRjYXJkOwotbm9uIHRlcm1pbmFsIEludGVnZXIgT2NjdXJyZW5jZUluZGljYXRvciwgUmV2ZXJzZUF4aXMsIEZvcndhcmRBeGlzLCBOb2RlQ29tcDsKLW5vbiB0ZXJtaW5hbCBJdGVtVHlwZSBJdGVtVHlwZTsKLW5vbiB0ZXJtaW5hbCBDb2xsZWN0aW9uIEZ1bmN0aW9uQ2FsbE1pZGRsZSwgUGFyZW50aGVzaXplZEV4cHIsIEV4cHI7Ci1ub24gdGVybWluYWwgQ29sbGVjdGlvbiBQcmVkaWNhdGVMaXN0LCBRdWFudGlmaWVkRXhwck1pZGRsZSwgU2ltcGxlRm9yQ2xhdXNlOwotbm9uIHRlcm1pbmFsIFByaW1hcnlFeHByIFByaW1hcnlFeHByOwotbm9uIHRlcm1pbmFsIE5vZGVUZXN0IE5vZGVUZXN0Owotbm9uIHRlcm1pbmFsIFJldmVyc2VTdGVwIFJldmVyc2VTdGVwLCBBYmJyZXZSZXZlcnNlU3RlcDsKLW5vbiB0ZXJtaW5hbCBGb3J3YXJkU3RlcCBGb3J3YXJkU3RlcCwgQWJicmV2Rm9yd2FyZFN0ZXA7Ci1ub24gdGVybWluYWwgU3RlcEV4cHIgU3RlcEV4cHI7Ci1ub24gdGVybWluYWwgWFBhdGhFeHByIFJlbGF0aXZlUGF0aEV4cHI7Ci1ub24gdGVybWluYWwgRXhwciBVbmFyeUV4cHI7Ci1ub24gdGVybWluYWwgU2luZ2xlVHlwZSBTaW5nbGVUeXBlOwotbm9uIHRlcm1pbmFsIFNlcXVlbmNlVHlwZSBTZXF1ZW5jZVR5cGU7Ci1ub24gdGVybWluYWwgRXhwciBUcmVhdEV4cHIsIENhc3RhYmxlRXhwciwgSW5zdGFuY2VvZkV4cHIsIENhc3RFeHByOwotbm9uIHRlcm1pbmFsIEV4cHIgVW5pb25FeHByLCBNdWx0aXBsaWNhdGl2ZUV4cHIsIEludGVyc2VjdEV4Y2VwdEV4cHIsIEV4cHJTaW5nbGU7Ci1ub24gdGVybWluYWwgRXhwciBBZGRpdGl2ZUV4cHI7Ci1ub24gdGVybWluYWwgSW50ZWdlciBHZW5lcmFsQ29tcCwgVmFsdWVDb21wOwotbm9uIHRlcm1pbmFsIEV4cHIgQW5kRXhwciwgT3JFeHByLCBSYW5nZUV4cHIsIENvbXBhcmlzb25FeHByOwotbm9uIHRlcm1pbmFsIE5hbWVUZXN0IE5hbWVUZXN0Owotbm9uIHRlcm1pbmFsIEtpbmRUZXN0IEtpbmRUZXN0Owotbm9uIHRlcm1pbmFsIExpdGVyYWwgTGl0ZXJhbDsKLW5vbiB0ZXJtaW5hbCBWYXJSZWYgVmFyUmVmOwotbm9uIHRlcm1pbmFsIENudHhJdGVtRXhwciBDb250ZXh0SXRlbUV4cHI7Ci1ub24gdGVybWluYWwgRnVuY3Rpb25DYWxsIEZ1bmN0aW9uQ2FsbDsKLW5vbiB0ZXJtaW5hbCBOdW1lcmljTGl0ZXJhbCBOdW1lcmljTGl0ZXJhbDsKLW5vbiB0ZXJtaW5hbCBEZWNpbWFsTGl0ZXJhbCBEZWNpbWFsTGl0ZXJhbDsKLW5vbiB0ZXJtaW5hbCBJbnRlZ2VyTGl0ZXJhbCBJbnRlZ2VyTGl0ZXJhbDsKLW5vbiB0ZXJtaW5hbCBEb3VibGVMaXRlcmFsIERvdWJsZUxpdGVyYWw7Ci1ub24gdGVybWluYWwgRG9jdW1lbnRUZXN0IERvY3VtZW50VGVzdDsKLW5vbiB0ZXJtaW5hbCBUZXh0VGVzdCBUZXh0VGVzdDsKLW5vbiB0ZXJtaW5hbCBDb21tZW50VGVzdCBDb21tZW50VGVzdDsKLW5vbiB0ZXJtaW5hbCBQSVRlc3QgUElUZXN0Owotbm9uIHRlcm1pbmFsIEF0dHJpYnV0ZVRlc3QgQXR0cmlidXRlVGVzdDsKLW5vbiB0ZXJtaW5hbCBBbnlLaW5kVGVzdCBBbnlLaW5kVGVzdDsKLW5vbiB0ZXJtaW5hbCBFbGVtZW50VGVzdCBFbGVtZW50VGVzdDsKLW5vbiB0ZXJtaW5hbCBTY2hlbWFBdHRyVGVzdCBTY2hlbWFBdHRyaWJ1dGVUZXN0Owotbm9uIHRlcm1pbmFsIFNjaGVtYUVsZW1UZXN0IFNjaGVtYUVsZW1lbnRUZXN0Owotbm9uIHRlcm1pbmFsIFhQYXRoIFhQYXRoOwotbm9uIHRlcm1pbmFsIEZvckV4cHIgRm9yRXhwcjsKLW5vbiB0ZXJtaW5hbCBRdWFudGlmaWVkRXhwciBRdWFudGlmaWVkRXhwcjsKLW5vbiB0ZXJtaW5hbCBJZkV4cHIgSWZFeHByOwotbm9uIHRlcm1pbmFsIFhQYXRoRXhwciBQYXRoRXhwciwgVmFsdWVFeHByOwotbm9uIHRlcm1pbmFsIEF4aXNTdGVwIEF4aXNTdGVwOwotbm9uIHRlcm1pbmFsIEZpbHRlckV4cHIgRmlsdGVyRXhwcjsKLW5vbiB0ZXJtaW5hbCBDb2xsZWN0aW9uIFByZWRpY2F0ZTsKLQotcHJlY2VkZW5jZSBsZWZ0IFBMVVMsIE1JTlVTOwotcHJlY2VkZW5jZSBsZWZ0IFNUQVI7Ci1wcmVjZWRlbmNlIGxlZnQgQ09MT047Ci1wcmVjZWRlbmNlIGxlZnQgTkNOQU1FOwotcHJlY2VkZW5jZSBsZWZ0IENISUxELCBERVNDRU5EQU5ULCBBVFRSSUJVVEUsIFNFTEYsIERFU0NFTkRBTlRfT1JfU0VMRjsKLXByZWNlZGVuY2UgbGVmdCBGT0xMT1dJTkdfU0lCTElORywgRk9MTE9XSU5HLCBOQU1FU1BBQ0UsIFBBUkVOVDsKLXByZWNlZGVuY2UgbGVmdCBBTkNFU1RPUiwgUFJFQ0VESU5HX1NJQkxJTkcsIFBSRUNFRElORywgQU5DRVNUT1JfT1JfU0VMRjsKLXByZWNlZGVuY2UgbGVmdCBVTklPTiwgSU5URVJTRUNULCBFWENFUFQ7Ci1wcmVjZWRlbmNlIGxlZnQgSU5TVEFOQ0UsIE9GLCBUUkVBVCwgQVMsIENBU1RBQkxFLCBDQVNULCBJUzsKLXByZWNlZGVuY2UgbGVmdCBGT1IsIElOLCBSRVRVUk4sIFNBVElTRklFUywgVE87Ci1wcmVjZWRlbmNlIGxlZnQgU09NRSwgRVZFUlk7Ci1wcmVjZWRlbmNlIGxlZnQgSUYsIFRIRU4sIEVMU0U7Ci1wcmVjZWRlbmNlIGxlZnQgQU5ELCBPUjsKLXByZWNlZGVuY2UgbGVmdCBESVYsIElESVYsIE1PRDsKLQotCi0KLQotWFBhdGggICAgICAgICAgICAgOjo9IEV4cHI6ZXhwcyB7OiBSRVNVTFQgPSBuZXcgWFBhdGgoZXhwcyk7IDp9IDsKLQotRXhwciAgICAgICAgICAgICAgOjo9IEV4cHJTaW5nbGU6ZXggCi0JCQl7OiAKLQkJCQlDb2xsZWN0aW9uIGV4cHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJZXhwcy5hZGQoZXgpOwotCQkJCVJFU1VMVCA9IGV4cHM7Ci0JCQk6fQotICAgICAgICAgICAgICAgICAgICB8IEV4cHI6ZXhwcnMgQ09NTUEgRXhwclNpbmdsZTpleCAKLQkJICAgIAl7OiAKLQkJCQlleHBycy5hZGQoZXgpOwotCQkJCVJFU1VMVCA9IGV4cHJzOwotCQkJOn0gCi0JCSAgICA7Ci0KLUV4cHJTaW5nbGUgICAgICAgIDo6PSBGb3JFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgfCBRdWFudGlmaWVkRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgIHwgSWZFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgfCBPckV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgOwotCi1Gb3JFeHByICAgICAgICAgICA6Oj0gU2ltcGxlRm9yQ2xhdXNlOnBhaXJzIFJFVFVSTiBFeHByU2luZ2xlOmUgCi0JCQl7OgotCQkJCUZvckV4cHIgZmV4cCA9IG5ldyBGb3JFeHByKHBhaXJzLGUpOwotCQkJCVJFU1VMVCA9IGZleHA7Ci0JCQk6fQkKLQkJICAgIDsKLQotU2ltcGxlRm9yQ2xhdXNlICAgOjo9IEZPUiBET0xMQVIgVmFyTmFtZTp2IElOIEV4cHJTaW5nbGU6ZQotCQkJezoKLQkJCQlDb2xsZWN0aW9uIHBhaXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCVZhckV4cHJQYWlyIHAgPSBuZXcgVmFyRXhwclBhaXIodixlKTsKLQkJCQlwYWlycy5hZGQocCk7Ci0JCQkJUkVTVUxUID0gcGFpcnM7Ci0JCQk6fQotCQkJCi0gICAgICAgICAgICAgICAgICAgIHwgU2ltcGxlRm9yQ2xhdXNlOnBzIENPTU1BIERPTExBUiBWYXJOYW1lOnYgSU4gRXhwclNpbmdsZTplCi0JCSAgICAJezoKLQkJCQlWYXJFeHByUGFpciBwID0gbmV3IFZhckV4cHJQYWlyKHYsZSk7Ci0JCQkJcHMuYWRkKHApOwotCQkJCVJFU1VMVCA9IHBzOwotCQkJOn0JCi0JCSAgICA7Ci0KLVF1YW50aWZpZWRFeHByICAgICAgIDo6PSBTT01FIERPTExBUiBRdWFudGlmaWVkRXhwck1pZGRsZTpwYWlycyBTQVRJU0ZJRVMgRXhwclNpbmdsZTplCi0JCQl7OgotCQkJCVF1YW50aWZpZWRFeHByIHFlID0gbmV3IFF1YW50aWZpZWRFeHByKFF1YW50aWZpZWRFeHByLlNPTUUsCi0JCQkJCQkJCSAgICAgICBwYWlycywgZSk7Ci0JCQkJUkVTVUxUID0gcWU7Ci0JCQk6fQotICAgICAgICAgICAgICAgICAgICAgICB8IEVWRVJZIERPTExBUiBRdWFudGlmaWVkRXhwck1pZGRsZTpwYWlycyBTQVRJU0ZJRVMgRXhwclNpbmdsZTplCi0JCQl7OgotCQkJCVF1YW50aWZpZWRFeHByIHFlID0gbmV3IFF1YW50aWZpZWRFeHByKFF1YW50aWZpZWRFeHByLkFMTCwKLQkJCQkJCQkJICAgICAgIHBhaXJzLCBlKTsKLQkJCQlSRVNVTFQgPSBxZTsKLQkJCTp9Ci0JCSAgICAgICA7Ci0KLVF1YW50aWZpZWRFeHByTWlkZGxlIDo6PSBWYXJOYW1lOnYgSU4gRXhwclNpbmdsZTplCi0JCQl7OgotCQkJCUNvbGxlY3Rpb24gcGFpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBhaXJzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwYWlyczsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgUXVhbnRpZmllZEV4cHJNaWRkbGU6cHMgQ09NTUEgRE9MTEFSIFZhck5hbWU6diBJTiBFeHByU2luZ2xlOmUKLQkJICAgICAgIAl7OgotCQkJCVZhckV4cHJQYWlyIHAgPSBuZXcgVmFyRXhwclBhaXIodixlKTsKLQkJCQlwcy5hZGQocCk7Ci0JCQkJUkVTVUxUID0gcHM7Ci0JCQk6fQotCQkgICAgICAgOwotCi1JZkV4cHIgICAgICAgICAgICA6Oj0gSUYgTFBBUiBFeHByOmV4cHMgUlBBUiBUSEVOIEV4cHJTaW5nbGU6dCBFTFNFIEV4cHJTaW5nbGU6ZQotCQkJezogUkVTVUxUID0gbmV3IElmRXhwcihleHBzLCB0LCBlKTsgOn0KLQkJICAgIDsKLQotT3JFeHByICAgICAgICAgICAgOjo9IEFuZEV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fSAKLSAgICAgICAgICAgICAgICAgICAgfCBPckV4cHI6bCBPUiBBbmRFeHByOnIgezogUkVTVUxUID0gbmV3IE9yRXhwcihsLCByKTsgOn0KLQkJICAgIDsKLQotQW5kRXhwciAgICAgICAgICAgOjo9IENvbXBhcmlzb25FeHByOm4gezogUkVTVUxUID0gbjsgOn0gCi0gICAgICAgICAgICAgICAgICAgIHwgQW5kRXhwcjpsIEFORCBDb21wYXJpc29uRXhwcjpyCi0JCSAgICAJezogUkVTVUxUID0gbmV3IEFuZEV4cHIobCwgcik7IDp9Ci0JCSAgICA7Ci0KLUNvbXBhcmlzb25FeHByICAgIDo6PSBSYW5nZUV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICB8IFJhbmdlRXhwcjpsIFZhbHVlQ29tcDp0IFJhbmdlRXhwcjpyCi0JCQl7OiBSRVNVTFQgPSBuZXcgQ21wRXhwcihsLCByLCB0LmludFZhbHVlKCkpOyA6fQotICAgICAgICAgICAgICAgICAgICB8IFJhbmdlRXhwcjpsIEdlbmVyYWxDb21wOnQgUmFuZ2VFeHByOnIKLQkJCXs6IFJFU1VMVCA9IG5ldyBDbXBFeHByKGwsIHIsIHQuaW50VmFsdWUoKSk7IDp9Ci0gICAgICAgICAgICAgICAgICAgIHwgUmFuZ2VFeHByOmwgTm9kZUNvbXA6dCBSYW5nZUV4cHI6cgotCQkJezogUkVTVUxUID0gbmV3IENtcEV4cHIobCwgciwgdC5pbnRWYWx1ZSgpKTsgOn0KLQkJICAgIDsKLQotUmFuZ2VFeHByICAgICAgICAgOjo9IEFkZGl0aXZlRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICB8IEFkZGl0aXZlRXhwcjpsIFRPIEFkZGl0aXZlRXhwcjpyCi0JCSAgICAJezogUkVTVUxUID0gbmV3IFJhbmdlRXhwcihsLCByKTsgOn0JCi0JCSAgICA7Ci0KLUFkZGl0aXZlRXhwciAgICAgICAgOjo9IE11bHRpcGxpY2F0aXZlRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBZGRpdGl2ZUV4cHI6bCBQTFVTIE11bHRpcGxpY2F0aXZlRXhwcjpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgQWRkRXhwcihsLCByKTsgOn0KLQkJICAgICAgfCBBZGRpdGl2ZUV4cHI6bCBNSU5VUyBNdWx0aXBsaWNhdGl2ZUV4cHI6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IFN1YkV4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotTXVsdGlwbGljYXRpdmVFeHByICA6Oj0gVW5pb25FeHByOm4gezogUkVTVUxUID0gbjsgOn0gCi0gICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGl2ZUV4cHI6bCBTVEFSIFVuaW9uRXhwcjpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgTXVsRXhwcihsLCByKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aXZlRXhwcjpsIERJViBVbmlvbkV4cHI6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IERpdkV4cHIobCwgcik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGl2ZUV4cHI6bCBJRElWIFVuaW9uRXhwcjpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgSURpdkV4cHIobCwgcik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGl2ZUV4cHI6bCBNT0QgVW5pb25FeHByOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBNb2RFeHByKGwsIHIpOyA6fQotCQkgICAgICA7Ci0KLVVuaW9uRXhwciAgICAgICAgICAgOjo9IEludGVyc2VjdEV4Y2VwdEV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgVW5pb25FeHByOmwgVU5JT04gSW50ZXJzZWN0RXhjZXB0RXhwcjpyCi0JCSAgICAgICAgezogUkVTVUxUID0gbmV3IFVuaW9uRXhwcihsLCByKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFVuaW9uRXhwcjpsIFBJUEUgSW50ZXJzZWN0RXhjZXB0RXhwcjpyCi0JCSAgICAgICAgezogUkVTVUxUID0gbmV3IFBpcGVFeHByKGwsIHIpOyA6fQotCQkgICAgICA7Ci0KLUludGVyc2VjdEV4Y2VwdEV4cHIgOjo9IEluc3RhbmNlb2ZFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEludGVyc2VjdEV4Y2VwdEV4cHI6bCBJTlRFUlNFQ1QgSW5zdGFuY2VvZkV4cHI6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVyc2VjdEV4cHIobCwgcik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcnNlY3RFeGNlcHRFeHByOmwgRVhDRVBUIEluc3RhbmNlb2ZFeHByOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBFeGNlcHRFeHByKGwsIHIpOyA6fQotCQkgICAgICA7Ci0KLUluc3RhbmNlb2ZFeHByICAgICAgOjo9IFRyZWF0RXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBUcmVhdEV4cHI6bCBJTlNUQU5DRSBPRiBTZXF1ZW5jZVR5cGU6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEluc3RPZkV4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotVHJlYXRFeHByICAgICAgICAgICA6Oj0gQ2FzdGFibGVFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IENhc3RhYmxlRXhwcjpsIFRSRUFUIEFTIFNlcXVlbmNlVHlwZTpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgVHJlYXRBc0V4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotQ2FzdGFibGVFeHByICAgICAgICA6Oj0gQ2FzdEV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgQ2FzdEV4cHI6bCBDQVNUQUJMRSBBUyBTaW5nbGVUeXBlOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBDYXN0YWJsZUV4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotQ2FzdEV4cHIgICAgICAgICAgICA6Oj0gVW5hcnlFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFVuYXJ5RXhwcjpsIENBU1QgQVMgU2luZ2xlVHlwZTpyIAotCQkgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBDYXN0RXhwcihsLCByKTsgOn0KLQkJICAgICAgOwotICAgCi1VbmFyeUV4cHIgICAgICAgICAgIDo6PSBWYWx1ZUV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgTUlOVVMgVW5hcnlFeHByOmEgezogUkVTVUxUID0gbmV3IE1pbnVzRXhwcihhKTsgOn0KLQkJICAgICAgfCBQTFVTIFVuYXJ5RXhwcjphIHs6IFJFU1VMVCA9IG5ldyBQbHVzRXhwcihhKTsgOn0KLQkJICAgICAgOwotCi1WYWx1ZUV4cHIgICAgICAgICAgIDo6PSBQYXRoRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1HZW5lcmFsQ29tcCAgICAgICAgIDo6PSBFUVVBTFMKLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuRVFVQUxTKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IE5PVEVRVUFMUwotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5OT1RFUVVBTFMpOyA6fQotCQkgICAgICB8IExFU1NUSEFOCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFU1NUSEFOKTsgOn0KLQkJICAgICAgfCBMRVNTRVFVQUwKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTEVTU0VRVUFMKTsgOn0gCi0JCSAgICAgIHwgR1JFQVRFUgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HUkVBVEVSKTsgOn0KLQkJICAgICAgfCBHUkVBVEVSRVFVQUwKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1JFQVRFUkVRVUFMKTsgOn0gCi0JCSAgICAgIDsKLQotVmFsdWVDb21wICAgICAgICAgICA6Oj0gRVEJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5FUSk7IDp9IAotICAgICAgICAgICAgICAgICAgICAgIHwgTkUgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLk5FKTsgOn0KLQkJICAgICAgfCBMVCAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTFQpOyA6fQotCQkgICAgICB8IExFICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MRSk7IDp9Ci0JCSAgICAgIHwgR1QgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkdUKTsgOn0KLQkJICAgICAgfCBHRSAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HRSk7IDp9Ci0JCSAgICAgIDsKLQotTm9kZUNvbXAgICAgICAgICAgICA6Oj0gSVMgCSAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5JUyk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBMRVNTX0xFU1MgCQotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MRVNTX0xFU1MpOyA6fQotCQkgICAgICB8IEdSRUFURVJfR1JFQVRFUgkKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1JFQVRFUl9HUkVBVEVSKTsgOn0KLQkJICAgICAgOwotCi1QYXRoRXhwciAgICAgICAgICAgIDo6PSBGT1JXQVJEX1NMQVNIIHs6IFJFU1VMVCA9IG5ldyBYUGF0aEV4cHIoMSxudWxsKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEZPUldBUkRfU0xBU0ggUmVsYXRpdmVQYXRoRXhwcjpwCi0JCSAgICAgIAl7OgotCQkJCXAuc2V0X3NsYXNoZXMoMSk7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBGT1JXQVJEX1NMQVNIU0xBU0ggUmVsYXRpdmVQYXRoRXhwcjpwCi0JCSAgICAgIAl7OgotCQkJCXAuc2V0X3NsYXNoZXMoMik7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBSZWxhdGl2ZVBhdGhFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotCi1SZWxhdGl2ZVBhdGhFeHByICAgIDo6PSBTdGVwRXhwcjpzIHs6IFJFU1VMVCA9IG5ldyBYUGF0aEV4cHIoMCwoU3RlcEV4cHIpcyk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBSZWxhdGl2ZVBhdGhFeHByOnAgRk9SV0FSRF9TTEFTSCBTdGVwRXhwcjpzCi0JCSAgICAgIAl7OgotCQkJCXAuYWRkX3RhaWwoMSxzKTsKLQkJCQlSRVNVTFQgPSBwOwotCQkJOn0KLQkJICAgICAgfCBSZWxhdGl2ZVBhdGhFeHByOnAgRk9SV0FSRF9TTEFTSFNMQVNIIFN0ZXBFeHByOnMKLQkJICAgICAgCXs6Ci0JCQkJcC5hZGRfdGFpbCgyLHMpOwotCQkJCVJFU1VMVCA9IHA7Ci0JCQk6fQotCQkgICAgICA7Ci0KLVN0ZXBFeHByICAgICAgICAgICAgOjo9IEF4aXNTdGVwOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEZpbHRlckV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgICA7Ci0KLUF4aXNTdGVwICAgICAgICAgICAgOjo9IEZvcndhcmRTdGVwOnMgUHJlZGljYXRlTGlzdDpwIAotCQkJezogUkVTVUxUID0gbmV3IEF4aXNTdGVwKHMsIHApOyA6fQkKLSAgICAgICAgICAgICAgICAgICAgICB8IFJldmVyc2VTdGVwOnMgUHJlZGljYXRlTGlzdDpwCi0JCQl7OiBSRVNVTFQgPSBuZXcgQXhpc1N0ZXAocywgcCk7IDp9CQotCQkgICAgICA7Ci0KLUZvcndhcmRTdGVwICAgICAgICAgOjo9IEZvcndhcmRBeGlzOmEgTm9kZVRlc3Q6bgotCQkJezogUkVTVUxUID0gbmV3IEZvcndhcmRTdGVwKGEuaW50VmFsdWUoKSxuKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFiYnJldkZvcndhcmRTdGVwOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotCi1Gb3J3YXJkQXhpcyAgICAgICAgIDo6PSBDSElMRCBDT0xPTkNPTE9OIAotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuQ0hJTEQpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgREVTQ0VOREFOVCBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5ERVNDRU5EQU5UKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFUVFJJQlVURSBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5BVFRSSUJVVEUpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgU0VMRiBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5TRUxGKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IERFU0NFTkRBTlRfT1JfU0VMRiBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5ERVNDRU5EQU5UX09SX1NFTEYpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRk9MTE9XSU5HX1NJQkxJTkcgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuRk9MTE9XSU5HX1NJQkxJTkcpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRk9MTE9XSU5HIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkZPTExPV0lORyk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBOQU1FU1BBQ0UgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuTkFNRVNQQUNFKTsgOn0KLQkJICAgICAgOwotCi1BYmJyZXZGb3J3YXJkU3RlcCAgIDo6PSBBVF9TWU0gTm9kZVRlc3Q6bgotCQkJezogUkVTVUxUID0gbmV3IEZvcndhcmRTdGVwKEZvcndhcmRTdGVwLkFUX1NZTSwgbik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBOb2RlVGVzdDpuCi0JCQl7OiBSRVNVTFQgPSBuZXcgRm9yd2FyZFN0ZXAoRm9yd2FyZFN0ZXAuTk9ORSwgbik7IDp9Ci0JCSAgICAgIDsKLQotUmV2ZXJzZVN0ZXAgICAgICAgICA6Oj0gUmV2ZXJzZUF4aXM6YSBOb2RlVGVzdDpuCi0JCQl7OiAgUkVTVUxUID0gbmV3IFJldmVyc2VTdGVwKGEuaW50VmFsdWUoKSwgbik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBYmJyZXZSZXZlcnNlU3RlcDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICAgIDsKLQotUmV2ZXJzZUF4aXMgICAgICAgICA6Oj0gUEFSRU5UIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLlBBUkVOVCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBTkNFU1RPUiBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5BTkNFU1RPUik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBQUkVDRURJTkdfU0lCTElORyBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5QUkVDRURJTkdfU0lCTElORyk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBQUkVDRURJTkcgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuUFJFQ0VESU5HKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFOQ0VTVE9SX09SX1NFTEYgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuQU5DRVNUT1JfT1JfU0VMRik7IDp9Ci0JCSAgICAgIDsKLQotQWJicmV2UmV2ZXJzZVN0ZXAgICA6Oj0gRE9URE9UIAotCQkJezogUkVTVUxUID0gbmV3IFJldmVyc2VTdGVwKFJldmVyc2VTdGVwLkRPVERPVCxudWxsKTsgOn0KLQkJICAgICAgOwotCi1Ob2RlVGVzdCAgICAgICAgICAgIDo6PSBLaW5kVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBOYW1lVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICAgIDsKLSAgIAotTmFtZVRlc3QgICAgICAgICAgICA6Oj0gUU5hbWU6biAgICB7OiBSRVNVTFQgPSBuZXcgTmFtZVRlc3Qobik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBXaWxkY2FyZDpuIHs6IFJFU1VMVCA9IG5ldyBOYW1lVGVzdChuKTsgOn0KLQkJICAgICAgOwotCi0vLyBYWFg6IGhhdmUgc2VwIGNsYXNzIGZvciB3aWxkIGNhcmQuLi4uIG9yIHdoYXRldmVyLi4uCi0vLyBYWFg6IGlzICogPT0gKjoqID8/PwotV2lsZGNhcmQgICAgICAgICAgICA6Oj0gU1RBUiAJCSAgICB7OiBSRVNVTFQgPSBuZXcgUU5hbWUoIioiLCIqIik7IDp9Ci0vLyBYWFg6IHNvbWUxIGRpc2FtYmlndWF0ZSB0aGUgZ3JhbW1hcgotLy8gaS5lLiBnaXZlIGhpZ2hlciBwcmVjZWRlbmNlIHRvIGEgUU5hbWUgcmF0aGVyIHRoYW4gdG8gYSB3aWxkY2FyZAotLy8gICAgICAgICAgICAgICAgICAgICAgfCBOQ05hbWU6biBDT0xPTiBTVEFSIHs6IFJFU1VMVCA9IG5ldyBRTmFtZShuLCAiKiIpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgU1RBUiBDT0xPTiBOQ05hbWU6biB7OiBSRVNVTFQgPSBuZXcgUU5hbWUoIioiLCBuKTsgOn0KLQkJICAgICAgOwotCi1GaWx0ZXJFeHByICAgICAgICAgIDo6PSBQcmltYXJ5RXhwcjpwZSBQcmVkaWNhdGVMaXN0OmUKLQkJCXs6IFJFU1VMVCA9IG5ldyBGaWx0ZXJFeHByKHBlLCBlKTsgOn0gICAKLQkJICAgICAgOwotCi0vLyBYWFg6IENvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMhCi1QcmVkaWNhdGVMaXN0ICAgICAgIDo6PSBQcmVkaWNhdGVMaXN0OmMgUHJlZGljYXRlOnAKLQkJCXs6Ci0JCQkgICBjLmFkZChwKTsKLQkJCSAgIFJFU1VMVCA9IGM7Ci0JCQk6fQotICAgICAgICAgICAgICAgICAgICAgIHwgLyogZW1wdHkgKi8gezogUkVTVUxUID0gbmV3IEFycmF5TGlzdCgpOyA6fQotCQkgICAgICA7Ci0KLVByZWRpY2F0ZSAgICAgICAgICAgOjo9IExCUkFDS0VUIEV4cHI6ZSBSQlJBQ0tFVCB7OiBSRVNVTFQgPSBlOyA6fTsKLQotUHJpbWFyeUV4cHIgICAgICAgICA6Oj0gTGl0ZXJhbDpuIHs6IFJFU1VMVCA9IG47IDp9IAotICAgICAgICAgICAgICAgICAgICAgIHwgVmFyUmVmOm4gezogUkVTVUxUID0gbjsgOn0gCi0JCSAgICAgIHwgUGFyZW50aGVzaXplZEV4cHI6ZQotCQkgICAgICAJezogUkVTVUxUID0gbmV3IFBhckV4cHIoZSk7IDp9ICAKLQkJICAgICAgfCBDb250ZXh0SXRlbUV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fSAKLQkJICAgICAgfCBGdW5jdGlvbkNhbGw6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgICA7Ci0KLUxpdGVyYWwgICAgICAgICAgICAgOjo9IE51bWVyaWNMaXRlcmFsOm4gezogUkVTVUxUID0gbjsgOn0gCi0gICAgICAgICAgICAgICAgICAgICAgfCBTdHJpbmdMaXRlcmFsOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotCi1OdW1lcmljTGl0ZXJhbCAgICAgIDo6PSBJbnRlZ2VyTGl0ZXJhbDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBEZWNpbWFsTGl0ZXJhbDpuIHs6IFJFU1VMVCA9IG47IDp9IAotCQkgICAgICB8IERvdWJsZUxpdGVyYWw6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgICA7Ci0gICAKLVZhclJlZiAgICAgICAgICAgICAgOjo9IERPTExBUiBWYXJOYW1lOnYgezogUkVTVUxUID0gbmV3IFZhclJlZih2KTsgOn07Ci0KLVBhcmVudGhlc2l6ZWRFeHByICAgOjo9IExQQVIgUlBBUgkgezogUkVTVUxUID0gbmV3IEFycmF5TGlzdCgpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgTFBBUiBFeHByOmUgUlBBUiB7OiBSRVNVTFQgPSBlOyA6fQotCQkgICAgICA7Ci0KLUNvbnRleHRJdGVtRXhwciAgICAgOjo9IERPVCB7OiBSRVNVTFQgPSBuZXcgQ250eEl0ZW1FeHByKCk7IDp9OwotICAgCi1GdW5jdGlvbkNhbGwgICAgICAgIDo6PSBRTmFtZTpuIExQQVIgUlBBUgotCQkJezoKLQkJCSAgIFJFU1VMVCA9IG5ldyBGdW5jdGlvbkNhbGwobixuZXcgQXJyYXlMaXN0KCkpOwotCQkJOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFFOYW1lOm4gTFBBUiBGdW5jdGlvbkNhbGxNaWRkbGU6YSBSUEFSCi0JCQl7OgotCQkJICAgUkVTVUxUID0gbmV3IEZ1bmN0aW9uQ2FsbChuLGEpOwotCQkJOn0KLQkJICAgICAgOwotCi1GdW5jdGlvbkNhbGxNaWRkbGUgIDo6PSBFeHByU2luZ2xlOmUKLQkJCXs6Ci0JCQkgICBDb2xsZWN0aW9uIGMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkgICBjLmFkZChlKTsKLQkJCSAgIFJFU1VMVCA9IGM7Ci0JCQk6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRnVuY3Rpb25DYWxsTWlkZGxlOmMgQ09NTUEgRXhwclNpbmdsZTplCi0JCSAgICAgICAgezoKLQkJCSAgIGMuYWRkKGUpOwotCQkJICAgUkVTVUxUID0gYzsKLQkJCTp9Ci0JCSAgICAgIDsKLQotCi1TaW5nbGVUeXBlICAgICAgICAgIDo6PSBBdG9taWNUeXBlOnQgezogUkVTVUxUID0gbmV3IFNpbmdsZVR5cGUodCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBdG9taWNUeXBlOnQgUVVFU1RJT05NQVJLCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgU2luZ2xlVHlwZSh0LHRydWUpOyA6fQotCQkgICAgICA7Ci0KLVNlcXVlbmNlVHlwZSAgICAgICAgOjo9IEl0ZW1UeXBlOnQKLQkJCXs6IFJFU1VMVCA9IG5ldyBTZXF1ZW5jZVR5cGUoU2VxdWVuY2VUeXBlLk5PTkUsIHQpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgSXRlbVR5cGU6dCBPY2N1cnJlbmNlSW5kaWNhdG9yOmkKLQkJCXs6IFJFU1VMVCA9IG5ldyBTZXF1ZW5jZVR5cGUoaS5pbnRWYWx1ZSgpLCB0KTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEVNUFRZX1NFUVVFTkNFIExQQVIgUlBBUgotCQkJezogUkVTVUxUID0gbmV3IFNlcXVlbmNlVHlwZShTZXF1ZW5jZVR5cGUuRU1QVFksIG51bGwpOyA6fQotCQkgICAgICA7Ci0KLU9jY3VycmVuY2VJbmRpY2F0b3IgOjo9IFFVRVNUSU9OTUFSSyAKLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFNlcXVlbmNlVHlwZS5RVUVTVElPTik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBTVEFSIAotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoU2VxdWVuY2VUeXBlLlNUQVIpOyA6fQotCQkgICAgICB8IFBMVVMKLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFNlcXVlbmNlVHlwZS5QTFVTKTsgOn0KLQkJICAgICAgOwotCi1JdGVtVHlwZSAgICAgICAgICAgIDo6PSBBdG9taWNUeXBlOnEKLQkJCXs6IFJFU1VMVCA9IG5ldyBJdGVtVHlwZShJdGVtVHlwZS5RTkFNRSxxKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEtpbmRUZXN0OmsKLQkJICAgICAgICB7OiBSRVNVTFQgPSBuZXcgSXRlbVR5cGUoSXRlbVR5cGUuS0lORFRFU1Qsayk7IDp9Ci0JCSAgICAgIHwgSVRFTSBMUEFSIFJQQVIKLQkJICAgICAgICB7OiBSRVNVTFQgPSBuZXcgSXRlbVR5cGUoSXRlbVR5cGUuSVRFTSxudWxsKTsgOn0KLQkJICAgICAgOwotCi1BdG9taWNUeXBlICAgICAgICAgIDo6PSBRTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1LaW5kVGVzdCAgICAgICAgICAgIDo6PSBEb2N1bWVudFRlc3Q6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRWxlbWVudFRlc3Q6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgQXR0cmlidXRlVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBTY2hlbWFFbGVtZW50VGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBTY2hlbWFBdHRyaWJ1dGVUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFBJVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBDb21tZW50VGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBUZXh0VGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBbnlLaW5kVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICAgIDsKLQotQW55S2luZFRlc3QgICAgICAgICA6Oj0gTk9ERSBMUEFSIFJQQVIgezogUkVTVUxUID0gbmV3IEFueUtpbmRUZXN0KCk7IDp9OwotCi1Eb2N1bWVudFRlc3QgICAgICAgIDo6PSBET0NVTUVOVF9OT0RFIExQQVIgUlBBUiAKLQkJCSB7OiBSRVNVTFQgPSBuZXcgRG9jdW1lbnRUZXN0KCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBET0NVTUVOVF9OT0RFIExQQVIgRWxlbWVudFRlc3Q6ZSBSUEFSCi0JCSAgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBEb2N1bWVudFRlc3QoRG9jdW1lbnRUZXN0LkVMRU1FTlQsZSk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBET0NVTUVOVF9OT0RFIExQQVIgU2NoZW1hRWxlbWVudFRlc3Q6ZSBSUEFSCi0JCSAgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBEb2N1bWVudFRlc3QoRG9jdW1lbnRUZXN0LlNDSEVNQV9FTEVNRU5ULGUpOyA6fQotCQkgICAgICA7Ci0KLVRleHRUZXN0ICAgICAgICAgICAgOjo9IFRFWFQgTFBBUiBSUEFSIHs6IFJFU1VMVCA9IG5ldyBUZXh0VGVzdCgpOyA6fTsKLQotQ29tbWVudFRlc3QgICAgICAgICA6Oj0gQ09NTUVOVCBMUEFSIFJQQVIgezogUkVTVUxUID0gbmV3IENvbW1lbnRUZXN0KCk7IDp9OwotCi1QSVRlc3QgICAgICAgICAgICAgICA6Oj0gUFJPQ0VTU0lOR19JTlNUUlVDVElPTiBMUEFSIFJQQVIKLQkJCSAgezogUkVTVUxUID0gbmV3IFBJVGVzdCgpOyA6fQotICAgICAgICAgICAgICAgICAgICAgICB8IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gTFBBUiBOQ05hbWU6biAgUlBBUgotCQkJICB7OiBSRVNVTFQgPSBuZXcgUElUZXN0KG4pOyA6fQotICAgICAgICAgICAgICAgICAgICAgICB8IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gTFBBUiBTdHJpbmdMaXRlcmFsOnMgUlBBUgotCQkJICB7OiBSRVNVTFQgPSBuZXcgUElUZXN0KHMuc3RyaW5nKCkpOyA6fQotCQkgICAgICAgOwotCi1BdHRyaWJ1dGVUZXN0ICAgICAgICA6Oj0gQVRUUklCVVRFIExQQVIgUlBBUgotCQkJICB7OiBSRVNVTFQgPSBuZXcgQXR0cmlidXRlVGVzdCgpOyA6fQotICAgICAgICAgICAgICAgICAgICAgICB8IEFUVFJJQlVURSBMUEFSIEF0dHJpYk5hbWVPcldpbGRjYXJkOmEgUlBBUgotCQkgICAgICAgICAgezoKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihhID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEF0dHJpYnV0ZVRlc3QoYSx3aWxkKTsKLQkJCSAgOn0gICAKLSAgICAgICAgICAgICAgICAgICAgICAgfCBBVFRSSUJVVEUgTFBBUiBBdHRyaWJOYW1lT3JXaWxkY2FyZDphIENPTU1BIFR5cGVOYW1lOnQgUlBBUgotCQkgICAgICAgICAgezoKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihhID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEF0dHJpYnV0ZVRlc3QoYSx3aWxkLHQpOwotCQkJICA6fSAgIAotCQkgICAgICAgOwotCi1BdHRyaWJOYW1lT3JXaWxkY2FyZCA6Oj0gQXR0cmlidXRlTmFtZTphIHs6IFJFU1VMVCA9IGE7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgU1RBUiB7OiBSRVNVTFQgPSBudWxsOyAvKiBYWFggKi8gOn0KLQkJICAgICAgIDsKLQotU2NoZW1hQXR0cmlidXRlVGVzdCAgOjo9IFNDSEVNQV9BVFRSSUJVVEUgTFBBUiBBdHRyaWJ1dGVEZWNsYXJhdGlvbjphIFJQQVIKLQkJICAgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBTY2hlbWFBdHRyVGVzdChhKTsgOn0KLQkJICAgICAgIDsKLQotQXR0cmlidXRlRGVjbGFyYXRpb24gOjo9IEF0dHJpYnV0ZU5hbWU6biB7OiBSRVNVTFQgPSBuOyA6fTsKLQotRWxlbWVudFRlc3QgICAgICAgICAgOjo9IEVMRU1FTlQgTFBBUiBSUEFSIHs6IFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdCgpOyA6fQotICAgICAgICAgICAgICAgICAgICAgICB8IEVMRU1FTlQgTFBBUiBFbGVtZW50TmFtZU9yV2lsZGNhcmQ6ZSBSUEFSCi0JCSAgICAgICAgICB7OgotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGUgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoZSx3aWxkKTsKLQkJCSAgOn0gICAKLSAgICAgICAgICAgICAgICAgICAgICAgfCBFTEVNRU5UIExQQVIgRWxlbWVudE5hbWVPcldpbGRjYXJkOmUgQ09NTUEgVHlwZU5hbWU6dCBSUEFSCi0JCSAgICAgICAgICB7OgotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGUgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoZSx3aWxkLHQpOwotCQkJICA6fSAgIAotICAgICAgICAgICAgICAgICAgICAgICB8IEVMRU1FTlQgTFBBUiBFbGVtZW50TmFtZU9yV2lsZGNhcmQ6ZSBDT01NQSBUeXBlTmFtZTp0IFFVRVNUSU9OTUFSSyBSUEFSCi0JCSAgICAgICAgICB7OgotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGUgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoZSx3aWxkLHQsdHJ1ZSk7Ci0JCQkgIDp9ICAgCi0JCSAgICAgICA7Ci0KLUVsZW1lbnROYW1lT3JXaWxkY2FyZCA6Oj0gRWxlbWVudE5hbWU6ZSB7OiBSRVNVTFQgPSBlOyA6fQotICAgICAgICAgICAgICAgICAgICAgICAgfCBTVEFSIHs6IFJFU1VMVCA9IG51bGw7IC8qIFhYWCAqLyA6fQotCQkJOwotCi1TY2hlbWFFbGVtZW50VGVzdCAgICAgOjo9IFNDSEVNQV9FTEVNRU5UIExQQVIgRWxlbWVudERlY2xhcmF0aW9uOmUgUlBBUgotCQkJICAgIHs6IFJFU1VMVCA9IG5ldyBTY2hlbWFFbGVtVGVzdChlKTsgOn0KLQkJCTsKLQotRWxlbWVudERlY2xhcmF0aW9uICAgIDo6PSBFbGVtZW50TmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1BdHRyaWJ1dGVOYW1lICAgICAgICAgOjo9IFFOYW1lOm4gezogUkVTVUxUID0gbjsgOn07Ci0KLUVsZW1lbnROYW1lICAgICAgICAgICA6Oj0gUU5hbWU6biB7OiBSRVNVTFQgPSBuOyA6fTsKLQotVHlwZU5hbWUgICAgICAgICAgICAgIDo6PSBRTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1JbnRlZ2VyTGl0ZXJhbCAgICAgICAgOjo9IElOVEVHRVI6aSB7OiBSRVNVTFQgPSBuZXcgSW50ZWdlckxpdGVyYWwoaSk7IDp9OwotICAgCi1EZWNpbWFsTGl0ZXJhbCAgICAgICAgOjo9IERFQ0lNQUw6ZCAKLQkJCSAgICB7OiBSRVNVTFQgPSBuZXcgRGVjaW1hbExpdGVyYWwoZCk7IDp9Ci0JCQk7ICAgIAotCi1Eb3VibGVMaXRlcmFsICAgICAgICAgOjo9IERPVUJMRTpkCi0JCQkgICAgezogUkVTVUxUID0gbmV3IERvdWJsZUxpdGVyYWwoZC5kb3VibGVWYWx1ZSgpKTsgOn0KLQkJCTsgICAgCi0KLVN0cmluZ0xpdGVyYWwgICAgICAgICA6Oj0gU1RSSU5HOnMgezogUkVTVUxUID0gbmV3IFN0cmluZ0xpdGVyYWwocyk7IDp9OwotCi1WYXJOYW1lICAgICAgICAgICAgICAgOjo9IFFOYW1lOm4gezogUkVTVUxUID0gbjsgOn07Ci0KLVFOYW1lICAgICAgICAgICAgICAgICA6Oj0gVW5xdWFsaWZpZWRMb2NhbFBhcnQ6bCB7OiBSRVNVTFQgPSBuZXcgUU5hbWUobCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgICB8IFByZWZpeDpwIENPTE9OIExvY2FsUGFydDpsIHs6IFJFU1VMVCA9IG5ldyBRTmFtZShwLGwpOyA6fQotCQkJCQkJOwotCi1QcmVmaXggICAgICAgICAgICAgICAgOjo9IE5DTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1Mb2NhbFBhcnQgICAgICAgICAgICAgOjo9IE5DTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1VbnF1YWxpZmllZExvY2FsUGFydCAgOjo9IFVucXVhbGlmaWVkTkNOYW1lOm4gezogUkVTVUxUID0gbjsgOn07Ci0KLU5DTmFtZSAgICAgICAgICAgICAgICA6Oj0gTkNOQU1FOm4gezogUkVTVUxUID0gbjsgOn0gfAotCQkJCQkJICBUTzpuCSAgIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInRvIik7IDp9IHwKLQkJCQkJCSAgQ0hJTEQ6biAgezogUkVTVUxUID0gbmV3IFN0cmluZygiY2hpbGQiKTsgOn0gfAotCQkJCQkJICBERVNDRU5EQU5UOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZGVzY2VuZGFudCIpOyA6fSB8Ci0JCQkJCQkgIEFUVFJJQlVURTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImF0dHJpYnV0ZSIpOyA6fSB8Ci0JCQkJCQkgIFNFTEY6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzZWxmIik7IDp9IHwKLQkJCQkJCSAgREVTQ0VOREFOVF9PUl9TRUxGOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZGVzY2VuZGFudC1vZi1zZWxmIik7IDp9IHwKLQkJCQkJCSAgRk9MTE9XSU5HX1NJQkxJTkc6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb2xsb3dpbmctc2libGluZyIpOyA6fSB8Ci0JCQkJCQkgIEZPTExPV0lORzpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvbGxvd2luZyIpOyA6fSB8Ci0JCQkJCQkgIE5BTUVTUEFDRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm5hbWVzcGFjZSIpOyA6fSB8Ci0JCQkJCQkgIFBBUkVOVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInBhcmVudCIpOyA6fSB8Ci0JCQkJCQkgIEFOQ0VTVE9SOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiYW5jZXN0b3IiKTsgOn0gfAotCQkJCQkJICBQUkVDRURJTkdfU0lCTElORzpuIHs6IFJFU1VMVCAgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmctc2libGluZyIpOyA6fSB8Ci0JCQkJCQkgIFBSRUNFRElORzpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInByZWNlZGluZyIpOyA6fSB8Ci0JCQkJCQkgIEFOQ0VTVE9SX09SX1NFTEY6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmNlc3Rvci1vci1zZWxmIik7IDp9IHwKLQkJCQkJCSAgVU5JT046biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ1bmlvbiIpOyA6fSB8Ci0JCQkJCQkgIElOVEVSU0VDVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImludGVyc2VjdCIpOyA6fSB8Ci0JCQkJCQkgIEVYQ0VQVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImV4Y2VwdCIpOyA6fSB8Ci0JCQkJCQkgIElOU1RBTkNFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaW5zdGFuY2UiKTsgOn0gfAotCQkJCQkJICBPRjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9mIik7IDp9IHwKLQkJCQkJCSAgVFJFQVQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhcyIpOyA6fSB8Ci0JCQkJCQkgIENBU1RBQkxFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiY2FzdGFibGUiKTsgOn0gfAotCQkJCQkJICBDQVNUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiY2FzdCIpOyA6fSB8Ci0JCQkJCQkgIElTOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaXMiKTsgOn0gfAotCQkJCQkJICBGT1I6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb3IiKTsgOn0gfAotCQkJCQkJICBJTjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImluIik7IDp9IHwKLQkJCQkJCSAgUkVUVVJOOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygicmV0dXJuIik7IDp9IHwKLQkJCQkJCSAgU0FUSVNGSUVTOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic2F0aXNmaWVzIik7IDp9IHwKLQkJCQkJCSAgU09NRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNvbWUiKTsgOn0gfAotCQkJCQkJICBFVkVSWTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImV2ZXJ5Iik7IDp9IHwKLQkJCQkJCSAgSUY6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpZiIpOyA6fSB8Ci0JCQkJCQkgIFRIRU46biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0aGVuIik7IDp9IHwKLQkJCQkJCSAgRUxTRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImVsc2UiKTsgOn0gfAotCQkJCQkJICBBTkQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmQiKTsgOn0gfAotCQkJCQkJICBPUjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9yIik7IDp9IHwKLQkJCQkJCSAgRElWOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZGl2Iik7IDp9IHwKLQkJCQkJCSAgSURJVjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImlkaXYiKTsgOn0gfAotCQkJCQkJICBDT01NRU5UOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiY29tbWVudCIpOyA6fSB8Ci0JCQkJCQkgIERPQ1VNRU5UX05PREU6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkb2N1bWVudC1ub2RlIik7IDp9IHwKLQkJCQkJCSAgRUxFTUVOVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImVsZW1lbnQiKTsgOn0gfAotCQkJCQkJICBFTVBUWV9TRVFVRU5DRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImVtcHR5LXNlcXVlbmNlIik7IDp9IHwKLQkJCQkJCSAgSVRFTTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIml0ZW0iKTsgOn0gfAotCQkJCQkJICBOT0RFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibm9kZSIpOyA6fSB8Ci0JCQkJCQkgIFBST0NFU1NJTkdfSU5TVFJVQ1RJT046biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcm9jZXNzaW5nLWluc3RydWN0aW9uIik7IDp9IHwKLQkJCQkJCSAgU0NIRU1BX0FUVFJJQlVURTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNjaGVtYS1hdHRyaWJ1dGUiKTsgOn0gfAotCQkJCQkJICBTQ0hFTUFfRUxFTUVOVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNjaGVtYS1lbGVtZW50Iik7IDp9IHwKLQkJCQkJCSAgVEVYVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInRleHQiKTsgOn0gfAotCQkJCQkJICBUWVBFU1dJVENIOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygidHlwZXN3aXRjaCIpOyA6fSB8Ci0JCQkJCQkgIE1PRDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm1vZCIpOyA6fSB8Ci0JCQkJCQkgIFNUQVI6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCIqIik7IDp9Ci0JCQk7IAotCi1VbnF1YWxpZmllZE5DTmFtZSAgICAgOjo9IE5DTkFNRTpuIHs6IFJFU1VMVCA9IG47IDp9IHwKLQkJCQkJCSAgVE86bgkgICB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0byIpOyA6fSB8Ci0JCQkJCQkgIENISUxEOm4gIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImNoaWxkIik7IDp9IHwKLQkJCQkJCSAgREVTQ0VOREFOVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImRlc2NlbmRhbnQiKTsgOn0gfAotCQkJCQkJICBTRUxGOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic2VsZiIpOyA6fSB8Ci0JCQkJCQkgIERFU0NFTkRBTlRfT1JfU0VMRjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImRlc2NlbmRhbnQtb2Ytc2VsZiIpOyA6fSB8Ci0JCQkJCQkgIEZPTExPV0lOR19TSUJMSU5HOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nLXNpYmxpbmciKTsgOn0gfAotCQkJCQkJICBGT0xMT1dJTkc6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb2xsb3dpbmciKTsgOn0gfAotCQkJCQkJICBOQU1FU1BBQ0U6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJuYW1lc3BhY2UiKTsgOn0gfAotCQkJCQkJICBQQVJFTlQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwYXJlbnQiKTsgOn0gfAotCQkJCQkJICBBTkNFU1RPUjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yIik7IDp9IHwKLQkJCQkJCSAgUFJFQ0VESU5HX1NJQkxJTkc6biB7OiBSRVNVTFQgID0gbmV3IFN0cmluZygicHJlY2VkaW5nLXNpYmxpbmciKTsgOn0gfAotCQkJCQkJICBQUkVDRURJTkc6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmciKTsgOn0gfAotCQkJCQkJICBBTkNFU1RPUl9PUl9TRUxGOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiYW5jZXN0b3Itb3Itc2VsZiIpOyA6fSB8Ci0JCQkJCQkgIFVOSU9OOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygidW5pb24iKTsgOn0gfAotCQkJCQkJICBJTlRFUlNFQ1Q6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnRlcnNlY3QiKTsgOn0gfAotCQkJCQkJICBFWENFUFQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJleGNlcHQiKTsgOn0gfAotCQkJCQkJICBJTlNUQU5DRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImluc3RhbmNlIik7IDp9IHwKLQkJCQkJCSAgT0Y6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvZiIpOyA6fSB8Ci0JCQkJCQkgIFRSRUFUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiYXMiKTsgOn0gfAotCQkJCQkJICBDQVNUQUJMRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImNhc3RhYmxlIik7IDp9IHwKLQkJCQkJCSAgQ0FTVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImNhc3QiKTsgOn0gfAotCQkJCQkJICBJUzpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImlzIik7IDp9IHwKLQkJCQkJCSAgRk9SOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZm9yIik7IDp9IHwKLQkJCQkJCSAgSU46biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbiIpOyA6fSB8Ci0JCQkJCQkgIFJFVFVSTjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInJldHVybiIpOyA6fSB8Ci0JCQkJCQkgIFNBVElTRklFUzpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNhdGlzZmllcyIpOyA6fSB8Ci0JCQkJCQkgIFNPTUU6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzb21lIik7IDp9IHwKLQkJCQkJCSAgRVZFUlk6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJldmVyeSIpOyA6fSB8Ci0JCQkJCQkgIFRIRU46biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0aGVuIik7IDp9IHwKLQkJCQkJCSAgRUxTRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImVsc2UiKTsgOn0gfAotCQkJCQkJICBBTkQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmQiKTsgOn0gfAotCQkJCQkJICBPUjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9yIik7IDp9IHwKLQkJCQkJCSAgRElWOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZGl2Iik7IDp9IHwKLQkJCQkJCSAgSURJVjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImlkaXYiKTsgOn0gfAotCQkJCQkJICBNT0Q6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJtb2QiKTsgOn0KLQkJCQkJCSAgU1RBUjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIioiKTsgOn0KLQkJCQkJCSAgCi0JCQk7IAotCQkJClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMveHBhdGgubGV4IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMveHBhdGgubGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTExZjJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL3hwYXRoLmxleAorKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0vLyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAqCi0vLyAqIENvbnRyaWJ1dG9yczoKLS8vICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLS8vICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA5ODcgLSBmaXhlZCBsaXRlcmFsIGlzc3VlcyBmb3IgaW50ZWdlciBhbmQgZGVjaW1hbAotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4MzIxNCAtIGZpeCBJRiBUSEVOIEVMU0UgcGFyc2luZyBhbmQgdXBkYXRlIGdyYW1tYXJzCi0vLyAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg2MDYxICAgY29ycmVjdCBoYW5kbGluZyBvZiBxdW90ZWQgc3RyaW5nIAotLy8gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyOTc3MDcgLSBNaXNzaW5nIHRoZSBlbXB0eS1zZXF1ZW5jZSgpIHR5cGUKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhX2N1cC5ydW50aW1lLio7Ci0KLSUlCi0KLSVjbGFzcyBYUGF0aEZsZXgKLSV1bmljb2RlCi0lY3VwCi0lbGluZQotJWNvbHVtbgotCi1XaGl0ZXNwYWNlIAk9IFsgXHRcclxuXQotU3RyaW5nTGl0ZXJhbCAJPSAoXCIgKChcIlwiKSB8IFteXCJdKSogXCIpIHwgKFwnICgoXCdcJykgfCBbXlwnXSkqIFwnKQotRGlnaXRzCQk9IFswLTldKwotRG91YmxlTGl0ZXJhbAk9ICgoXC4ge0RpZ2l0c30pIHwgKHtEaWdpdHN9IChcLiBbMC05XSopPykpIFtlRV0gW1wrXC1dPyAge0RpZ2l0c30KLURlY2ltYWxMaXRlcmFsICA9IChcLiB7RGlnaXRzfSkgfCAoe0RpZ2l0c30gXC4gWzAtOV0qKQotCi1MZXR0ZXIJCT0gW2EtekEtWl0KLU5DTmFtZUNoYXIgICAgICA9IHtMZXR0ZXJ9IHwgWzAtOV0gfCBcLiB8IFwtIHwgIl8iCi1OQ05hbWUJCT0gKCB7TGV0dGVyfSB8ICJfIikgKCB7TkNOYW1lQ2hhcn0gKSoKLQotCi0lewotCXB1YmxpYyBpbnQgbGluZW5vKCkgeyByZXR1cm4geXlsaW5lICsgMTsgfQotCXB1YmxpYyBpbnQgY29sbm8oKSB7IHJldHVybiB5eWNvbHVtbiArIDE7IH0KLQotCXByaXZhdGUgU3ltYm9sIHN5bWJvbChpbnQgdHlwZSkgewotCQlyZXR1cm4gbmV3IFN5bWJvbCh0eXBlLCBsaW5lbm8oKSwgY29sbm8oKSk7Ci0JfQotCXByaXZhdGUgU3ltYm9sIHN5bWJvbChpbnQgdHlwZSwgT2JqZWN0IHZhbHVlKSB7Ci0JCXJldHVybiBuZXcgU3ltYm9sKHR5cGUsIGxpbmVubygpLCBjb2xubygpLCB2YWx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSBpbnQgY29tbWVudExldmVsID0gMDsKLSV9Ci0KLSVzdGF0ZSBDT01NRU5UCi0KLSUlCi0KLTxZWUlOSVRJQUw+IHsKLQotIig6IgkJCXsgY29tbWVudExldmVsKys7IC8vIGludCBvdmVyZmxvdyA9UAotCQkJICB5eWJlZ2luKENPTU1FTlQpOyAKLQkJCX0KLQotIlxbIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEJSQUNLRVQpOyB9Ci0iXF0iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5SQlJBQ0tFVCk7IH0KLSJcKCIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxQQVIpOyB9Ci0iXCkiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5SUEFSKTsgfQotCi0iXCsiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QTFVTKTsgfQotIlwtIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTUlOVVMpOyB9Ci0iXCoiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TVEFSKTsgfQotIlx8Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUElQRSk7IH0KLQotIj0iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FUVVBTFMpOyB9Ci0iIT0iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OT1RFUVVBTFMpOyB9Ci0iPCIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFU1NUSEFOKTsgfQotIjw9Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU0VRVUFMKTsgfQotIj4iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSKTsgfQotIj49Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1JFQVRFUkVRVUFMKTsgfQotCi0iPDwiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRVNTX0xFU1MpOyB9Ci0iPj4iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSX0dSRUFURVIpOyB9Ci0KLSIvIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9SV0FSRF9TTEFTSCk7IH0KLSIvLyIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPUldBUkRfU0xBU0hTTEFTSCk7IH0KLQotIjo6Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09MT05DT0xPTik7IH0KLSJAIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQVRfU1lNKTsgfQotIlwuXC4iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET1RET1QpOyB9Ci0iOiIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OKTsgfQotIiwiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DT01NQSk7IH0KLSJcJCIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPTExBUik7IH0KLSJcLiIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVCk7IH0KLSJcPyIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlFVRVNUSU9OTUFSSyk7IH0KLQotCi0iY2hpbGQiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DSElMRCk7IH0KLSJkZXNjZW5kYW50IgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UKTsgfQotImF0dHJpYnV0ZSIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQVRUUklCVVRFKTsgfQotInNlbGYiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TRUxGKTsgfQotImRlc2NlbmRhbnRcLW9yXC1zZWxmIgkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRFU0NFTkRBTlRfT1JfU0VMRik7IH0KLQotImZvbGxvd2luZ1wtc2libGluZyIJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT0xMT1dJTkdfU0lCTElORyk7IH0KLSJmb2xsb3dpbmciCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPTExPV0lORyk7IH0KLSJuYW1lc3BhY2UiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk5BTUVTUEFDRSk7IH0KLSJwYXJlbnQiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBBUkVOVCk7IH0KLQotImFuY2VzdG9yIgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BTkNFU1RPUik7IH0KLSJwcmVjZWRpbmdcLXNpYmxpbmciCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUFJFQ0VESU5HX1NJQkxJTkcpOyB9Ci0icHJlY2VkaW5nIgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUkVDRURJTkcpOyB9Ci0iYW5jZXN0b3JcLW9yXC1zZWxmIgkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFOQ0VTVE9SX09SX1NFTEYpOyB9Ci0KLSJlcSIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVRKTsgfQotIm5lIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTkUpOyB9Ci0ibHQiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MVCk7IH0KLSJsZSIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFKTsgfQotImd0IgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1QpOyB9Ci0iZ2UiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HRSk7IH0KLQotImlkaXYiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JRElWKTsgfQotImRpdiIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRJVik7IH0KLSJtb2QiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5NT0QpOyB9Ci0KLSJ1bmlvbiIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlVOSU9OKTsgfQotImludGVyc2VjdCIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU5URVJTRUNUKTsgfQotImV4Y2VwdCIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVhDRVBUKTsgfQotCi0iaW5zdGFuY2UiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOU1RBTkNFKTsgfQotInRyZWF0IgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVFJFQVQpOyB9Ci0iY2FzdGFibGUiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNBU1RBQkxFKTsgfQotImNhc3QiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DQVNUKTsgfQotImFzIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQVMpOyB9Ci0ib2YiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5PRik7IH0KLSJpcyIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklTKTsgfQotCi0iZm9yIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9SKTsgfQotImluIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU4pOyB9Ci0icmV0dXJuIgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5SRVRVUk4pOyB9Ci0ic2F0aXNmaWVzIgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TQVRJU0ZJRVMpOyB9Ci0idG8iCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5UTyk7IH0KLSJzb21lIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU09NRSk7IH0KLSJldmVyeSIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVWRVJZKTsgfQotImlmIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSUYpOyB9Ci0idGhlbiIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRIRU4pOyB9Ci0iZWxzZSIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVMU0UpOyB9Ci0iYW5kIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5EKTsgfQotIm9yIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uT1IpOyB9Ci0KLSJlbXB0eS1zZXF1ZW5jZSIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVNUFRZX1NFUVVFTkNFKTsgfQotIml0ZW0iCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JVEVNKTsgfQotIm5vZGUiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OT0RFKTsgfQotImRvY3VtZW50XC1ub2RlIgkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPQ1VNRU5UX05PREUpOyB9Ci0idGV4dCIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRFWFQpOyB9Ci0iY29tbWVudCIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUVOVCk7IH0KLSJwcm9jZXNzaW5nXC1pbnN0cnVjdGlvbiIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBST0NFU1NJTkdfSU5TVFJVQ1RJT04pOyB9Ci0ic2NoZW1hXC1hdHRyaWJ1dGUiCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0FUVFJJQlVURSk7IH0KLSJlbGVtZW50IgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTEVNRU5UKTsgfQotInNjaGVtYVwtZWxlbWVudCIJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TQ0hFTUFfRUxFTUVOVCk7IH0KLSJ0eXBlc3dpdGNoIiAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRZUEVTV0lUQ0gpOyB9Ci0KLXtTdHJpbmdMaXRlcmFsfQkJewotCQkJCS8vIGdldCByaWQgb2YgcXVvdGVzCi0JCQkJU3RyaW5nIHN0ciA9IHl5dGV4dCgpOwotCQkJCWFzc2VydCBzdHIubGVuZ3RoKCkgPj0gMjsKLQkJCQlyZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNUUklORywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkxpdGVyYWxVdGlscy51bnF1b3RlKHN0cikpOyAKLQkJCX0KLXtEaWdpdHN9CQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU5URUdFUiwgbmV3IEJpZ0ludGVnZXIoeXl0ZXh0KCkpKTsgfQote0RvdWJsZUxpdGVyYWx9CQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9VQkxFLCBuZXcgRG91YmxlKHl5dGV4dCgpKSk7IH0KLXtEZWNpbWFsTGl0ZXJhbH0JeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRFQ0lNQUwsIG5ldyBCaWdEZWNpbWFsKHl5dGV4dCgpKSk7IH0KLXtOQ05hbWV9CQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTkNOQU1FLCB5eXRleHQoKSk7IH0KLQotCi0KLQote1doaXRlc3BhY2V9IHsgLyogaWdub3JlICovIH0KLQotCi0uCXsgCi0JCVN0cmluZyBlcnIgPSAiVW5rbm93biBjaGFyYWN0ZXIgYXQgbGluZSAiICsgbGluZW5vKCk7IAotCQllcnIgKz0gIiBjb2wgIiArIGNvbG5vKCk7Ci0JCWVyciArPSAiOiAiICsgeXl0ZXh0KCk7IAotCQkJICAgICAKLQkJdGhyb3cgbmV3IEpGbGV4RXJyb3IoZXJyKTsgCi0JfQotCi19Ci0KLTxDT01NRU5UPiB7Ci0JIig6IgkJeyBjb21tZW50TGV2ZWwrKzsgfQotCSI6KSIJCXsgY29tbWVudExldmVsLS07IAotCQkJICBpZihjb21tZW50TGV2ZWwgPT0gMCkKLQkJICAgICAgICAgIAl5eWJlZ2luKFlZSU5JVElBTCk7Ci0JCQl9Ci0JLnxcbgkJeyAvKiBpZ25vcmUgKi8gfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I5M2YzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcHJvdmlkZXI9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXBsdWdpbk5hbWU9UHN5Y2hvUGF0aCBYUGF0aCAyLjAgUHJvY2Vzc29yClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9Db2xsYXRpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9Db2xsYXRpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGZmZTYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvQ29sbGF0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci0KLS8qKgotICogU2VydmljZSBwcm92aWRlciBpbnRlcmZhY2UgZm9yIGxvb2tpbmcgdXAgY29sbGF0aW9ucyBmcm9tIHdpdGhpbiB0aGUgZHluYW1pYyBjb250ZXh0LgotICogQHNpbmNlIDEuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbGxhdGlvblByb3ZpZGVyIHsKLQkvKioKLQkgKiBHZXRzIHRoZSBuYW1lZCBjb2xsYXRvci4gVzNDIGRvZXMgbm90IGRlZmluZSBjb2xsYXRpb24gbmFtZXMgKHlldD8pIHNvIHdlIGFyZSBjb25zdHJhaW5lZCB0byB1c2luZyBhbgotCSAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbmFtaW5nIHNjaGVtZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBBIFVSSSBkZXNpZ25hdGluZyB0aGUgY29sbGF0aW9uIHRvIHVzZQotCSAqIEByZXR1cm4gVGhlIGNvbGxhdGlvbiB0byB1c2UsIG9yIG51bGwgaWYgbm8gc3VjaCBjb2xsYXRpb24gZXhpc3RzIGJ5IHRoaXMgcHJvdmlkZXIKLQkgKi8KLQlDb21wYXJhdG9yIGdldF9jb2xsYXRpb24oU3RyaW5nIG5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01CdWlsZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RPTUJ1aWxkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNkN2YzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RPTUJ1aWxkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gRG9jIGZpeGVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLmlvLio7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7Ci1pbXBvcnQgb3JnLnhtbC5zYXguKjsKLQotLyoqCi0gKiBUaGUgRE9NIGJ1aWxkZXIgbG9hZHMgYW4gRE9NIGZyb20gYW4gSW5wdXRTdHJlYW0uIFRoZSBsb2FkaW5nIGlzIGFsd2F5cyBuYW1lc3BhY2UgYXdhcmUuCi0gKi8KLXB1YmxpYyBjbGFzcyBET01CdWlsZGVyIGltcGxlbWVudHMgRE9NTG9hZGVyIHsKLQlib29sZWFuIF92YWxpZGF0aW5nOwotCWJvb2xlYW4gX25hbWVzcGFjZV9hd2FyZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBET00gYnVpbGRlci4KLQkgKi8KLQlwdWJsaWMgRE9NQnVpbGRlcigpIHsKLQkJX3ZhbGlkYXRpbmcgPSBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBMb2FkcyBUaGUgWE1MIGRvY3VtZW50LgotCSAqIAotCSAqIEBwYXJhbSBpbgotCSAqICAgICAgICAgICAgaXMgdGhlIGlucHV0IHN0cmVhbS4KLQkgKiBAdGhyb3dzIERPTUxvYWRlckV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIERPTSBsb2FkZXIgZXhjZXB0aW9uLgotCSAqIEByZXR1cm4gVGhlIGxvYWRlZCBkb2N1bWVudC4KLQkgKi8KLQkvLyBYWFg6IGZpeCBlcnJvciByZXBvcnRpbmcKLQlwdWJsaWMgRG9jdW1lbnQgbG9hZChJbnB1dFN0cmVhbSBpbikgdGhyb3dzIERPTUxvYWRlckV4Y2VwdGlvbiB7Ci0KLQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0JCWZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCWZhY3Rvcnkuc2V0VmFsaWRhdGluZyhfdmFsaWRhdGluZyk7Ci0KLQkJdHJ5IHsKLQkJCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQotCQkJLy8gaWYoX3ZhbGlkYXRpbmcpIHsKLQkJCWJ1aWxkZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBFcnJvckhhbmRsZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCQkJdGhyb3cgZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYUGFyc2VFeGNlcHRpb24gewotCQkJCQl0aHJvdyBlOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gZSkKLQkJCQkJCXRocm93cyBTQVhQYXJzZUV4Y2VwdGlvbiB7Ci0JCQkJCXRocm93IGU7IC8vIFhYWAotCQkJCX0KLQkJCX0pOwotCQkJLy8gfQotCQkJcmV0dXJuIGJ1aWxkZXIucGFyc2UoaW4pOwotCQl9IGNhdGNoIChTQVhFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IERPTUxvYWRlckV4Y2VwdGlvbigiU0FYIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgRE9NTG9hZGVyRXhjZXB0aW9uKCJQYXJzZXIgY29uZmlndXJhdGlvbiBleGNlcHRpb246ICIKLQkJCQkJKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBET01Mb2FkZXJFeGNlcHRpb24oIklPIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFNldCB2YWxpZGF0aW5nIGJvb2xlYW4uCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2YWx1ZSB0byBzZXQgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbiB0by4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfdmFsaWRhdGluZyhib29sZWFuIHgpIHsKLQkJX3ZhbGlkYXRpbmcgPSB4OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRE9NTG9hZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RPTUxvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmQxODU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRE9NTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIERvY3VtZW50ZWQgbmFtZXNwYWNlIGF3YXJlbmVzcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBUaGUgRE9NIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VtZW50LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIERPTUxvYWRlciB7Ci0KLQkvKioKLQkgKiBUaGUgRE9NIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VlbW50Ci0JICogCi0JICogQHBhcmFtIGluCi0JICogICAgICAgICAgICBpcyB0aGUgaW5wdXQgc3RyZWFtLgotCSAqIEB0aHJvd3MgRE9NTG9hZGVyRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgRE9NIGxvYWRlciBleGNlcHRpb24uCi0JICogQHJldHVybiBUaGUgbG9hZGVkIGRvY3VtZW50LiBUaGUgZG9jdW1lbnQgaXMgYWx3YXlzIGxvYWRlZCBhcyBuYW1lc3BhY2UtYXdhcmUKLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnQgbG9hZChJbnB1dFN0cmVhbSBpbikgdGhyb3dzIERPTUxvYWRlckV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIFNldCB2YWxpZGF0aW5nIGJvb2xlYW4uCi0JICogCi0JICogQHBhcmFtIHZhbAotCSAqICAgICAgICAgICAgaXMgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbi4KLQkgKi8KLQkvLyBYWFg6IGRlZmF1bHQgaXMgZmFsc2UgPyEgW2RvY3VtZW50IGl0ID9dCi0JcHVibGljIHZvaWQgc2V0X3ZhbGlkYXRpbmcoYm9vbGVhbiB2YWwpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RPTUxvYWRlckV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01Mb2FkZXJFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlNTgzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RPTUxvYWRlckV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi0KLS8qKgotICogRXhjZXB0aW9uIGNhdXNlZCBieSBET00gbG9hZGVyLgotICovCi1wdWJsaWMgY2xhc3MgRE9NTG9hZGVyRXhjZXB0aW9uIGV4dGVuZHMgWFBhdGhFeGNlcHRpb24gewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTc2NTI4NjUyMjIyMTEwNjcyMDFMOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIERPTSBsb2FkZXIgZXhjZXB0aW9uLgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBleGNlcHRpb24uCi0JICovCi0JcHVibGljIERPTUxvYWRlckV4Y2VwdGlvbihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKHJlYXNvbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EZWZhdWx0RHluYW1pY0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRGVmYXVsdER5bmFtaWNDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMzQ4YWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EZWZhdWx0RHluYW1pY0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24gZGF0YSB0eXBlLgotICogICAgICAgICAgICAgICAgICAtIGJ1ZyAyNjI3NjUgLSBmaXggaGFuZGxpbmcgb2YgcmFuZ2UgZXhwcmVzc2lvbiBvcDp0byBhbmQgZW1wdHkgc2VxdWVuY2UgCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4MTE1OSAtIGZpeCBkb2N1bWVudCBsb2FkaW5nIGFuZCByZXNvbHZpbmcgVVJJcyAKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjg2NDUyIC0gYWx3YXlzIHJldHVybiB0aGUgc3RhYmxlIGRhdGUvdGltZSBmcm9tIGR5bmFtaWMgY29udGV4dAotICogICAgIEplc3BlciBNb2xsZXItIGJ1ZyAyNzU2MTAgLSBBdm9pZCBiaWcgdGltZSBhbmQgbWVtb3J5IG92ZXJoZWFkIGZvciBleHRlcm5hbHMKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotLyoqCi0gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhIER5bmFtaWMgQ29udGV4dC4KLSAqIAotICogSW5pdGlhbGl6ZXMgYW5kIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgb2YgYSBkeW5hbWljIGNvbnRleHQgYWNjb3JkaW5nIHRvIHRoZQotICogWFBhdGggMi4wIHNwZWNpZmljYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0RHluYW1pY0NvbnRleHQgZXh0ZW5kcyBEZWZhdWx0U3RhdGljQ29udGV4dCBpbXBsZW1lbnRzCi0JCUR5bmFtaWNDb250ZXh0IHsKLQotCXByaXZhdGUgRm9jdXMgX2ZvY3VzOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0JcHJpdmF0ZSBNYXAgX2xvYWRlZF9kb2N1bWVudHM7Ci0JcHJpdmF0ZSBHcmVnb3JpYW5DYWxlbmRhciBfY3VycmVudF9kYXRlX3RpbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgX2RlZmF1bHRfY29sbGF0aW9uX25hbWUgPSBDT0RFUE9JTlRfQ09MTEFUSU9OOwotCXByaXZhdGUgQ29sbGF0aW9uUHJvdmlkZXIgX2NvbGxhdGlvbl9wcm92aWRlcjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBzY2hlbWEKLQkgKiAgICAgICAgICAgIFNjaGVtYSBpbmZvcm1hdGlvbiBvZiBkb2N1bWVudC4gTWF5IGJlIG51bGwKLQkgKiBAcGFyYW0gZG9jCi0JICogICAgICAgICAgICBEb2N1bWVudCBbcm9vdF0gbm9kZSBvZiBYTUwgc291cmNlLgotCSAqLwotCXB1YmxpYyBEZWZhdWx0RHluYW1pY0NvbnRleHQoWFNNb2RlbCBzY2hlbWEsIERvY3VtZW50IGRvYykgewotCQlzdXBlcihzY2hlbWEpOwotCi0JCV9mb2N1cyA9IG51bGw7Ci0JCV90eiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigwLCA1LCAwLCAwLCB0cnVlKTsKLQkJX2xvYWRlZF9kb2N1bWVudHMgPSBuZXcgSGFzaE1hcCgpOwotCX0KLQotCS8qKgotCSAqIFJlYWRzIHRoZSBkYXkgZnJvbSBhIFRpbWVEdXJhdGlvbiB0eXBlCi0JICogCi0JICogQHJldHVybiBhbiB4czppbnRlZ2VyIF90egotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBDdXJyZW50IHN0YWJsZSBkYXRlIHRpbWUgZnJvbSB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEBzaW5jZSAxLjEKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCNnZXRfY3VycmVudF90aW1lKCkKLQkgKi8KLQlwdWJsaWMgR3JlZ29yaWFuQ2FsZW5kYXIgY3VycmVudF9kYXRlX3RpbWUoKSB7Ci0JCWlmIChfY3VycmVudF9kYXRlX3RpbWUgPT0gbnVsbCkgewotCQkJX2N1cnJlbnRfZGF0ZV90aW1lID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSk7Ci0JCX0KLQkJcmV0dXJuIF9jdXJyZW50X2RhdGVfdGltZTsKLQl9Ci0JCi0JLyoqCi0JICogQ2hhbmdlcyB0aGUgY3VycmVudCBmb2N1cy4KLQkgKiAKLQkgKiBAcGFyYW0gZgotCSAqICAgICAgICAgICAgZm9jdXMgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0X2ZvY3VzKEZvY3VzIGYpIHsKLQkJX2ZvY3VzID0gZjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGZvY3VzCi0JICogCi0JICogQHJldHVybiBfZm9jdXMKLQkgKi8KLQlwdWJsaWMgRm9jdXMgZm9jdXMoKSB7Ci0JCXJldHVybiBfZm9jdXM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgY29udGV4dCBpdGVtIHRoYXQgaXMgaW4gZm9jdXMKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIEFueVR5cGUgcmVzdWx0IGZyb20gX2ZvY3VzLmNvbnRleHRfaXRlbSgpCi0JICovCi0JcHVibGljIEFueVR5cGUgY29udGV4dF9pdGVtKCkgewotCQlyZXR1cm4gX2ZvY3VzLmNvbnRleHRfaXRlbSgpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZm9jdXMKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIGludGVnZXIgcmVzdWx0IGZyb20gX2ZvY3VzLnBvc2l0aW9uKCkKLQkgKi8KLQlwdWJsaWMgaW50IGNvbnRleHRfcG9zaXRpb24oKSB7Ci0JCXJldHVybiBfZm9jdXMucG9zaXRpb24oKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgZm9jdXMKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIGludGVnZXIgcmVzdWx0IGZyb20gX2ZvY3VzLmxhc3QoKQotCSAqLwotCXB1YmxpYyBpbnQgbGFzdCgpIHsKLQkJcmV0dXJuIF9mb2N1cy5sYXN0KCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIHZhcmlhYmxlIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIEFueVR5cGUgcmVzdWx0IGZyb20gZ2V0X3ZhcihuYW1lKSBvciByZXR1cm4gTlVMTAotCSAqLwotCXB1YmxpYyBBbnlUeXBlIGdldF92YXJpYWJsZShRTmFtZSBuYW1lKSB7Ci0JCS8vIFhYWDogYnVpbHQtaW4gdmFyaWFibGVzCi0JCWlmICgiZnMiLmVxdWFscyhuYW1lLnByZWZpeCgpKSkgewotCQkJaWYgKG5hbWUubG9jYWwoKS5lcXVhbHMoImRvdCIpKQotCQkJCXJldHVybiBjb250ZXh0X2l0ZW0oKTsKLQotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIGdldF92YXIobmFtZSk7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHJldHVybiBhIFJlc3VsdFNlcXVlbmNlIGZyb20gZnVuY3QuZXZhbHVhdGUoYXJncykKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGVfZnVuY3Rpb24oUU5hbWUgbmFtZSwgQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUZ1bmN0aW9uIGZ1bmN0ID0gZnVuY3Rpb24obmFtZSwgYXJncy5zaXplKCkpOwotCi0JCWFzc2VydCBmdW5jdCAhPSBudWxsOwotCi0JCXJldHVybiBmdW5jdC5ldmFsdWF0ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGRzIGZ1bmN0aW9uIGRlZmluaXRpb25zLgotCSAqIAotCSAqIEBwYXJhbSBmbAotCSAqICAgICAgICAgICAgRnVuY3Rpb24gbGlicmFyeSB0byBhZGQuCi0JICogCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgYWRkX2Z1bmN0aW9uX2xpYnJhcnkoRnVuY3Rpb25MaWJyYXJ5IGZsKSB7Ci0JCXN1cGVyLmFkZF9mdW5jdGlvbl9saWJyYXJ5KGZsKTsKLQkJZmwuc2V0X2R5bmFtaWNfY29udGV4dCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBnZXQgZG9jdW1lbnQKLQkgKiAKLQkgKiBAcmV0dXJuIGEgUmVzdWx0U2VxdWVuY2UgZnJvbSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBnZXRfZG9jKFVSSSByZXNvbHZlZCkgewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlpZiAoX2xvYWRlZF9kb2N1bWVudHMuY29udGFpbnNLZXkocmVzb2x2ZWQpKSB7Ci0JCQkgLy90cmllZCBiZWZvcmUKLQkJCWRvYyA9IChEb2N1bWVudClfbG9hZGVkX2RvY3VtZW50cy5nZXQocmVzb2x2ZWQpOwotCQl9IGVsc2UgewotCQkJZG9jID0gcmV0cmlldmVfZG9jKHJlc29sdmVkKTsKLQkJCV9sb2FkZWRfZG9jdW1lbnRzLnB1dChyZXNvbHZlZCwgZG9jKTsKLQkJfQotCi0JCWlmIChkb2MgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgRG9jVHlwZShkb2MpKTsKLQl9Ci0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBVUkkgcmVzb2x2ZV91cmkoU3RyaW5nIHVyaSkgewotCQl0cnkgewotCQkJVVJJIHJlYWxVUkkgPSBVUkkuY3JlYXRlKHVyaSk7Ci0JCQlpZiAocmVhbFVSSS5pc0Fic29sdXRlKCkpIHsKLQkJCQlyZXR1cm4gcmVhbFVSSTsKLQkJCX0gZWxzZSB7Ci0JCQkJVVJJIGJhc2VVUkkgPSBVUkkuY3JlYXRlKGJhc2VfdXJpKCkuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCXJldHVybiBiYXNlVVJJLnJlc29sdmUodXJpKTsKLQkJCX0KLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQkvLyBYWFggbWFrZSBpdCBuaWNlLCBhbmQgbW92ZSBpdCBvdXQgYXMgYSB1dGlsaXR5IGZ1bmN0aW9uCi0JcHJpdmF0ZSBEb2N1bWVudCByZXRyaWV2ZV9kb2MoVVJJIHVyaSkgewotCQl0cnkgewotCQkJRE9NTG9hZGVyIGxvYWRlciA9IG5ldyBYZXJjZXNMb2FkZXIoKTsKLQkJCWxvYWRlci5zZXRfdmFsaWRhdGluZyhmYWxzZSk7Ci0KLQkJCURvY3VtZW50IGRvYyA9IGxvYWRlci5sb2FkKG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpLm9wZW5TdHJlYW0oKSk7Ci0JCQlkb2Muc2V0RG9jdW1lbnRVUkkodXJpLnRvU3RyaW5nKCkpOwotCQkJcmV0dXJuIGRvYzsKLQkJfSBjYXRjaCAoRE9NTG9hZGVyRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLgotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIFZhcmlhYmxlIG5hbWUuCi0JICogQHBhcmFtIHZhbAotCSAqICAgICAgICAgICAgVmFyaWFibGUgdmFsdWUuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc2V0X3ZhcmlhYmxlKFFOYW1lIHZhciwgQW55VHlwZSB2YWwpIHsKLQkJc3VwZXIuc2V0X3ZhcmlhYmxlKHZhciwgdmFsKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2RlZmF1bHRfY29sbGF0aW9uKFN0cmluZyBfZGVmYXVsdF9jb2xsYXRpb24pIHsKLQkJdGhpcy5fZGVmYXVsdF9jb2xsYXRpb25fbmFtZSA9IF9kZWZhdWx0X2NvbGxhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFN0cmluZyBkZWZhdWx0X2NvbGxhdGlvbl9uYW1lKCkgewotCQlyZXR1cm4gX2RlZmF1bHRfY29sbGF0aW9uX25hbWU7Ci0JfQotCi0JLy8gV2UgYXJlIGV4cGxpY2l0bHkgTk9UIHVzaW5nIGdlbmVyaWNzIGhlcmUsIGluIGFudGljaXBhdGlvbiBvZiBKREsxLjQgY29tcGF0aWJpbGl0eQotCXByaXZhdGUgc3RhdGljIENvbXBhcmF0b3IgQ09ERVBPSU5UX0NPTVBBUkFUT1IgPSBuZXcgQ29tcGFyYXRvcigpIHsKLQkJCi0JCXB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgbzEsIE9iamVjdCBvMikgewotCQkJcmV0dXJuICgoU3RyaW5nKW8xKS5jb21wYXJlVG8oKFN0cmluZylvMik7Ci0JCX0KLQl9OwotCQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKi8KLQlwdWJsaWMgQ29tcGFyYXRvcjxPYmplY3Q+IGdldF9jb2xsYXRpb24oU3RyaW5nIHVyaSkgewotCQlpZiAoQ09ERVBPSU5UX0NPTExBVElPTi5lcXVhbHModXJpKSkgcmV0dXJuIENPREVQT0lOVF9DT01QQVJBVE9SOwotCQkKLQkJcmV0dXJuIF9jb2xsYXRpb25fcHJvdmlkZXIgIT0gbnVsbCA/IF9jb2xsYXRpb25fcHJvdmlkZXIuZ2V0X2NvbGxhdGlvbih1cmkpIDogbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogCi0JICogQHBhcmFtIHByb3ZpZGVyCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9jb2xsYXRpb25fcHJvdmlkZXIoQ29sbGF0aW9uUHJvdmlkZXIgcHJvdmlkZXIpIHsKLQkJdGhpcy5fY29sbGF0aW9uX3Byb3ZpZGVyID0gcHJvdmlkZXI7Ci0JfQotCQotCS8qKgotCSAqIFVzZSBmb2N1cygpLnBvc2l0aW9uKCkgdG8gcmV0cmlldmUgdGhlIHZhbHVlLgotCSAqIEBkZXByZWNhdGVkICBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHVzZSBmb2N1cygpLnBvc2l0aW9uKCkuCi0JICovCi0JQERlcHJlY2F0ZWQKLQlwdWJsaWMgaW50IG5vZGVfcG9zaXRpb24oTm9kZSBub2RlKSB7Ci0JICAvLyB1bnVzZWQgcGFyYW1ldGVyIQotCSAgcmV0dXJuIF9mb2N1cy5wb3NpdGlvbigpOwkKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RlZmF1bHRFdmFsdWF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRGVmYXVsdEV2YWx1YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTZhNzg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRGVmYXVsdEV2YWx1YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGNoZWNrIGFyZ3VtZW50cyB0byBvcDp0bwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIG5vZGUgc3RhdGUgaXRlcmF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI4MTkzOCAtIHVuZGVmaW5lZCBjb250ZXh0IHNob3VsZCByYWlzZSBlcnJvcgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI2Mjc2NSAtIHVzZSBjb3JyZWN0ICdlZmZlY3RpdmUgYm9vbGVhbiB2YWx1ZScKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BeGlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZXNjZW5kYW50T3JTZWxmQXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9jdXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvcndhcmRBeGlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5QYXJlbnRBeGlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5SZXZlcnNlQXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VsZkF4aXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05hbWVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVHlwZU5hbWVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBEZWZhdWx0IGV2YWx1YXRvciBpbnRlcmZhY2UKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRFdmFsdWF0b3IgaW1wbGVtZW50cyBYUGF0aFZpc2l0b3IsIEV2YWx1YXRvciB7Ci0KLQlzdGF0aWMgY2xhc3MgRHVtbXlFcnJvciBleHRlbmRzIEVycm9yIHsKLQkJLyoqCi0JCSAqIAotCQkgKi8KLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzE2MTY0NDc5MDg4MTQwNTQwM0w7Ci0JCS8vIDA6IGR5bmFtaWMgZXJyb3IKLQkJLy8gMTogdHlwZSBlcnJvcgotCQlwcml2YXRlIGludCBfdHlwZTsKLQotCQlwdWJsaWMgRHVtbXlFcnJvcihpbnQgdHlwZSkgewotCQkJX3R5cGUgPSB0eXBlOwotCQl9Ci0KLQkJcHVibGljIGludCB0eXBlKCkgewotCQkJcmV0dXJuIF90eXBlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBEeW5hbWljQ29udGV4dCBfZGM7Ci0JcHJpdmF0ZSBYUGF0aEV4Y2VwdGlvbiBfZXJyOwotCi0JLy8gc3R1ZmYgYW55b25lIG1heSB1c2UKLQlwcml2YXRlIENvbGxlY3Rpb24gX2dfY29sbDsKLQlwcml2YXRlIFhTSW50ZWdlciBfZ194c2ludDsKLQotCS8vIHRoaXMgaXMgYSBwYXJhbWV0ZXIgdGhhdCBtYXkgYmUgc2V0IG9uIGEgY2FsbC4uLgotCS8vIHRoZSBwYXJhbWV0ZXIgbWF5IGJlY29tZSBpbnZhbGlkIG9uIHRoZSBuZXh0IGNhbGwuLi4gaS5lLiB0aGUKLQkvLyBwcmV2aW91cyBwYXJhbWV0ZXIgaXMgbm90IHNhdmVkLi4uIHNvIHVzZSB3aXRoIGNhcmUhIFtyZW1lbWJlci4uLgotCS8vIHRoaXMgdGhpbmcgaXMgaGlnaGx5IHJlY3Vyc2l2ZV0KLQlwcml2YXRlIE9iamVjdCBfcGFyYW07Ci0KLQlzdGF0aWMgY2xhc3MgUGFpciB7Ci0JCXB1YmxpYyBPYmplY3QgX29uZTsKLQkJcHVibGljIE9iamVjdCBfdHdvOwotCi0JCXB1YmxpYyBQYWlyKE9iamVjdCBvLCBPYmplY3QgdCkgewotCQkJX29uZSA9IG87Ci0JCQlfdHdvID0gdDsKLQkJfQotCX0KLQotCS8qKgotCSAqIHNldCBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEBwYXJhbSBkb2MKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgRGVmYXVsdEV2YWx1YXRvcihEeW5hbWljQ29udGV4dCBkYywgRG9jdW1lbnQgZG9jKSB7Ci0JCV9kYyA9IGRjOwotCQlfZXJyID0gbnVsbDsKLQotCQkvLyBpbml0aWFsaXplIGNvbnRleHQgaXRlbSB3aXRoIHJvb3Qgb2YgZG9jdW1lbnQKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlpZiAoZG9jICE9IG51bGwpIHJzLmFkZChuZXcgRG9jVHlwZShkb2MpKTsKLQotCQlfZGMuc2V0X2ZvY3VzKG5ldyBGb2N1cyhycykpOwotCi0JCV9wYXJhbSA9IG51bGw7Ci0KLQkJX2dfY29sbCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJX2dfeHNpbnQgPSBuZXcgWFNJbnRlZ2VyKCk7Ci0JfQotCi0JLy8gWFhYIHRoaXMga2luZGEgc3V4Ci0JLy8gdGhlIHByb2JsZW0gaXMgdGhhdCB2aXNpc3RvciBpbnRlcmZhY2UgZG9lcyBub3QgdGhyb3cgZXhjZXB0aW9ucy4uLgotCS8vIHNvIHdlIGdldCBhcm91bmQgaXQgO0QKLQlwcml2YXRlIHZvaWQgcmVwb3J0X2Vycm9yKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJX2VyciA9IGVycjsKLQkJdGhyb3cgbmV3IER1bW15RXJyb3IoMCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlcG9ydF9lcnJvcihUeXBlRXJyb3IgZXJyKSB7Ci0JCV9lcnIgPSBlcnI7Ci0JCXRocm93IG5ldyBEdW1teUVycm9yKDEpOwotCX0KLQotCXByaXZhdGUgdm9pZCByZXBvcnRfZXJyb3IoU3RhdGljTmFtZUVycm9yIGVycikgewotCQl0aHJvdyBuZXcgRHVtbXlFcnJvcig2NjYpOwotCX0KLQotCS8qKgotCSAqIGV2YWx1YXRlIHRoZSB4cGF0aCBub2RlCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB4cGF0aCBub2RlLgotCSAqIEB0aHJvd3MgZHluYW1pYwotCSAqICAgICAgICAgICAgIGVycm9yLgotCSAqIEByZXR1cm4gcmVzdWx0IHNlcXVlbmNlLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShYUGF0aE5vZGUgbm9kZSkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKFJlc3VsdFNlcXVlbmNlKSBub2RlLmFjY2VwdCh0aGlzKTsKLQkJfSBjYXRjaCAoRHVtbXlFcnJvciBlKSB7Ci0JCQlzd2l0Y2ggKGUudHlwZSgpKSB7Ci0JCQljYXNlIDA6Ci0JCQkJdGhyb3cgKER5bmFtaWNFcnJvcikgX2VycjsKLQkJCWNhc2UgMToKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKChUeXBlRXJyb3IpIF9lcnIpOwotCi0JCQlkZWZhdWx0OgotCQkJCWFzc2VydCBmYWxzZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0KLQl9Ci0KLQkvLyBiYXNpY2FsbHkgdGhlIGNvbW1hIG9wZXJhdG9yLi4uCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBkb19leHByKEl0ZXJhdG9yIGkpIHsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IG51bGw7Ci0KLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlFeHByIGUgPSAoRXhwcikgaS5uZXh0KCk7Ci0KLQkJCVJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IChSZXN1bHRTZXF1ZW5jZSkgZS5hY2NlcHQodGhpcyk7Ci0KLQkJCWlmIChycyA9PSBudWxsKQotCQkJCXJzID0gcmVzdWx0OwotCQkJZWxzZQotCQkJCXJzLmNvbmNhdChyZXN1bHQpOwotCQl9Ci0KLQkJaWYgKHJzID09IG51bGwpCi0JCQlycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBpdGVyYXRlIHRocm91Z2ggeHBhdGggZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSB4cAotCSAqICAgICAgICAgICAgaXMgdGhlIHhwYXRoLgotCSAqIEByZXR1cm4gcmVzdWx0IHNlcXVlbmNlLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoWFBhdGggeHApIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBkb19leHByKHhwLml0ZXJhdG9yKCkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvLyBYWFggdWdseQotCS8vIHR5cGU6IDAgPSBmb3IgW3JldHVybiA9PSAiY29ycmVjdCJdCi0JLy8gMSA9IGZvciBhbGwgW3JldHVybiBmYWxzZSwgcmV0dXJuIGVtcHR5IG9uIHRydWVdCi0JLy8gMiA9IHRoZXJlIGV4aXN0cyBbcmV0dXJuIHRydWUsIHJldHVybiBlbXB0eSBvbiBmYWxzZV0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGRvX2Zvcl9xdWFudGlmaWVkX2V4cHIoTGlzdEl0ZXJhdG9yIGl0ZXIsCi0JCQlFeHByIGZpbmFsZXhwciwgaW50IHR5cGUpIHsKLQotCQkvLyB3ZSBoYXZlIG1vcmUgdmFycyB0byBiaW5kLi4uCi0JCWlmIChpdGVyLmhhc05leHQoKSkgewotCQkJYm9vbGVhbiBhbGxvY2F0ZWRfdmFyID0gZmFsc2U7Ci0JCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkJVmFyRXhwclBhaXIgdmUgPSAoVmFyRXhwclBhaXIpIGl0ZXIubmV4dCgpOwotCi0JCQkvLyBldmFsdWF0ZSBiaW5kaW5nIHNlcXVlbmNlCi0JCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgdmUuZXhwcigpLmFjY2VwdCh0aGlzKTsKLQotCQkJLy8gWFhYCi0JCQlpZiAocnMuZW1wdHkoKSkgewotCQkJCWl0ZXIucHJldmlvdXMoKTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCi0JCQlRTmFtZSB2YXJuYW1lID0gdmUudmFybmFtZSgpOwotCi0JCQkvLyBmb3IgZWFjaCBpdGVtIG9mIGJpbmRpbmcgc2VxdWVuY2UsIGJpbmQgdGhlIHJhbmdlCi0JCQkvLyB2YXJpYWJsZSBhbmQgZG8gdGhlIGV4cHJlc3Npb24sIGNvbmNhdGVuYXRpbmcgdGhlCi0JCQkvLyByZXN1bHQKLQotCQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJQW55VHlwZSBpdGVtID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQkJX2RjLnNldF92YXJpYWJsZSh2YXJuYW1lLCBpdGVtKTsKLQkJCQlhbGxvY2F0ZWRfdmFyID0gdHJ1ZTsKLQotCQkJCV9kYy5uZXdfc2NvcGUoKTsKLQkJCQlSZXN1bHRTZXF1ZW5jZSByZXMgPSBkb19mb3JfcXVhbnRpZmllZF9leHByKGl0ZXIsIGZpbmFsZXhwciwKLQkJCQkJCXR5cGUpOwotCQkJCV9kYy5kZXN0cm95X3Njb3BlKCk7Ci0JCQkJYXNzZXJ0IHJlcyAhPSBudWxsOwotCi0JCQkJLy8gb2sgaGVyZSB3ZSBnb3QgYSAicmVhbCIgcmVzdWx0LCBub3cgZmlndXJlCi0JCQkJLy8gb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAotCQkJCVhTQm9vbGVhbiBlZmZib29sID0gbnVsbDsKLQkJCQlzd2l0Y2ggKHR5cGUpIHsKLQkJCQkvLyBmb3IgZXhwcmVzc2lvbgotCQkJCWNhc2UgMDoKLQkJCQkJcmVzdWx0LmNvbmNhdChyZXMpOwotCQkJCQlicmVhazsKLQotCQkJCS8vIHdlIG5lZWQgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlCi0JCQkJLy8gb2YgdGhlIGV4cHJlc3Npb24KLQkJCQljYXNlIDE6Ci0JCQkJY2FzZSAyOgotCQkJCQllZmZib29sID0gZWZmZWN0aXZlX2Jvb2xlYW5fdmFsdWUocmVzKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQlkZWZhdWx0OgotCQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQkJfQotCi0JCQkJLy8gd2UgZ290IGEgcXVhbnRpZmllZCBleHByZXNzaW9uCi0JCQkJaWYgKGVmZmJvb2wgIT0gbnVsbCkgewotCQkJCQkvLyBmb3IgYWxsCi0JCQkJCWlmICh0eXBlID09IDEpIHsKLQkJCQkJCXJlc3VsdCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGVmZmJvb2wpOwotCQkJCQkJaWYgKCFlZmZib29sLnZhbHVlKCkpCi0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJLy8gdGhlcmUgZXhpc3RzCi0JCQkJCWVsc2UgaWYgKHR5cGUgPT0gMikgewotCQkJCQkJcmVzdWx0ID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoZWZmYm9vbCk7Ci0JCQkJCQlpZiAoZWZmYm9vbC52YWx1ZSgpKQotCQkJCQkJCWJyZWFrOwotCQkJCQl9IGVsc2UKLQkJCQkJCWFzc2VydCBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChhbGxvY2F0ZWRfdmFyKSB7Ci0JCQkJYm9vbGVhbiBkZWwgPSBfZGMuZGVsX3ZhcmlhYmxlKHZhcm5hbWUpOwotCQkJCWFzc2VydCBkZWwgPT0gdHJ1ZTsKLQkJCX0KLQotCQkJaXRlci5wcmV2aW91cygpOwotCQkJcmV0dXJuIHJlc3VsdDsKLQkJfQotCQkvLyB3ZSBmaW5hbGx5IGdvdCB0byBkbyB0aGUgImxhc3QgZXhwcmVzc2lvbiIKLQkJZWxzZSB7Ci0JCQlyZXR1cm4gKFJlc3VsdFNlcXVlbmNlKSBmaW5hbGV4cHIuYWNjZXB0KHRoaXMpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBmb3IgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBmZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBmb3IgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRm9yRXhwciBmZXgpIHsKLQkJLy8gWFhYCi0JCUxpc3QgcGFpcnMgPSBuZXcgQXJyYXlMaXN0KGZleC52ZV9wYWlycygpKTsKLQkJcmV0dXJuIGRvX2Zvcl9xdWFudGlmaWVkX2V4cHIocGFpcnMubGlzdEl0ZXJhdG9yKCksIGZleC5leHByKCksIDApOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHF1YW50aWZpZWQgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBxZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBxdWFudGlmaWVkIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbiBvciBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUXVhbnRpZmllZEV4cHIgcWV4KSB7Ci0JCS8vIFhYWAotCQlMaXN0IHBhaXJzID0gbmV3IEFycmF5TGlzdChxZXgudmVfcGFpcnMoKSk7Ci0KLQkJaW50IGhhY2sgPSAwOwotCi0JCXN3aXRjaCAocWV4LnR5cGUoKSkgewotCQljYXNlIFF1YW50aWZpZWRFeHByLlNPTUU6Ci0JCQloYWNrID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIFF1YW50aWZpZWRFeHByLkFMTDoKLQkJCWhhY2sgPSAxOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWFzc2VydCBmYWxzZTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBkb19mb3JfcXVhbnRpZmllZF9leHByKHBhaXJzLmxpc3RJdGVyYXRvcigpLCBxZXgKLQkJCQkuZXhwcigpLCBoYWNrKTsKLQotCQkvLyBtYWtlIHN1cmUgd2UgZm91bmQgYW5zd2VyCi0JCWlmICghcnMuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyBvayBiZWNhdXNlIGFsbCBvZiB0aGlzIGlzIGEgaGFjay4uLiBoZXJlIHdlIGdvCi0JCXN3aXRjaCAocWV4LnR5cGUoKSkgewotCQljYXNlIFF1YW50aWZpZWRFeHByLlNPTUU6Ci0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCQljYXNlIFF1YW50aWZpZWRFeHByLkFMTDoKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKHRydWUpKTsKLQkJZGVmYXVsdDoKLQkJCWFzc2VydCBmYWxzZTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBpZiBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGlmZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpZiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBpZmV4LnRoZW5fY2xhdXNlKCkuYWNjZXB0KHRoaXMpLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSWZFeHByIGlmZXgpIHsKLQkJUmVzdWx0U2VxdWVuY2UgdGVzdF9yZXMgPSBkb19leHByKGlmZXguaXRlcmF0b3IoKSk7Ci0KLQkJWFNCb29sZWFuIHJlcyA9IGVmZmVjdGl2ZV9ib29sZWFuX3ZhbHVlKHRlc3RfcmVzKTsKLQotCQlpZiAocmVzLnZhbHVlKCkpCi0JCQlyZXR1cm4gaWZleC50aGVuX2NsYXVzZSgpLmFjY2VwdCh0aGlzKTsKLQkJZWxzZQotCQkJcmV0dXJuIGlmZXguZWxzZV9jbGF1c2UoKS5hY2NlcHQodGhpcyk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuW10gZG9fbG9naWNfZXhwKEJpbkV4cHIgZSkgewotCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhlKTsKLQotCQlJdGVyYXRvciBhcmdpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCi0JCVJlc3VsdFNlcXVlbmNlIG9uZSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHR3byA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0KLQkJYm9vbGVhbiBvbmViID0gZWZmZWN0aXZlX2Jvb2xlYW5fdmFsdWUob25lKS52YWx1ZSgpOwotCQlib29sZWFuIHR3b2IgPSBlZmZlY3RpdmVfYm9vbGVhbl92YWx1ZSh0d28pLnZhbHVlKCk7Ci0KLQkJYm9vbGVhbiByZXNbXSA9IHsgb25lYiwgdHdvYiB9OwotCQlyZXR1cm4gcmVzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IG9yIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gb3JleAotCSAqICAgICAgICAgICAgaXMgdGhlIG9yIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoT3JFeHByIG9yZXgpIHsKLQkJYm9vbGVhbiByZXNbXSA9IGRvX2xvZ2ljX2V4cChvcmV4KTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ci0JCQkJLmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihyZXNbMF0gfHwgcmVzWzFdKSk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgYW5kIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gYW5kZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBhbmQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBbmRFeHByIGFuZGV4KSB7Ci0JCWJvb2xlYW4gcmVzW10gPSBkb19sb2dpY19leHAoYW5kZXgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkKLQkJCQkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKHJlc1swXSAmJiByZXNbMV0pKTsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG5vZGVfY21wKGludCB0eXBlLCBDb2xsZWN0aW9uIGFyZ3MpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAyOwotCi0JCUl0ZXJhdG9yIGFyZ3NpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCi0JCVJlc3VsdFNlcXVlbmNlIG9uZSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnc2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSB0d28gPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3NpdGVyLm5leHQoKTsKLQotCQlpbnQgc2l6ZV9vbmUgPSBvbmUuc2l6ZSgpOwotCQlpbnQgc2l6ZV90d28gPSB0d28uc2l6ZSgpOwotCi0JCWlmIChzaXplX29uZSA+IDEgfHwgc2l6ZV90d28gPiAxKQotCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCi0JCWlmIChzaXplX29uZSA9PSAwIHx8IHNpemVfdHdvID09IDApCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55VHlwZSBhdF9vbmUgPSBvbmUuZmlyc3QoKTsKLQkJQW55VHlwZSBhdF90d28gPSB0d28uZmlyc3QoKTsKLQotCQlpZiAoIShhdF9vbmUgaW5zdGFuY2VvZiBOb2RlVHlwZSkgfHwgIShhdF90d28gaW5zdGFuY2VvZiBOb2RlVHlwZSkpCi0JCQlyZXBvcnRfZXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJLy8gb2sgd2UgZ290IHRoZSBhcmdzIGZpbmFsbHkKLQkJTm9kZVR5cGUgbnRfb25lID0gKE5vZGVUeXBlKSBhdF9vbmU7Ci0JCU5vZGVUeXBlIG50X3R3byA9IChOb2RlVHlwZSkgYXRfdHdvOwotCi0JCWJvb2xlYW4gYW5zd2VyID0gZmFsc2U7IC8vIHdlIGFyZSBwZXNzaW1pc3RpYyBhcyB1c3VhbAotCi0JCS8vIGRvIGNvbXBhcmlzb24KLQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgQ21wRXhwci5JUzoKLQkJCWFuc3dlciA9IG50X29uZS5ub2RlX3ZhbHVlKCkgPT0gbnRfdHdvLm5vZGVfdmFsdWUoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQ21wRXhwci5MRVNTX0xFU1M6Ci0JCQlhbnN3ZXIgPSBudF9vbmUuYmVmb3JlKG50X3R3byk7Ci0JCQlicmVhazsKLQotCQljYXNlIENtcEV4cHIuR1JFQVRFUl9HUkVBVEVSOgotCQkJYW5zd2VyID0gbnRfb25lLmFmdGVyKG50X3R3byk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCQl9Ci0KLQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4oYW5zd2VyKSk7Ci0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBjb21wYXJlIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gY21wZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjb21wYXJlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbiBvciBudWxsCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDbXBFeHByIGNtcGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhjbXBleCk7Ci0KLQkJCXN3aXRjaCAoY21wZXgudHlwZSgpKSB7Ci0JCQljYXNlIENtcEV4cHIuRVE6Ci0JCQkJcmV0dXJuIEZzRXEuZnNfZXFfdmFsdWUoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLk5FOgotCQkJCXJldHVybiBGc05lLmZzX25lX3ZhbHVlKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5HVDoKLQkJCQlyZXR1cm4gRnNHdC5mc19ndF92YWx1ZShhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuTFQ6Ci0JCQkJcmV0dXJuIEZzTHQuZnNfbHRfdmFsdWUoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkdFOgotCQkJCXJldHVybiBGc0dlLmZzX2dlX3ZhbHVlKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5MRToKLQkJCQlyZXR1cm4gRnNMZS5mc19sZV92YWx1ZShhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuRVFVQUxTOgotCQkJCXJldHVybiBGc0VxLmZzX2VxX2dlbmVyYWwoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLk5PVEVRVUFMUzoKLQkJCQlyZXR1cm4gRnNOZS5mc19uZV9nZW5lcmFsKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5HUkVBVEVSOgotCQkJCXJldHVybiBGc0d0LmZzX2d0X2dlbmVyYWwoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkxFU1NUSEFOOgotCQkJCXJldHVybiBGc0x0LmZzX2x0X2dlbmVyYWwoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkdSRUFURVJFUVVBTDoKLQkJCQlyZXR1cm4gRnNHZS5mc19nZV9nZW5lcmFsKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5MRVNTRVFVQUw6Ci0JCQkJcmV0dXJuIEZzTGUuZnNfbGVfZ2VuZXJhbChhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuSVM6Ci0JCQljYXNlIENtcEV4cHIuTEVTU19MRVNTOgotCQkJY2FzZSBDbXBFeHByLkdSRUFURVJfR1JFQVRFUjoKLQkJCQlyZXR1cm4gbm9kZV9jbXAoY21wZXgudHlwZSgpLCBhcmdzKTsKLQotCQkJZGVmYXVsdDoKLQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQl9Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQl9Ci0JCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JfQotCi0JLyoqCi0JICogdmlzaXQgcmFuZ2UgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSByZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSByYW5nZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFJhbmdlRXhwciByZXgpIHsKLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSByZXgubGVmdCgpLmFjY2VwdCh0aGlzKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSByZXgucmlnaHQoKS5hY2NlcHQodGhpcyk7Ci0JCWlmIChvbmUuZW1wdHkoKSB8fCB0d28uZW1wdHkoKSkgcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7IAotCQlDb2xsZWN0aW9uIGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFyZ3MuYWRkKG9uZSk7Ci0JCWFyZ3MuYWRkKHR3byk7Ci0KLQkJdHJ5IHsKLQkJCXJldHVybiBPcFRvLm9wX3RvKGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQlwcml2YXRlIFhTQm9vbGVhbiBlZmZlY3RpdmVfYm9vbGVhbl92YWx1ZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQl0cnkgewotCQkJcmV0dXJuIEZuQm9vbGVhbi5mbl9ib29sZWFuKHJzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JCi0JLyoqCi0JICogdmlzaXQgYW5kIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gYWRkZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBhbmQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBZGRFeHByIGFkZGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhhZGRleCk7Ci0JCQlyZXR1cm4gRnNQbHVzLmZzX3BsdXMoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IHN1YiBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIHN1YmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgc3ViIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3ViRXhwciBzdWJleCkgewotCQl0cnkgewotCQkJQ29sbGVjdGlvbiBhcmdzID0gZG9fYmluX2FyZ3Moc3ViZXgpOwotCQkJcmV0dXJuIEZzTWludXMuZnNfbWludXMoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IG11bHRpcGx5IGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtdWwgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNdWxFeHByIG11bGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhtdWxleCk7Ci0JCQlyZXR1cm4gRnNUaW1lcy5mc190aW1lcyhhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZGl2aXNpb24gZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIGRpdmlzaW9uIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRGl2RXhwciBtdWxleCkgewotCQl0cnkgewotCQkJQ29sbGVjdGlvbiBhcmdzID0gZG9fYmluX2FyZ3MobXVsZXgpOwotCQkJcmV0dXJuIEZzRGl2LmZzX2RpdihhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KElEaXZFeHByIG11bGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhtdWxleCk7Ci0JCQlyZXR1cm4gRnNJRGl2LmZzX2lkaXYoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IG1vZHVsYXIgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIG1vZHVsYXIgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNb2RFeHByIG11bGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhtdWxleCk7Ci0JCQlyZXR1cm4gRnNNb2QuZnNfbW9kKGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQlwcml2YXRlIENvbGxlY3Rpb24gZG9fYmluX2FyZ3MoQmluRXhwciBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIG9uZSA9IChSZXN1bHRTZXF1ZW5jZSkgZS5sZWZ0KCkuYWNjZXB0KHRoaXMpOwotCQlSZXN1bHRTZXF1ZW5jZSB0d28gPSAoUmVzdWx0U2VxdWVuY2UpIGUucmlnaHQoKS5hY2NlcHQodGhpcyk7Ci0KLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChvbmUpOwotCQlhcmdzLmFkZCh0d28pOwotCi0JCXJldHVybiBhcmdzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHVuaW9uIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gdW5leAotCSAqICAgICAgICAgICAgaXMgdGhlIHVuaW9uIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVW5pb25FeHByIHVuZXgpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKHVuZXgpOwotCQkJcmV0dXJuIE9wVW5pb24ub3BfdW5pb24oYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IHBpcGUgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBwaXBleAotCSAqICAgICAgICAgICAgaXMgdGhlIHBpcGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JLy8gWFhYIHNhbWUgYXMgYWJvdmUKLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBpcGVFeHByIHBpcGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhwaXBleCk7Ci0JCQlyZXR1cm4gT3BVbmlvbi5vcF91bmlvbihhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgaW50ZXJzZWN0IGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gaWV4cHIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnRlcnNlY3QgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlcnNlY3RFeHByIGlleHByKSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhpZXhwcik7Ci0JCQlyZXR1cm4gT3BJbnRlcnNlY3Qub3BfaW50ZXJzZWN0KGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBleGNlcHQgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBlZXhwcgotCSAqICAgICAgICAgICAgaXMgdGhlIGV4Y2VwdCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEV4Y2VwdEV4cHIgZWV4cHIpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKGVleHByKTsKLQkJCXJldHVybiBPcEV4Y2VwdC5vcF9leGNlcHQoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IGluc3RhbmNlIG9mIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gaW9leHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnN0YW5jZSBvZiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEluc3RPZkV4cHIgaW9leHApIHsKLQkJLy8gZ2V0IHRoZSB2YWx1ZQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgaW9leHAubGVmdCgpLmFjY2VwdCh0aGlzKTsKLQotCQkvLyBnZXQgdGhlIHNlcXVlbmNlIHR5cGUKLQkJU2VxdWVuY2VUeXBlIHNlcXQgPSAoU2VxdWVuY2VUeXBlKSBpb2V4cC5yaWdodCgpOwotCQlTZXFUeXBlIHN0ID0gbmV3IFNlcVR5cGUoc2VxdCwgX2RjLCBycyk7Ci0KLQkJLy8gc2VlIGlmIHRoZXkgbWF0Y2gKLQkJdHJ5IHsKLQkJCXN0Lm1hdGNoKHJzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQkJfQotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKHRydWUpKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCB0cmVhdC1hcyBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIHRhZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgdHJlYXQtYXMgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChUcmVhdEFzRXhwciB0YWV4cCkgewotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSB0YWV4cC5sZWZ0KCkuYWNjZXB0KHRoaXMpOwotCi0JCVNlcXVlbmNlVHlwZSBzZXF0ID0gKFNlcXVlbmNlVHlwZSkgdGFleHAucmlnaHQoKTsKLQkJU2VxVHlwZSBzdCA9IG5ldyBTZXFUeXBlKHNlcXQsIF9kYywgcnMpOwotCi0JCXRyeSB7Ci0JCQlzdC5tYXRjaChycyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGNhc3RhYmxlIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gY2V4cAotCSAqICAgICAgICAgICAgaXMgdGhlIGNhc3RhYmxlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ2FzdGFibGVFeHByIGNleHApIHsKLQkJYm9vbGVhbiBjYXN0YWJsZSA9IGZhbHNlOwotCQl0cnkgewotCQkJQ2FzdEV4cHIgY2UgPSBuZXcgQ2FzdEV4cHIoKEV4cHIpIGNleHAubGVmdCgpLCAoU2luZ2xlVHlwZSkgY2V4cAotCQkJCQkucmlnaHQoKSk7Ci0KLQkJCXZpc2l0KGNlKTsKLQkJCWNhc3RhYmxlID0gdHJ1ZTsKLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLQkJCWNhc3RhYmxlID0gZmFsc2U7Ci0JCX0KLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihjYXN0YWJsZSkpOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGNhc3QgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBjZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgY2FzdCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENhc3RFeHByIGNleHApIHsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgY2V4cC5sZWZ0KCkuYWNjZXB0KHRoaXMpOwotCQlTaW5nbGVUeXBlIHN0ID0gKFNpbmdsZVR5cGUpIGNleHAucmlnaHQoKTsKLQotCQlycyA9IEZuRGF0YS5hdG9taXplKHJzKTsKLQotCQlpZiAocnMuc2l6ZSgpID4gMSkKLQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQotCQlpZiAocnMuZW1wdHkoKSkgewotCQkJaWYgKHN0LnFtYXJrKCkpCi0JCQkJcmV0dXJuIHJzOwotCQkJZWxzZQotCQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJfQotCi0JCUFueVR5cGUgYXQgPSBycy5maXJzdCgpOwotCi0JCWlmICghKGF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpCi0JCQlyZXBvcnRfZXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXQ7Ci0KLQkJUU5hbWUgdHlwZSA9IHN0LnR5cGUoKTsKLQotCQkvLyBjaGVjayBpZiBjb25zdHJ1Y3RvciBleGlzdHMKLQkJLy8gdHJ5IHsKLQkJaWYgKCFfZGMuZnVuY3Rpb25fZXhpc3RzKHR5cGUsIDEpKQotCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkvKgotCQkgKiB9IGNhdGNoKFN0YXRpY05zTmFtZUVycm9yIGVycikgewotCQkgKiByZXBvcnRfZXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7IH0KLQkJICovCi0JCS8vIHByZXBhcmUgYXJncyBmcm9tIGZ1bmN0aW9uCi0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJncy5hZGQoUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYWF0KSk7Ci0KLQkJdHJ5IHsKLQkJCXJldHVybiBfZGMuZXZhbHVhdGVfZnVuY3Rpb24odHlwZSwgYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IG1pbnVzIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIG1pbnVzIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTWludXNFeHByIGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIGUuYXJnKCkuYWNjZXB0KHRoaXMpOwotCi0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJncy5hZGQocnMpOwotCi0JCXRyeSB7Ci0JCQlyZXR1cm4gRnNNaW51cy5mc19taW51c191bmFyeShhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgcGx1cyBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwbHVzIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGx1c0V4cHIgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5hcmcoKS5hY2NlcHQodGhpcyk7Ci0KLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChycyk7Ci0KLQkJdHJ5IHsKLQkJCXJldHVybiBGc1BsdXMuZnNfcGx1c191bmFyeShhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLy8gdGhpcyB3aWxsIGV2YWx1YXRlIHRoZSBzdGVwIGV4cHJlc3Npb24gZm9yIHRoZSB3aG9sZSBmb2N1cyBhbmQgcmV0dXJuCi0JLy8gdGhlIHJlc3VsdC4KLQkvLwotCS8vIGkuZS4gSXQgd2lsbCBleGVjdXRlIHRoZSBzdGVwIGV4cHJlc3Npb24gZm9yIGVhY2ggaXRlbSBpbiB0aGUgZm9jdXMKLQkvLyBbZWFjaCB0aW1lIGNoYW5naW5nIHRoZSBjb250ZXh0IGl0ZW1dLgotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgZG9fc3RlcChTdGVwRXhwciBzZSkgewotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJQXJyYXlMaXN0IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWludCB0eXBlID0gMDsgLy8gMDogZG9uJ3Qga25vdyB5ZXQKLQkJLy8gMTogYXRvbWljCi0JCS8vIDI6IG5vZGUKLQotCQlGb2N1cyBmb2N1cyA9IF9kYy5mb2N1cygpOwotCQlpbnQgb3JpZ2luYWxfcG9zID0gZm9jdXMucG9zaXRpb24oKTsKLQotCQkvLyBleGVjdXRlIHN0ZXAgZm9yIGFsbCBpdGVtcyBpbiBmb2N1cwotCQl3aGlsZSAodHJ1ZSkgewotCQkJcmVzdWx0cy5hZGQoc2UuYWNjZXB0KHRoaXMpKTsKLQotCQkJLy8gZ28gdG8gbmV4dAotCQkJaWYgKCFmb2N1cy5hZHZhbmNlX2NwKCkpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQkvLyBtYWtlIHN1cmUgd2UgZGlkbid0IGNoYW5nZSBmb2N1cwotCQlmb2N1cy5zZXRfcG9zaXRpb24ob3JpZ2luYWxfcG9zKTsKLQotCQlib29sZWFuIG5vZGVfdHlwZXMgPSBmYWxzZTsKLQotCQkvLyBjaGVjayB0aGUgcmVzdWx0cwotCQlmb3IgKEl0ZXJhdG9yIGkgPSByZXN1bHRzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJUmVzdWx0U2VxdWVuY2UgcmVzdWx0ID0gKFJlc3VsdFNlcXVlbmNlKSBpLm5leHQoKTsKLQotCQkJLy8gbWFrZSBzdXJlIHJlc3VsdHMgYXJlIG9mIHNhbWUgdHlwZSwgYW5kIGFkZCB0aGVtIGluCi0JCQlmb3IgKEl0ZXJhdG9yIGogPSByZXN1bHQuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KSB7Ci0JCQkJQW55VHlwZSBpdGVtID0gKEFueVR5cGUpIGoubmV4dCgpOwotCi0JCQkJLy8gZmlyc3QgaXRlbQotCQkJCWlmICh0eXBlID09IDApIHsKLQkJCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKQotCQkJCQkJdHlwZSA9IDE7Ci0JCQkJCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBOb2RlVHlwZSkKLQkJCQkJCXR5cGUgPSAyOwotCQkJCQllbHNlCi0JCQkJCQlhc3NlcnQgZmFsc2U7Ci0KLQkJCQl9Ci0KLQkJCQkvLyBtYWtlIHN1cmUgd2UgZ290IGNvaGVyZW50IHR5cGVzCi0JCQkJc3dpdGNoICh0eXBlKSB7Ci0JCQkJLy8gYXRvbWljLi4uIGp1c3QgY29uY2F0Ci0JCQkJY2FzZSAxOgotCQkJCQlpZiAoIShpdGVtIGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpCi0JCQkJCQlyZXBvcnRfZXJyb3IoVHlwZUVycm9yLm1peGVkX3ZhbHMobnVsbCkpOwotCQkJCQlycy5hZGQoaXRlbSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSAyOgotCQkJCQlub2RlX3R5cGVzID0gdHJ1ZTsKLQkJCQkJaWYgKCEoaXRlbSBpbnN0YW5jZW9mIE5vZGVUeXBlKSkKLQkJCQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IubWl4ZWRfdmFscyhudWxsKSk7Ci0JCQkJCXJzLmFkZChpdGVtKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQlkZWZhdWx0OgotCQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gWFhYIGxhbWUKLQkJaWYgKG5vZGVfdHlwZXMpIHsKLQkJCXJzID0gTm9kZVR5cGUuZWxpbWluYXRlX2R1cHMocnMpOwotCQkJcnMgPSBOb2RlVHlwZS5zb3J0X2RvY3VtZW50X29yZGVyKHJzKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIHJvb3Rfc2VsZl9ub2RlKCkgewotCQlBeGlzIGF4aXMgPSBuZXcgU2VsZkF4aXMoKTsKLQkJUmVzdWx0U2VxdWVuY2UgcnM7Ci0KLQkJLy8gWFhYIHRoZSBjYXN0ISEhCi0JCXJzID0gYXhpcy5pdGVyYXRlKChOb2RlVHlwZSkgX2RjLmNvbnRleHRfaXRlbSgpLCBfZGMpOwotCi0JCXJzID0ga2luZF90ZXN0KHJzLCBOb2RlVHlwZS5jbGFzcyk7Ci0KLQkJdHJ5IHsKLQkJCUxpc3QgcmVjb3JkcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCXJlY29yZHMuYWRkKHJzKTsKLQkJCXJzID0gRm5Sb290LmZuX3Jvb3QocmVjb3JkcywgX2RjKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCX0KLQkJcmV0dXJuIHJzOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgZGVzY2VuZGFudF9vcl9zZWxmX25vZGUoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcmVzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJQXhpcyBheGlzID0gbmV3IERlc2NlbmRhbnRPclNlbGZBeGlzKCk7Ci0KLQkJLy8gZm9yIGFsbCBub2RlcywgZ2V0IGRlc2NlbmRhbnQgb3Igc2VsZiBub2RlcwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIGl0ZW0gPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCi0JCQlSZXN1bHRTZXF1ZW5jZSBub2RlcyA9IGF4aXMuaXRlcmF0ZShpdGVtLCBfZGMpOwotCQkJbm9kZXMgPSBraW5kX3Rlc3Qobm9kZXMsIE5vZGVUeXBlLmNsYXNzKTsKLQotCQkJcmVzLmNvbmNhdChub2Rlcyk7Ci0JCX0KLQotCQlyZXR1cm4gcmVzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IFhQYXRoIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIFhQYXRoIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoWFBhdGhFeHByIGUpIHsKLQkJWFBhdGhFeHByIHhwID0gZTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IG51bGw7Ci0JCUZvY3VzIG9yaWdpbmFsX2ZvY3VzID0gX2RjLmZvY3VzKCk7Ci0KLQkJLy8gZG8gYWxsIHRoZSBzdGVwcwotCQl3aGlsZSAoeHAgIT0gbnVsbCkgewotCQkJU3RlcEV4cHIgc2UgPSB4cC5leHByKCk7Ci0KLQkJCWlmIChzZSAhPSBudWxsKSB7Ci0JCQkJLy8gdGhpcyBpcyBub3QgdGhlIGZpcnN0IHN0ZXAKLQkJCQlpZiAocnMgIT0gbnVsbCkgewotCQkJCQkvLyBYWFggPwotCQkJCQkvLyB0aGUgZXhwcmVzc2lvbiBkaWRuJ3QgcmV0dXJuIGFueQotCQkJCQkvLyByZXN1bHRzLi4uCi0JCQkJCWlmIChycy5zaXplKCkgPT0gMCkKLQkJCQkJCWJyZWFrOwotCi0JCQkJCS8vIG1ha2Ugc3VyZSByZXN1bHQgb2YgcHJldmlvdXMgc3RlcCBhcmUKLQkJCQkJLy8gbm9kZXMhCi0JCQkJCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJCQkJQW55VHlwZSBpdGVtID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQkJCQlpZiAoIShpdGVtIGluc3RhbmNlb2YgTm9kZVR5cGUpKSB7Ci0JCQkJCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5zdGVwX2NvbmF0aW5zX2F0b21zKG51bGwpKTsKLQkJCQkJCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJLy8gY2hlY2sgaWYgd2UgZ290IGEgLy8KLQkJCQkJaWYgKHhwLnNsYXNoZXMoKSA9PSAyKSB7Ci0JCQkJCQlycyA9IGRlc2NlbmRhbnRfb3Jfc2VsZl9ub2RlKHJzKTsKLQotCQkJCQkJaWYgKHJzLnNpemUoKSA9PSAwKQotCQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQkJLy8gbWFrZSByZXN1bHQgb2YgcHJldmlvdXMgc3RlcCB0aGUgbmV3Ci0JCQkJCS8vIGZvY3VzCi0JCQkJCV9kYy5zZXRfZm9jdXMobmV3IEZvY3VzKHJzKSk7Ci0KLQkJCQkJLy8gZG8gdGhlIHN0ZXAgZm9yIGFsbCBpdGVtIGluIGNvbnRleHQKLQkJCQkJcnMgPSBkb19zdGVwKHNlKTsKLQkJCQl9Ci0JCQkJLy8gdGhpcyBpcyBmaXJzdCBzdGVwLi4uCi0JCQkJLy8gbm90ZS4uLiB3ZSBtYXkgYmUgY2FsbGVkIGZyb20gdXBzdHJlYW0uLi4KLQkJCQkvLyBsaWtlIGluIHRoZSBleHByZXNzaW9uIHNvcmJvLypbMl0gLi4uIHdlIG1heQotCQkJCS8vIGJlIGNhbGxlZCB0byBldmFsdWF0ZSB0aGUgMi4uLiB0aGUgY2FsbGVyCi0JCQkJLy8gd2lsbCBpdGVyYXRlIHRocm91Z2ggdGhlIHdob2xlIG91dGVyIGZvY3VzCi0JCQkJLy8gZm9yIHVzCi0JCQkJZWxzZSB7Ci0JCQkJCS8vIFhYWCA/Pz8KLQkJCQkJaWYgKHhwLnNsYXNoZXMoKSA9PSAxKSB7Ci0JCQkJCQlycyA9IHJvb3Rfc2VsZl9ub2RlKCk7Ci0JCQkJCQlfZGMuc2V0X2ZvY3VzKG5ldyBGb2N1cyhycykpOwotCi0JCQkJCQlycyA9IGRvX3N0ZXAoc2UpOwotCQkJCQl9IGVsc2UgaWYgKHhwLnNsYXNoZXMoKSA9PSAyKSB7Ci0JCQkJCQlSZXN1bHRTZXF1ZW5jZSByZXMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkJCQkJcnMgPSByb290X3NlbGZfbm9kZSgpOwotCi0JCQkJCQlycyA9IGRlc2NlbmRhbnRfb3Jfc2VsZl9ub2RlKHJzKTsKLQotCQkJCQkJX2RjLnNldF9mb2N1cyhuZXcgRm9jdXMocnMpKTsKLQotCQkJCQkJcnMgPSBkb19zdGVwKHNlKTsKLQkJCQkJfSBlbHNlCi0JCQkJCQlycyA9IChSZXN1bHRTZXF1ZW5jZSkgc2UuYWNjZXB0KHRoaXMpOwotCQkJCX0KLQkJCX0KLQkJCS8vIHRoZSBleHByZXNzaW9uIGlzICIvIgotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0IHhwLnNsYXNoZXMoKSA9PSAxOwotCi0JCQkJcnMgPSByb290X3NlbGZfbm9kZSgpOwotCQkJfQotCi0JCQl4cCA9IHhwLm5leHQoKTsKLQkJfQotCi0JCS8vIHJlc3RvcmUgZm9jdXMKLQkJX2RjLnNldF9mb2N1cyhvcmlnaW5hbF9mb2N1cyk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGEgZm9yd2FyZCBzdGVwIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGZvcndhcmQgc3RlcC4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGb3J3YXJkU3RlcCBlKSB7Ci0KLQkJLy8gZ2V0IGNvbnRleHQgbm9kZQotCQlBbnlUeXBlIGNpID0gX2RjLmNvbnRleHRfaXRlbSgpOwotCQkKLQkJaWYgKGNpID09IG51bGwpIAotCQkJcmVwb3J0X2Vycm9yKER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCkpOwotCi0JCWlmICghKGNpIGluc3RhbmNlb2YgTm9kZVR5cGUpKQotCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5jaV9ub3Rfbm9kZShjaS5zdHJpbmdfdHlwZSgpKSk7Ci0KLQkJTm9kZVR5cGUgY24gPSAoTm9kZVR5cGUpIGNpOwotCi0JCS8vIGdldCB0aGUgbm9kZXMgb24gdGhlIGF4aXMKLQkJRm9yd2FyZEF4aXMgYXhpcyA9IGUuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugbm9kZXMgPSBheGlzLml0ZXJhdGUoY24sIF9kYyk7Ci0JCS8vIGdldCBhbGwgbm9kZXMgaW4gdGhlIGF4aXMsIGFuZCBwcmluY2lwYWwgbm9kZQotCQlQYWlyIGFyZyA9IG5ldyBQYWlyKGF4aXMucHJpbmNpcGFsX25vZGVfa2luZCgpLnN0cmluZ190eXBlKCksIG5vZGVzKTsKLQotCQkvLyBkbyB0aGUgbmFtZSB0ZXN0Ci0JCV9wYXJhbSA9IGFyZzsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIGUubm9kZV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBhIHJldmVyc2Ugc3RlcCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSByZXZlcnNlIHN0ZXAuCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCS8vIFhYWCB1bmlmeSB3aXRoIHRvcAotCXB1YmxpYyBPYmplY3QgdmlzaXQoUmV2ZXJzZVN0ZXAgZSkgewotCQkvLyBnZXQgY29udGV4dCBub2RlCi0JCUFueVR5cGUgY2kgPSBfZGMuY29udGV4dF9pdGVtKCk7Ci0KLQkJaWYgKCEoY2kgaW5zdGFuY2VvZiBOb2RlVHlwZSkpCi0JCQlyZXBvcnRfZXJyb3IoVHlwZUVycm9yLmNpX25vdF9ub2RlKGNpLnN0cmluZ190eXBlKCkpKTsKLQotCQlOb2RlVHlwZSBjbiA9IChOb2RlVHlwZSkgY2k7Ci0KLQkJLy8gZ2V0IHRoZSBub2RlcyBvbiB0aGUgYXhpcwotCQlSZXZlcnNlQXhpcyBheGlzID0gZS5pdGVyYXRvcigpOwotCi0JCS8vIHNob3J0IGZvciAiZ2ltbWUgZGEgcGFyZW50IgotCQlpZiAoZS5heGlzKCkgPT0gUmV2ZXJzZVN0ZXAuRE9URE9UKSB7Ci0JCQlheGlzID0gbmV3IFBhcmVudEF4aXMoKTsKLQotCQkJcmV0dXJuIGtpbmRfdGVzdChheGlzLml0ZXJhdGUoY24sIF9kYyksIE5vZGVUeXBlLmNsYXNzKTsKLQkJfQotCi0JCWFzc2VydCBheGlzICE9IG51bGw7Ci0KLQkJUmVzdWx0U2VxdWVuY2Ugbm9kZXMgPSBheGlzLml0ZXJhdGUoY24sIF9kYyk7Ci0JCS8vIGdldCBhbGwgbm9kZXMgaW4gdGhlIGF4aXMsIGFuZCBwcmluY2lwYWwgbm9kZQotCQlQYWlyIGFyZyA9IG5ldyBQYWlyKGF4aXMucHJpbmNpcGFsX25vZGVfa2luZCgpLnN0cmluZ190eXBlKCksIG5vZGVzKTsKLQotCQkvLyBkbyB0aGUgbmFtZSB0ZXN0Ci0JCV9wYXJhbSA9IGFyZzsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIGUubm9kZV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvLyBYWFggdGhpcyByb3V0aW5lIHN1eAotCXByaXZhdGUgYm9vbGVhbiBuYW1lX3Rlc3QoTm9kZVR5cGUgbm9kZSwgUU5hbWUgbmFtZSwgU3RyaW5nIHR5cGUpIHsKLQkJLy8gbWFrZSBzdXJlIHByaW5jaXBhbCBub2RlIGtpbmQgaXMgdGhlIHNhbWUKLQkJaWYgKG5vZGUgPT0gbnVsbCkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCWlmICghdHlwZS5lcXVhbHMobm9kZS5zdHJpbmdfdHlwZSgpKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJU3RyaW5nIHRlc3RfcHJlZml4ID0gbmFtZS5wcmVmaXgoKTsKLQotCQkvLyBpZiB1bnByZWZpeGVkIGFuZCBwcmluY2lwYWwgbm9kZSBraW5kIGlzIGVsZW1lbnQsIHNldCBkZWZhdWx0Ci0JCS8vIGVsZW1lbnQgbmFtZXNwYWNlCi0JCWlmICh0ZXN0X3ByZWZpeCA9PSBudWxsICYmIHR5cGUuZXF1YWxzKCJlbGVtZW50IikpIHsKLQkJCS8vIFhYWCBtYWtlIGEgbmV3IGNvcHkKLQkJCW5hbWUgPSBuZXcgUU5hbWUobnVsbCwgbmFtZS5sb2NhbCgpKTsKLQkJCW5hbWUuc2V0X25hbWVzcGFjZShfZGMuZGVmYXVsdF9uYW1lc3BhY2UoKSk7Ci0KLQkJCS8vIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBuYW1lc3BhY2UsIHByZXRlbmQgd2UgZG8gPUQKLQkJCWlmIChuYW1lLm5hbWVzcGFjZSgpICE9IG51bGwpCi0JCQkJdGVzdF9wcmVmaXggPSAiIjsKLQkJfQotCi0JCVFOYW1lIG5vZGVfbmFtZSA9IG5vZGUubm9kZV9uYW1lKCk7Ci0KLQkJYXNzZXJ0IG5vZGVfbmFtZSAhPSBudWxsOwotCi0JCS8vIG1ha2Ugc3VyZSBuYW1lc3BhY2UgbWF0Y2hlcwotCQlTdHJpbmcgbm9kZV9uYW1lc3BhY2UgPSBub2RlX25hbWUubmFtZXNwYWNlKCk7Ci0KLQkJU3RyaW5nIHRlc3RfbmFtZXNwYWNlID0gbnVsbDsKLQkJaWYgKG5hbWUuZXhwYW5kZWQoKSkKLQkJCXRlc3RfbmFtZXNwYWNlID0gbmFtZS5uYW1lc3BhY2UoKTsKLQotCQkvLyBuYW1lIHRlc3QgaGFzIG5vIHByZWZpeAotCQlpZiAodGVzdF9wcmVmaXggPT0gbnVsbCkgewotCQkJLy8gb2sgbm8gbmFtZXNwYWNlLi4uIG1hdGNoCi0JCQlpZiAobm9kZV9uYW1lc3BhY2UgPT0gbnVsbCkgewotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJLy8gbmFtZSB0ZXN0IGhhcyBhIHByZWZpeCBhbmQgaXMgbm90IHdpbGRjYXJkCi0JCS8vIFhYWCBBVCBUSElTIFBPSU5UIEFMTCBQUkVGSVhFUyBORUVEIFRPIEJFIFJFU09MVkVEIQotCQllbHNlIGlmICghdGVzdF9uYW1lc3BhY2UuZXF1YWxzKCIqIikpIHsKLQkJCS8vIHRoZSBub2RlIGRvZXNuJ3QgaGF2ZSBhIG5hbWVzcGFjZS4uLiBubyBtYXRjaAotCQkJaWYgKG5vZGVfbmFtZXNwYWNlID09IG51bGwpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQkvLyBjaGVjayBuYW1lc3BhY2VzCi0JCQllbHNlIHsKLQkJCQlpZiAobm9kZV9uYW1lc3BhY2UuZXF1YWxzKHRlc3RfbmFtZXNwYWNlKSkgewotCQkJCQkvLyBuYW1lc3BhY2UgbWF0Y2hlcwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBtYWtlIHN1cmUgbG9jYWwgcGFydCBtYXRjaGVzCi0JCS8vIGNoZWNrIGZvciB3aWxkY2FyZCBpbiBsb2NhbHBhcnQKLQkJaWYgKG5hbWUubG9jYWwoKS5lcXVhbHMoIioiKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8vIGNoZWNrIGlmIGxvY2FsIHBhcnQgbWF0Y2hlcwotCQlpZiAoIW5hbWUubG9jYWwoKS5lcXVhbHMobm9kZV9uYW1lLmxvY2FsKCkpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBhIG5hbWUgdGVzdCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZW5hbWUgdGVzdC4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChOYW1lVGVzdCBlKSB7Ci0JCVFOYW1lIG5hbWUgPSBlLm5hbWUoKTsKLQotCQkvLyBnZXQgdGhlIGFyZ3VtZW50cwotCQlQYWlyIGFyZyA9IChQYWlyKSBfcGFyYW07Ci0JCVN0cmluZyB0eXBlID0gKFN0cmluZykgYXJnLl9vbmU7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBhcmcuX3R3bzsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG50ID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQotCQkJLy8gY2hlY2sgaWYgbm9kZSBwYXNzZXMgbmFtZSB0ZXN0Ci0JCQlpZiAoIW5hbWVfdGVzdChudCwgbmFtZSwgdHlwZSkpCi0JCQkJaS5yZW1vdmUoKTsKLQotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHZhcmlhYmxlIHJlZmVyZW5jZQotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgdmFyaWFibGUgcmVmZXJlbmNlLgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFZhclJlZiBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlBbnlUeXBlIHZhciA9IF9kYy5nZXRfdmFyaWFibGUoZS5uYW1lKCkpOwotCi0JCWFzc2VydCB2YXIgIT0gbnVsbDsKLQotCQlycy5hZGQodmFyKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgc3RyaW5nIGxpdGVyYWwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzdHJpbmcgbGl0ZXJhbC4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTdHJpbmdMaXRlcmFsIGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCXJzLmFkZChlLnZhbHVlKCkpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgaW50ZWdlciBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBsaXRlcmFsLgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEludGVnZXJMaXRlcmFsIGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCXJzLmFkZChlLnZhbHVlKCkpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZG91YmxlIGxpdGVyYWwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkb3VibGUgbGl0ZXJhbC4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEb3VibGVMaXRlcmFsIGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCXJzLmFkZChlLnZhbHVlKCkpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZGVjaW1hbCBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZGVjaW1hbCBsaXRlcmFsLgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERlY2ltYWxMaXRlcmFsIGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCXJzLmFkZChlLnZhbHVlKCkpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgcGFyZW50IGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwYXJlbnQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQYXJFeHByIGUpIHsKLQkJcmV0dXJuIGRvX2V4cHIoZS5pdGVyYXRvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGNvbnRleHQgaXRlbSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENudHhJdGVtRXhwciBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlBbnlUeXBlIGNvbnRleHRJdGVtID0gX2RjLmNvbnRleHRfaXRlbSgpOwotCQlpZiAoY29udGV4dEl0ZW0gPT0gbnVsbCkgewotCQkJcmVwb3J0X2Vycm9yKER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCkpOwotCQl9Ci0JCXJzLmFkZChjb250ZXh0SXRlbSk7Ci0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBmdW5jdGlvbiBjYWxsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZnVuY3Rpb24gY2FsbC4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uIG9yIG51bGwKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZ1bmN0aW9uQ2FsbCBlKSB7Ci0JCUFycmF5TGlzdCBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGUuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlFeHByIGFyZyA9IChFeHByKSBpLm5leHQoKTsKLQkJCS8vIGVhY2ggYXJndW1lbnQgd2lsbCBwcm9kdWNlIGEgcmVzdWx0IHNlcXVlbmNlCi0JCQlhcmdzLmFkZChhcmcuYWNjZXB0KHRoaXMpKTsKLQkJfQotCi0JCXRyeSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBycyA9IF9kYy5ldmFsdWF0ZV9mdW5jdGlvbihlLm5hbWUoKSwgYXJncyk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IHNpbmdsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgc2luZ2xlIHR5cGUuCi0JICogQHJldHVybiBudWxsCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTaW5nbGVUeXBlIGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgc2VxdWVuY2UgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHNlcXVlbmNlIHR5cGUuCi0JICogQHJldHVybiBudWxsCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTZXF1ZW5jZVR5cGUgZSkgewotCQlJdGVtVHlwZSBpdCA9IGUuaXRlbV90eXBlKCk7Ci0KLQkJaWYgKGl0ICE9IG51bGwpCi0JCQlpdC5hY2NlcHQodGhpcyk7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgaXRlbSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgaXRlbSB0eXBlLgotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSXRlbVR5cGUgZSkgewotCi0JCXN3aXRjaCAoZS50eXBlKCkpIHsKLQkJY2FzZSBJdGVtVHlwZS5JVEVNOgotCQkJYnJlYWs7Ci0JCWNhc2UgSXRlbVR5cGUuUU5BTUU6Ci0KLQkJCS8vIHRyeSB7Ci0JCQlpZiAoIV9kYy50eXBlX2RlZmluZWQoZS5xbmFtZSgpKSkKLQkJCQlyZXBvcnRfZXJyb3IobmV3IFN0YXRpY1R5cGVOYW1lRXJyb3IoIlR5cGUgbm90IGRlZmluZWQ6ICIKLQkJCQkJCSsgZS5xbmFtZSgpLnN0cmluZygpKSk7Ci0JCQkvKgotCQkJICogfSBjYXRjaChTdGF0aWNOc05hbWVFcnJvciBucykgeyByZXBvcnRfZXJyb3IobnMpOyB9Ci0JCQkgKi8KLQkJCWJyZWFrOwotCi0JCWNhc2UgSXRlbVR5cGUuS0lORFRFU1Q6Ci0JCQllLmtpbmRfdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBraW5kX3Rlc3QoUmVzdWx0U2VxdWVuY2UgcnMsIENsYXNzIGtpbmQpIHsKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlpZiAoIWtpbmQuaXNJbnN0YW5jZShpLm5leHQoKSkpCi0JCQkJaS5yZW1vdmUoKTsKLQkJfQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgYW55IGtpbmQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGFueSBraW5kIHRlc3QuCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQW55S2luZFRlc3QgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvOwotCi0JCXJldHVybiBraW5kX3Rlc3QoYXJnLCBOb2RlVHlwZS5jbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZG9jdW1lbnQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGRvY3VtZW50IHRlc3QuCi0JICogQHJldHVybiByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERvY3VtZW50VGVzdCBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgKChQYWlyKSBfcGFyYW0pLl90d287Ci0JCWludCB0eXBlID0gZS50eXBlKCk7Ci0KLQkJLy8gZmlsdGVyIGRvYyBub2RlcwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGtpbmRfdGVzdChhcmcsIERvY1R5cGUuY2xhc3MpOwotCi0JCWlmICh0eXBlID09IERvY3VtZW50VGVzdC5OT05FKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIGZvciBhbGwgZG9jcywgZmluZCB0aGUgb25lcyB3aXRoIGV4YWN0bHkgb25lIGVsZW1lbnQsIGFuZCBkbwotCQkvLyB0aGUgZWxlbWVudCB0ZXN0Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJRG9jVHlwZSBkb2MgPSAoRG9jVHlwZSkgaS5uZXh0KCk7Ci0JCQlpbnQgZWxlbV9jb3VudCA9IDA7Ci0JCQlFbGVtZW50VHlwZSBlbGVtID0gbnVsbDsKLQotCQkJLy8gbWFrZSBzdXJlIGRvYyBoYXMgb25seSAxIGVsZW1lbnQKLQkJCU5vZGVMaXN0IGNoaWxkcmVuID0gZG9jLm5vZGVfdmFsdWUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkcmVuLmdldExlbmd0aCgpOyBqKyspIHsKLQkJCQlOb2RlIGNoaWxkID0gY2hpbGRyZW4uaXRlbShqKTsKLQotCQkJCS8vIGJpbmdvCi0JCQkJaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQkJZWxlbV9jb3VudCsrOwotCi0JCQkJCWlmIChlbGVtX2NvdW50ID4gMSkKLQkJCQkJCWJyZWFrOwotCi0JCQkJCWVsZW0gPSBuZXcgRWxlbWVudFR5cGUoKEVsZW1lbnQpIGNoaWxkKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8vIHRoaXMgZG9jIGlzIG5vIGdvb2QuLi4gc2VuZCBoaW0gdG8gaGVsbAotCQkJaWYgKGVsZW1fY291bnQgIT0gMSkgewotCQkJCWkucmVtb3ZlKCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWFzc2VydCBlbGVtICE9IG51bGw7Ci0KLQkJCS8vIHNldHVwIHBhcmFtZXRlciBmb3IgZWxlbWVudCB0ZXN0Ci0JCQlSZXN1bHRTZXF1ZW5jZSByZXMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkJcmVzLmFkZChlbGVtKTsKLQkJCV9wYXJhbSA9IG5ldyBQYWlyKCJlbGVtZW50IiwgcmVzKTsKLQotCQkJLy8gZG8gbmFtZSB0ZXN0Ci0JCQlyZXMgPSBudWxsOwotCQkJaWYgKHR5cGUgPT0gRG9jdW1lbnRUZXN0LkVMRU1FTlQpCi0JCQkJcmVzID0gKFJlc3VsdFNlcXVlbmNlKSBlLmVsZW1fdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWVsc2UgaWYgKHR5cGUgPT0gRG9jdW1lbnRUZXN0LlNDSEVNQV9FTEVNRU5UKQotCQkJCXJlcyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5zY2hlbWFfZWxlbV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCQkJZWxzZQotCQkJCWFzc2VydCBmYWxzZTsKLQotCQkJLy8gY2hlY2sgaWYgZWxlbWVudCBzdXJ2aXZlZCBuYW1ldGVzdAotCQkJaWYgKHJlcy5zaXplKCkgIT0gMSkKLQkJCQlpLnJlbW92ZSgpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHRleHQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHRleHQgdGVzdC4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChUZXh0VGVzdCBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgKChQYWlyKSBfcGFyYW0pLl90d287Ci0KLQkJcmV0dXJuIGtpbmRfdGVzdChhcmcsIFRleHRUeXBlLmNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBjb21tZW50IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0ZXh0IHRlc3QuCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ29tbWVudFRlc3QgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvOwotCi0JCXJldHVybiBraW5kX3Rlc3QoYXJnLCBDb21tZW50VHlwZS5jbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgUEkgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIFBJIHRlc3QuCi0JICogQHJldHVybiBhIGFyZ3VtZW50Ci0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQSVRlc3QgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvOwotCi0JCVN0cmluZyBwaXRfYXJnID0gZS5hcmcoKTsKLQotCQkvLyBtYXRjaCBhbnkgcGkKLQkJaWYgKHBpdF9hcmcgPT0gbnVsbCkKLQkJCXJldHVybiBraW5kX3Rlc3QoYXJnLCBQSVR5cGUuY2xhc3MpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgaXRlbSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJLy8gbWF0Y2ggUEkKLQkJCWlmIChpdGVtIGluc3RhbmNlb2YgUElUeXBlKSB7Ci0JCQkJUElUeXBlIHBpID0gKFBJVHlwZSkgaXRlbTsKLQotCQkJCS8vIG1hdGNoIHRhcmdldAotCQkJCWlmICghcGl0X2FyZy5lcXVhbHMocGkudmFsdWUoKS5nZXRUYXJnZXQoKSkpCi0JCQkJCWkucmVtb3ZlKCk7Ci0JCQl9IGVsc2UKLQkJCQlpLnJlbW92ZSgpOwotCQl9Ci0KLQkJcmV0dXJuIGFyZzsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBhdHRyaWJ1dGUgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF0dHJpYnV0ZVRlc3QgZSkgewotCQkvLyBmaWx0ZXIgb3V0IGFsbCBhdHRycwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGtpbmRfdGVzdCgoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvLAotCQkJCUF0dHJUeXBlLmNsYXNzKTsKLQotCQkvLyBtYXRjaCB0aGUgbmFtZSBpZiBpdCdzIG5vdCBhIHdpbGQgY2FyZAotCQlRTmFtZSBuYW1lID0gZS5uYW1lKCk7Ci0JCWlmIChuYW1lICE9IG51bGwgJiYgIWUud2lsZCgpKSB7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlpZiAoIW5hbWVfdGVzdCgoTm9kZVR5cGUpIGkubmV4dCgpLCBuYW1lLCAiYXR0cmlidXRlIikpCi0KLQkJCQkJaS5yZW1vdmUoKTsKLQkJCX0KLQkJfQotCi0JCS8vIG1hdGNoIHRoZSB0eXBlCi0JCVFOYW1lIHR5cGUgPSBlLnR5cGUoKTsKLQkJaWYgKHR5cGUgIT0gbnVsbCkgewotCQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJTm9kZVR5cGUgbm9kZSA9IChOb2RlVHlwZSkgaS5uZXh0KCk7Ci0KLQkJCQkvLyBjaGVjayBpZiBlbGVtZW50IGRlcml2ZXMgZnJvbQotCQkJCWlmICghX2RjLmRlcml2ZXNfZnJvbShub2RlLCB0eXBlKSkKLQkJCQkJaS5yZW1vdmUoKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBzY2hlbWEgYXR0cmlidXRlIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzY2hlbWEgYXR0cmlidXRlIHRlc3QuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2NoZW1hQXR0clRlc3QgZSkgewotCQkvLyBmaWx0ZXIgb3V0IGFsbCBhdHRycwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGtpbmRfdGVzdCgoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvLAotCQkJCUF0dHJUeXBlLmNsYXNzKTsKLQotCQkvLyBtYXRjaCB0aGUgbmFtZQotCQlRTmFtZSBuYW1lID0gZS5hcmcoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlpZiAoIW5hbWVfdGVzdCgoTm9kZVR5cGUpIGkubmV4dCgpLCBuYW1lLCAiYXR0cmlidXRlIikpCi0KLQkJCQlpLnJlbW92ZSgpOwotCQl9Ci0KLQkJLy8gY2hlY2sgdGhlIHR5cGUKLQkJWFNUeXBlRGVmaW5pdGlvbiBldCA9IF9kYy5hdHRyaWJ1dGVfdHlwZV9kZWZpbml0aW9uKG5hbWUpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCi0JCQlpZiAoIV9kYy5kZXJpdmVzX2Zyb20obm9kZSwgZXQpKQotCQkJCWkucmVtb3ZlKCk7Ci0KLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBlbGVtZW50IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBlbGVtZW50IHRlc3QuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRWxlbWVudFRlc3QgZSkgewotCi0JCS8vIGZpbHRlciBvdXQgYWxsIGVsZW1lbnRzCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0ga2luZF90ZXN0KChSZXN1bHRTZXF1ZW5jZSkgKChQYWlyKSBfcGFyYW0pLl90d28sCi0JCQkJRWxlbWVudFR5cGUuY2xhc3MpOwotCi0JCS8vIG1hdGNoIHRoZSBuYW1lIGlmIGl0J3Mgbm90IGEgd2lsZCBjYXJkCi0JCVFOYW1lIG5hbWUgPSBlLm5hbWUoKTsKLQkJaWYgKG5hbWUgIT0gbnVsbCAmJiAhZS53aWxkKCkpIHsKLQkJCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJCWlmICghbmFtZV90ZXN0KChFbGVtZW50VHlwZSkgaS5uZXh0KCksIG5hbWUsICJlbGVtZW50IikpCi0KLQkJCQkJaS5yZW1vdmUoKTsKLQkJCX0KLQkJfQotCi0JCS8vIG1hdGNoIHRoZSB0eXBlCi0JCVFOYW1lIHR5cGUgPSBlLnR5cGUoKTsKLQkJaWYgKHR5cGUgIT0gbnVsbCkgewotCQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJTm9kZVR5cGUgbm9kZSA9IChOb2RlVHlwZSkgaS5uZXh0KCk7Ci0KLQkJCQkvLyBjaGVjayBpZiBlbGVtZW50IGRlcml2ZXMgZnJvbQotCQkJCWlmIChfZGMuZGVyaXZlc19mcm9tKG5vZGUsIHR5cGUpKSB7Ci0JCQkJCS8vIG5pbGxlZCBtYXkgYmUgdHJ1ZSBvciBmYWxzZQotCQkJCQlpZiAoZS5xbWFyaygpKSB7Ci0JCQkJCX0KLQkJCQkJLy8gbmlsbGVkIGhhcyB0byBiZSBmYWxzZQotCQkJCQllbHNlIHsKLQkJCQkJCVhTQm9vbGVhbiBuaWxsZWQgPSAoWFNCb29sZWFuKSBub2RlLm5pbGxlZCgpLmZpcnN0KCk7Ci0JCQkJCQlpZiAobmlsbGVkLnZhbHVlKCkpCi0JCQkJCQkJaS5yZW1vdmUoKTsKLQkJCQkJfQotCi0JCQkJfSBlbHNlCi0JCQkJCWkucmVtb3ZlKCk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgc2NoZW1hIGVsZW1lbnQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHNjaGVtYSBlbGVtZW50IHRlc3QuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2NoZW1hRWxlbVRlc3QgZSkgewotCQkvLyBmaWx0ZXIgb3V0IGFsbCBlbGVtZW50cwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGtpbmRfdGVzdCgoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvLAotCQkJCUVsZW1lbnRUeXBlLmNsYXNzKTsKLQotCQkvLyBtYXRjaCB0aGUgbmFtZQotCQkvLyBYWFggc3Vic3RpdHV0aW9uIGdyb3VwcwotCQlRTmFtZSBuYW1lID0gZS5uYW1lKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJaWYgKCFuYW1lX3Rlc3QoKEVsZW1lbnRUeXBlKSBpLm5leHQoKSwgbmFtZSwgImVsZW1lbnQiKSkKLQotCQkJCWkucmVtb3ZlKCk7Ci0JCX0KLQotCQkvLyBjaGVjayB0aGUgdHlwZQotCQlYU1R5cGVEZWZpbml0aW9uIGV0ID0gX2RjLmVsZW1lbnRfdHlwZV9kZWZpbml0aW9uKG5hbWUpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCi0JCQlpZiAoIV9kYy5kZXJpdmVzX2Zyb20obm9kZSwgZXQpKSB7Ci0JCQkJaS5yZW1vdmUoKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJWFNCb29sZWFuIG5pbGxlZCA9IChYU0Jvb2xlYW4pIG5vZGUubmlsbGVkKCkuZmlyc3QoKTsKLQkJCS8vIFhYWCBvciwgaW4gc2NoZW1hIGl0IGlzIG5pbGxhYmxlCi0JCQlpZiAobmlsbGVkLnZhbHVlKCkpCi0JCQkJaS5yZW1vdmUoKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gcHJlZGljYXRlX3RydXRoKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCS8vIHJ1bGUgMSBvZiBzcGVjLi4uIGlmIG51bWVyaWMgdHlwZToKLQkJLy8gaWYgbnVtIGVxIHBvc2l0aW9uIHRoZW4gdHJ1ZSBlbHNlIGZhbHNlCi0JCWlmIChycy5zaXplKCkgPT0gMSkgewotCQkJQW55VHlwZSBhdCA9IHJzLmdldCgwKTsKLQotCQkJaWYgKGF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpIHsKLQkJCQl0cnkgewotCQkJCQlfZ194c2ludC5zZXRfaW50KEJpZ0ludGVnZXIudmFsdWVPZihfZGMuY29udGV4dF9wb3NpdGlvbigpKSk7Ci0JCQkJCXJldHVybiBGc0VxLmZzX2VxX2Zhc3QoYXQsIF9nX3hzaW50LCBfZGMpOwotCQkJCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0KLQkJCQkJLy8gdW5yZWFjaAotCQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBydWxlIDIKLQkJWFNCb29sZWFuIHJldCA9IGVmZmVjdGl2ZV9ib29sZWFuX3ZhbHVlKHJzKTsKLQotCQlyZXR1cm4gcmV0LnZhbHVlKCk7Ci0JfQotCi0JLy8gZG8gdGhlIHByZWRpY2F0ZSBmb3IgYWxsIGl0ZW1zIGluIGZvY3VzCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBkb19wcmVkaWNhdGUoQ29sbGVjdGlvbiBleHBycykgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJRm9jdXMgZm9jdXMgPSBfZGMuZm9jdXMoKTsKLQkJaW50IG9yaWdpbmFsX2NwID0gZm9jdXMucG9zaXRpb24oKTsKLQotCQkvLyBvcHRpbWl6YXRpb24KLQkJLy8gY2hlY2sgaWYgcHJlZGljYXRlIGlzIHNpbmdsZSBudW1lcmljIGNvbnN0YW50Ci0JCWlmIChleHBycy5zaXplKCkgPT0gMSkgewotCQkJRXhwciBleHByID0gKEV4cHIpIGV4cHJzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCQlpZiAoZXhwciBpbnN0YW5jZW9mIFhQYXRoRXhwcikgewotCQkJCVhQYXRoRXhwciB4cGUgPSAoWFBhdGhFeHByKSBleHByOwotCQkJCWlmICh4cGUubmV4dCgpID09IG51bGwgJiYgeHBlLnNsYXNoZXMoKSA9PSAwCi0JCQkJCQkmJiB4cGUuZXhwcigpIGluc3RhbmNlb2YgRmlsdGVyRXhwcikgewotCQkJCQlGaWx0ZXJFeHByIGZleCA9IChGaWx0ZXJFeHByKSB4cGUuZXhwcigpOwotCQkJCQlpZiAoZmV4LnByaW1hcnkoKSBpbnN0YW5jZW9mIEludGVnZXJMaXRlcmFsKSB7Ci0JCQkJCQlpbnQgcG9zID0gKCgoSW50ZWdlckxpdGVyYWwpIGZleC5wcmltYXJ5KCkpLnZhbHVlKCkKLQkJCQkJCQkJLmludF92YWx1ZSgpKS5pbnRWYWx1ZSgpOwotCi0JCQkJCQlpZiAocG9zIDw9IGZvY3VzLmxhc3QoKSAmJiBwb3MgPiAwKSB7Ci0JCQkJCQkJZm9jdXMuc2V0X3Bvc2l0aW9uKHBvcyk7Ci0JCQkJCQkJcnMuYWRkKGZvY3VzLmNvbnRleHRfaXRlbSgpKTsKLQkJCQkJCX0KLQkJCQkJCWZvY3VzLnNldF9wb3NpdGlvbihvcmlnaW5hbF9jcCk7Ci0JCQkJCQlyZXR1cm4gcnM7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBnbyB0aHJvdWdoIGFsbCBlbGVtZW50cwotCQl3aGlsZSAodHJ1ZSkgewotCQkJLy8gZG8gdGhlIHByZWRpY2F0ZQotCQkJLy8gWFhYIHNheG9uIGRvZXNuJ3QgYWxsb3cgZm9yIHByZWRpY2F0ZXMgdG8gaGF2ZQotCQkJLy8gY29tbWFzLi4uIGJ1dCBYUGF0aCAyLjAgc3BlYyBzZWVtcyB0byBkbwotCQkJUmVzdWx0U2VxdWVuY2UgcmVzID0gZG9fZXhwcihleHBycy5pdGVyYXRvcigpKTsKLQotCQkJLy8gaWYgcHJlZGljYXRlIGlzIHRydWUsIHRoZSBjb250ZXh0IGl0ZW0gaXMgZGVmaW5pdGVseQotCQkJLy8gaW4gdGhlIHNlcXVlbmNlCi0JCQlpZiAocHJlZGljYXRlX3RydXRoKHJlcykpCi0JCQkJcnMuYWRkKF9kYy5jb250ZXh0X2l0ZW0oKSk7Ci0KLQkJCXJlcy5yZWxlYXNlKCk7Ci0JCQlpZiAoIWZvY3VzLmFkdmFuY2VfY3AoKSkKLQkJCQlicmVhazsKLQotCQl9Ci0KLQkJLy8gcmVzdG9yZQotCQlmb2N1cy5zZXRfcG9zaXRpb24ob3JpZ2luYWxfY3ApOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBheGlzIHN0ZXAuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBheGlzIHN0ZXAuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQXhpc1N0ZXAgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5zdGVwKCkuYWNjZXB0KHRoaXMpOwotCi0JCWlmIChlLnByZWRpY2F0ZV9jb3VudCgpID09IDApCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gSSB0YWtlIGl0IHByZWRpY2F0ZXMgYXJlIGxvZ2ljYWwgQU5EUy4uLgotCQlGb2N1cyBvcmlnaW5hbF9mb2N1cyA9IF9kYy5mb2N1cygpOwotCi0JCS8vIGdvIHRocm91Z2ggYWxsIHByZWRpY2F0ZXMKLQkJZm9yIChJdGVyYXRvciBpID0gZS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCS8vIGVtcHR5IHJlc3VsdHMuLi4gZ2V0IG91dCBvZiBoZXJlID8gWFhYCi0JCQlpZiAocnMuc2l6ZSgpID09IDApCi0JCQkJYnJlYWs7Ci0KLQkJCV9kYy5zZXRfZm9jdXMobmV3IEZvY3VzKHJzKSk7Ci0JCQlycyA9IGRvX3ByZWRpY2F0ZSgoQ29sbGVjdGlvbikgaS5uZXh0KCkpOwotCi0JCX0KLQotCQkvLyByZXN0b3JlIGZvY3VzIFtjb250ZXh0IHN3aXRjaGluZyA7RCBdCi0JCV9kYy5zZXRfZm9jdXMob3JpZ2luYWxfZm9jdXMpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZmlsdGVyIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGZpbHRlciBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQkvLyBYWFggdW5pZnkgd2l0aCB0b3AgPwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRmlsdGVyRXhwciBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBlLnByaW1hcnkoKS5hY2NlcHQodGhpcyk7Ci0KLQkJLy8gaWYgbm8gcHJlZGljYXRlcyBhcmUgcHJlc2VudCwgdGhlbiB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzCi0JCS8vIHRoZSBwcmltYXJ5IGV4cHJlc3Npb24KLQkJaWYgKGUucHJlZGljYXRlX2NvdW50KCkgPT0gMCkKLQkJCXJldHVybiByczsKLQotCQlGb2N1cyBvcmlnaW5hbF9mb2N1cyA9IF9kYy5mb2N1cygpOwotCi0JCS8vIGdvIHRocm91Z2ggYWxsIHByZWRpY2F0ZXMKLQkJZm9yIChJdGVyYXRvciBpID0gZS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCWlmIChycy5zaXplKCkgPT0gMCkKLQkJCQlicmVhazsKLQotCQkJX2RjLnNldF9mb2N1cyhuZXcgRm9jdXMocnMpKTsKLQkJCXJzID0gZG9fcHJlZGljYXRlKChDb2xsZWN0aW9uKSBpLm5leHQoKSk7Ci0KLQkJfQotCi0JCS8vIHJlc3RvcmUgZm9jdXMgW2NvbnRleHQgc3dpdGNoaW5nIDtEIF0KLQkJX2RjLnNldF9mb2N1cyhvcmlnaW5hbF9mb2N1cyk7Ci0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0R5bmFtaWNDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0R5bmFtaWNDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NDEyZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EeW5hbWljQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbiBkYXRhIHR5cGVzLiAKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjgxMTU5IC0gZml4IGRvY3VtZW50IGxvYWRpbmcgYW5kIHJlc29sdmluZyBVUklzIAotICogICAgIEplc3BlciBNb2xsZXItIGJ1ZyAyODY0NTIgLSBhbHdheXMgcmV0dXJuIHRoZSBzdGFibGUgZGF0ZS90aW1lIGZyb20gZHluYW1pYyBjb250ZXh0Ci0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIEplc3BlciBNb2xsZXItIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEludGVyZmFjZSBmb3IgZHluYW1pYyBjb250ZXh0LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIER5bmFtaWNDb250ZXh0IGV4dGVuZHMgU3RhdGljQ29udGV4dCB7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCBjb2xsYXRpb24gd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgYmUgaW1wbGVtZW50ZWQKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ERVBPSU5UX0NPTExBVElPTiA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hwYXRoLWZ1bmN0aW9ucy9jb2xsYXRpb24vY29kZXBvaW50IjsKLQotCS8qKgotCSAqIEdldCBjb250ZXh0IGl0ZW0uCi0JICogCi0JICogQHJldHVybiB0aGUgY29udGV4dCBpdGVtLgotCSAqLwotCXB1YmxpYyBBbnlUeXBlIGNvbnRleHRfaXRlbSgpOwotCi0JLyoqCi0JICogR2V0IGNvbnRleHQgbm9kZSBwb3NpdGlvbi4KLQkgKiAKLQkgKiBAcmV0dXJuIHBvc2l0aW9uIG9mIGNvbnRleHQgbm9kZS4KLQkgKi8KLQlwdWJsaWMgaW50IGNvbnRleHRfcG9zaXRpb24oKTsKLQotCS8qKgotCSAqIEdldCBwb3NpdGlvbiBvZiBsYXN0IGl0ZW0uCi0JICogCi0JICogQHJldHVybiBsYXN0IGl0ZW0gcG9zaXRpb24uCi0JICovCi0JcHVibGljIGludCBsYXN0KCk7Ci0KLQkvKioKLQkgKiBHZXQgdmFyaWFibGUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS4KLQkgKiBAcmV0dXJuIHZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBBbnlUeXBlIGdldF92YXJpYWJsZShRTmFtZSBuYW1lKTsKLQkKLQkvKioKLQkgKiBTZXQgdmFyaWFibGUuCi0JICogCi0JICogQHBhcmFtIHZhcgotCSAqICAgICAgICAgICAgaXMgbmFtZSBvZiB0aGUgdmFyaWFibGUuCi0JICogQHBhcmFtIHZhbAotCSAqICAgICAgICAgICAgaXMgdGhlIHZhbHVlIHRvIGJlIHNldCBmb3IgdGhlIHZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF92YXJpYWJsZShRTmFtZSB2YXIsIEFueVR5cGUgdmFsKTsKLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBmdW5jdGlvbiBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgbmFtZS4KLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIHRoZSBhcmd1bWVudHMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBkeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZV9mdW5jdGlvbihRTmFtZSBuYW1lLCBDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yOwotCi0JLyoqCi0JICogUmVhZHMgdGhlIGRheSBmcm9tIGEgVGltZUR1cmF0aW9uIHR5cGUKLQkgKiAKLQkgKiBAcmV0dXJuIGN1cnJlbnQgZGF0ZSB0aW1lIGFuZCBpbXBsaWNpdCB0aW1lem9uZS4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKTsKLQotCS8qKgotCSAqIEdldCBkb2N1bWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpCi0JICogICAgICAgICAgICBpcyB0aGUgVVJJIG9mIHRoZSBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIGRvY3VtZW50LgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQkvLyBhdmFpbGFibGUgZG9jCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGdldF9kb2MoVVJJIHVyaSk7Ci0KLQkvKioKLQkgKiBSZXNvbHZlIGFuIFVSSQotCSAqIAotCSAqIEBwYXJhbSB1cmkKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwb3NzaWJseSByZWxhdGl2ZSBVUkkgdG8gcmVzb2x2ZQotCSAqIEByZXR1cm4gdGhlIGFic29sdXRpemVkLCByZXNvbHZlZCBVUkkuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBVUkkgcmVzb2x2ZV91cmkoU3RyaW5nIHVyaSk7Ci0KLQkvLyBhdmFpbGFibGUgY29sbGVjdGlvbnMKLQotCS8vIGRlZmF1bHQgY29sbGVjdGlvbgotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBkYXRlIHRpbWUgdXNpbmcgdGhlIEdyZWdvcmlhbkNhbGVuZGFyLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSwgd2hpY2ggd2lsbCBhbHdheXMgYmUgc2FtZSBmb3IgdGhlIGR5bmFtaWMgY29udGV4dC4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIEdyZWdvcmlhbkNhbGVuZGFyIGN1cnJlbnRfZGF0ZV90aW1lKCk7Ci0JCi0JLyoqCi0JICogU2V0IGZvY3VzLgotCSAqIAotCSAqIEBwYXJhbSBmb2N1cwotCSAqICAgICAgICAgICAgaXMgZm9jdXMgdG8gYmUgc2V0LgotCSAqLwotCS8vIE90aGVyIGZ1bmN0aW9ucwotCXB1YmxpYyB2b2lkIHNldF9mb2N1cyhGb2N1cyBmb2N1cyk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gZm9jdXMuCi0JICogCi0JICogQHJldHVybiBGb2N1cwotCSAqLwotCXB1YmxpYyBGb2N1cyBmb2N1cygpOwotCQotCS8qKgotCSAqIFJldHVybiBhIHVzZWZ1bCBjb2xsYXRvciBmb3IgdGhlIHNwZWNpZmllZCBVUkkKLQkgKiAKLQkgKiBAcGFyYW0gdXJpCi0JICogQHJldHVybiBBIEphYSBjb2xsYXRvciwgb3IgbnVsbCwgaWYgbm8gc3VjaCBDb2xsYXRvciBleGlzdHMgCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBDb21wYXJhdG9yPE9iamVjdD4gZ2V0X2NvbGxhdGlvbihTdHJpbmcgdXJpKTsgCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBkZWZhdWx0IGNvbGxhdG9yCi0JICogCi0JICogQHJldHVybiBUaGUgZGVmYXVsdCBuYW1lIHRvIHVzZSBhcyB0aGUgY29sbGF0b3IKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFN0cmluZyBkZWZhdWx0X2NvbGxhdGlvbl9uYW1lKCk7Ci0JCi0JLy8gZGVwcmVjYXRlZAotCS8qKgotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JQERlcHJlY2F0ZWQKLQlwdWJsaWMgaW50IG5vZGVfcG9zaXRpb24oTm9kZSBub2RlKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EeW5hbWljRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRHluYW1pY0Vycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMzcyZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EeW5hbWljRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI3Mzc2MyAtIGNvcnJlY3QgZXJyb3IgY29kZXMuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZyAyODAxMDYgLSBDb3JyZWN0IFhQRFkwMDIxIC0gWFBTVDAwMDMgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgxNDkgLSBhZGQgbW9yZSBmbjplcnJvciBpbmZvCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgxMTU5IC0gZml4IGRvY3VtZW50IGxvYWRpbmcgYW5kIHJlc29sdmluZyBVUklzIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gQnVnIDI4NjA2MiAtIEFkZCBGT0FSMDAwMiAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI2Mjc2NSAtIEFkZCBGT1JHMDAwNgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjsKLQotLyoqCi0gKiBEeW5hbWljIEVycm9yIGxpa2UgZGl2aXNpb24gYnkgMCBvciB0eXBlIGVycm9ycy4KLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNFcnJvciBleHRlbmRzIFhQYXRoRXhjZXB0aW9uIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNjE0NjgzMDc2NDc1MzY4NTc5MUw7Ci0KLQkvLyBlcnJvcmNvZGUgc3BlY2lmaWVkIGluIGh0dHA6Ly93d3cudzMub3JnLzIwMDQvMTAveHF0LWVycm9ycyBpIGZpbmsKLQlwcml2YXRlIFN0cmluZyBfY29kZTsKLQotCS8vIFhYWCBkaXJ0eS4uLiBzaG91bGQgZml4IHRoZSBlcnJvciBzdHVmZgotCS8vIGhhdmUgYSB0eXBlIGVycm9yIGVuY2Fwc3VsYXRlZCBpbiBhIGR5bmFtaWMgZXJyb3IKLQlwcml2YXRlIFR5cGVFcnJvciBfdGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRHluYW1pYyBFcnJvci4KLQkgKiAKLQkgKiBAcGFyYW0gY29kZQotCSAqICAgICAgICAgICAgaXMgdGhlIGNvZGUgdGhhdCBpcyBzZXQuCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBEeW5hbWljRXJyb3IoU3RyaW5nIGNvZGUsIFN0cmluZyBlcnIpIHsKLQkJc3VwZXIoZXJyKTsKLQkJX2NvZGUgPSBjb2RlOwotCQlfdGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEeW5hbWljIEVycm9yLgotCSAqIAotCSAqIEBwYXJhbSB0ZQotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yIHR5cGUuCi0JICovCi0JcHVibGljIER5bmFtaWNFcnJvcihUeXBlRXJyb3IgdGUpIHsKLQkJc3VwZXIodGUucmVhc29uKCkpOwotCQlfdGUgPSB0ZTsKLQkJX2NvZGUgPSB0ZS5jb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIG9mIHRoZSBjb2RlLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGNvZGUuCi0JICovCi0JcHVibGljIFN0cmluZyBjb2RlKCkgewotCQlpZiAoX3RlICE9IG51bGwpCi0JCQlyZXR1cm4gX3RlLmNvZGUoKTsKLQkJcmV0dXJuIF9jb2RlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGNhbnRfY2FzdChTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJDYW4ndCBjYXN0IHRvIHJlcXVpcmVkIHR5cGUuIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPUkcwMDAxIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBhIER5bmFtaWMgRXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgdGhyb3dfdHlwZV9lcnJvcigpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQl0aHJvdyBhcmd1bWVudF90eXBlX2Vycm9yKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICoKLQkgKiBAcGFyYW0gdHlwZSBUeXBlIGZvdW5kCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBhcmd1bWVudF90eXBlX2Vycm9yKENsYXNzPD8+IHR5cGUpIHsKLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPUkcwMDA2IiwgdHlwZSAhPSBudWxsID8KLQkJCQkiSW52YWxpZCBhcmd1bWVudCB0eXBlIDoiICsgdHlwZS5nZXRTaW1wbGVOYW1lKCkgOiAiSW52YWxpZCBhcmd1bWVudCB0eXBlIik7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGludmFsaWRUeXBlKCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGlucHV0VG9MYXJnZUZvckRlY2ltYWwoKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcigiRk9DQTAwMDEiLCAiSW5wdXQgdmFsdWUgdG9vIGxhcmdlIGZvciBkZWNpbWFsIik7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIGRlc2MKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIHVzZXJfZXJyb3IoU3RyaW5nIG5zLCBTdHJpbmcgY29kZSwgU3RyaW5nIGRlc2MpIHsKLQkJU3RyaW5nIGVycm9yID0gIkVycm9yIHJlcG9ydGVkIGJ5IGZuOmVycm9yLiI7Ci0KLQkJaWYgKGRlc2MgIT0gbnVsbCkKLQkJCWVycm9yID0gZGVzYyArICIgKHJlcG9ydGVkIGJ5IGZuOmVycm9yKSI7Ci0KLQkJLy8gWFhYOiBOZWVkIHRvIHBhc3MgdGhlIG5hbWVzcGFjZSBhbHNvLi4uCi0JCXJldHVybiBuZXcgRHluYW1pY0Vycm9yKGNvZGUsIGVycm9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSBlcnIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgdXNlcl9lcnJvcihTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJFcnJvciByZXBvcnRlZCBieSBmbjplcnJvci4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yID0gZXJyICsgIiAocmVwb3J0ZWQgYnkgZm46ZXJyb3IpIjsKLQotCQkvLyBYWFg6IE5lZWQgdG8gcGFzcyB0aGUgbmFtZXNwYWNlIGFsc28uLi4KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPRVIwMDAwIiwgZXJyb3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBEeW5hbWljIEVycm9yIGZvciBpbnZhbGlkIGZsYWdzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMKLQkgKiBAcGFyYW0gZXJyCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciByZWdleF9mbGFnc19lcnJvcihTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnIHBhcmFtZXRlci4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9SWDAwMDEiLCBlcnJvcik7Ci0JCQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIHJlZ2V4X2Vycm9yKFN0cmluZyBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uLiI7Ci0KLQkJaWYgKGVyciAhPSBudWxsKQotCQkJZXJyb3IgKz0gIiAiICsgZXJyOwotCi0JCXJldHVybiBuZXcgRHluYW1pY0Vycm9yKCJGT1JYMDAwMiIsIGVycm9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSBlcnIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBlcnJvcgotCSAqIEByZXR1cm4gdGhlIER5bmFtaWNFcnJvci4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgcmVnZXhfbWF0Y2hfemVyb19sZW5ndGgoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDAzIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIFVuaWNvZGUgY29kZXBvaW50Ci0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciB1bnN1cHBvcnRlZF9jb2RlcG9pbnQoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5zdXBwb3J0ZWQgY29kZXBvaW50IjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPQ0gwMDAxIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIG5vcm1hbGl6YXRpb24gZm9ybQotCSAqIAotCSAqIEBwYXJhbSBjb2xsYXRpb25OYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgZXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICogQHNpbmNlIDEuMQotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIHVuc3VwcG9ydGVkX2NvbGxhdGlvbihTdHJpbmcgY29sbGF0aW9uTmFtZSkgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5zdXBwb3J0ZWQgY29sbGF0aW9uIFVSSS4gIjsKLQotCQlpZiAoY29sbGF0aW9uTmFtZSAhPSBudWxsKQotCQkJZXJyb3IgKz0gIiAiICsgY29sbGF0aW9uTmFtZTsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9DSDAwMDIiLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciB1bnN1cHBvcnRlZF9ub3JtYWxpemF0aW9uX2Zvcm0oU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtLiAiOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9DSDAwMDMiLCBlcnJvcik7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRHluYW1pY0Vycm9yIG1ha2VfZXJyb3IoU3RyaW5nIGNvZGUsIFN0cmluZyBlcnIsIFN0cmluZyBtc2cpIHsKLQkJU3RyaW5nIGVycm9yID0gZXJyOwotCi0JCWlmIChtc2cgIT0gbnVsbCkKLQkJCWVycm9yICs9IG1zZzsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcihjb2RlLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEludmFsaWQgbGV4aWNhbCB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGxleGljYWxfZXJyb3IoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9DQTAwMDIiLCAiSW52YWxpZCBsZXhpY2FsIHZhbHVlLiIsIG1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEl0ZW1zIG5vdCBjb21wYXJhYmxlCi0JICogCi0JICogQHBhcmFtIG1zZwotCSAqICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2UKLQkgKiBAcmV0dXJuIHRoZSBtYWtlX2Vycm9yCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3Igbm90X2NtcChTdHJpbmcgbXNnKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT1RZMDAxMiIsICJJdGVtcyBub3QgY29tcGFyYWJsZSIsIG1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZQotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIG1vcmVfb25lX2l0ZW0oU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigKLQkJCQkiRk9SRzAwMDMiLAotCQkJCSJmbjp6ZXJvLW9yLW9uZSBjYWxsZWQgd2l0aCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgbW9yZSB0aGFuIG9uZSBpdGVtIiwKLQkJCQltc2cpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UKLQkgKiAKLQkgKiBAcGFyYW0gbXNnCi0JICogICAgICAgICAgICBpcyB0aGUgbWVzc2FnZQotCSAqIEByZXR1cm4gdGhlIG1ha2VfZXJyb3IKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBlbXB0eV9zZXEoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9SRzAwMDQiLAotCQkJCSJmbjpvbmUtb3ItbW9yZSBjYWxsZWQgd2l0aCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgbm8gaXRlbXMiLAotCQkJCW1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZQotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIG5vdF9vbmUoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigKLQkJCQkiRk9SRzAwMDUiLAotCQkJCSJmbjpleGFjdGx5LW9uZSBjYWxsZWQgd2l0aCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgemVybyBvciBtb3JlIHRoYW4gb25lIGl0ZW0iLAotCQkJCW1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIEludmFsaWQgYXJndW1lbnQgdG8gZm46Y29sbGVjdGlvbgotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBpbnZhbGlkQ29sbGVjdGlvbkFyZ3VtZW50KCkgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDQiLCAiSW52YWxpZCBhcmd1bWVudCB0byBmbjpkb2MiLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIEludmFsaWQgYXJndW1lbnQgdG8gZm46ZG9jCi0JICogCi0JICogQHBhcmFtIG1zZwotCSAqICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2UKLQkgKiBAcmV0dXJuIHRoZSBtYWtlX2Vycm9yCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW52YWxpZF9kb2MoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDUiLCAiSW52YWxpZCBhcmd1bWVudCB0byBmbjpkb2MiLCBtc2cpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiBmbjpkb2MgY2Fubm90IGxvYWQgaXRzIGRvY3VtZW50Ci0JICogCi0JICogQHBhcmFtIG1zZwotCSAqICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2UKLQkgKiBAcmV0dXJuIHRoZSBtYWtlX2Vycm9yCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGRvY19ub3RfZm91bmQoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDIiLCAiRG9jdW1lbnQgYXJndW1lbnQgZm46ZG9jIG5vdCBmb3VuZCIsIG1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGEgRGl2aXNpb24gYnkgemVybwotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGRpdl96ZXJvKFN0cmluZyBtc2cpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPQVIwMDAxIiwgIkRpdmlzaW9uIGJ5IHplcm8iLCBtc2cpOwotCX0KLQotCS8qKgotCSAqIE51bWVyaWMgb3BlcmF0aW9uIG92ZXJmbG93L3VuZGVyZmxvdwotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBudW1lcmljX292ZXJmbG93KFN0cmluZyBtc2cpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPQVIwMDAyIiwgIk51bWVyaWMgb3ZlcmZsb3cvdW5kZXJmbG93IiwgbXNnKTsKLQl9Ci0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGNvbnRleHRVbmRlZmluZWQoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJYUERZMDAwMiIsICJDb250ZXh0IGlzIHVuZGVmaW5lZC4iLCAiIik7Ci0JfQotCi0JLyoqCi0JICogRGF0YSBpcyBpbnZhbGlkIGZvciBjYXN0aW5nIG9yIHRoZSBkYXRhIHR5cGUgY29uc3RydWN0b3IuCi0JICogQHBhcmFtIG1zZwotCSAqIEByZXR1cm4gRk9SRzAwMDEKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW52YWxpZEZvckNhc3RDb25zdHJ1Y3RvcigpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoCi0JCQkJIkZPUkcwMDAxIiwKLQkJCQkiZGF0YSB0eXBlIGludmFsaWQgZm9yIGNhc3Qgb3IgY29uc3RydWN0b3IiLAotCQkJCW51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBObyBuYW1lc3BhY2UgZm91bmQgZm9yIHByZWZpeC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGludmFsaWRQcmVmaXgoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT05TMDAwNCIsICJObyBuYW1lc3BhY2UgZm91bmQgZm9yIHByZWZpeC4iLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogTm8gY29udGV4dCBkb2N1bWVudAotCSAqIEByZXR1cm4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3Igbm9Db250ZXh0RG9jKCkgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDEiLCAiTm8gY29udGV4dCBkb2N1bWVudC4iLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBObyBiYXNlLXVyaSBkZWZpbmVkLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3Igbm9CYXNlVVJJKCkgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9OUzAwMDUiLCAiQmFzZS11cmkgbm90IGRlZmluZWQgaW4gdGhlIHN0YXRpYyBjb250ZXh0LiIsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBFcnJvciByZXNvbHZpbmcgcmVsYXRpdmUgdXJpIGFnYWluc3QgYmFzZS11cmkuCi0JICogCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBlcnJvclJlc29sdmluZ1VSSSgpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPUkcwMDAyIiwgIkludmFsaWQgYXJndW1lbnQgdG8gZm46cmVzb2x2ZS11cmkoKS4iLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogSW52YWxpZCBUaW1lem9uZSB2YWx1ZS4KLQkgKiBAcmV0dXJuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGludmFsaWRUaW1lem9uZSgpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPRFQwMDAzIiwgIkludmFsaWQgdGltZXpvbmUgdmFsdWUuIiwgbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIE92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBvdmVyZmxvd1VuZGVyZmxvdygpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPRFQwMDAyIiwgIk92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uIiwgbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIE92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBuYW4oKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT0NBMDAwNSIsICJOYU4gc3VwcGxpZWQgYXMgZmxvYXQvZG91YmxlIHZhbHVlLiIsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBJbnZhbGlkIGxleGljYWwgdmFsdWUKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW52YWxpZExleGljYWxWYWx1ZSgpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPQ0EwMDAyIiwgIkludmFsaWQgbGV4aWNhbCB2YWx1ZS4iLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogT3ZlcmZsb3cvdW5kZXJmbG93IGluIGRhdGUvdGltZSBvcGVyYXRpb24gCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIG92ZXJmbG93RGF0ZVRpbWUoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT0RUMDAwMSIsICJPdmVyZmxvdy91bmRlcmZsb3cgaW4gZGF0ZS90aW1lIG9wZXJhdGlvbiIsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBUaGUgdHdvIGFyZ3VtZW50cyB0byBmbjpkYXRlVGltZSBoYXZlIGluY29uc2lzdGVudCB0aW1lem9uZXMKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW5jb25zaXN0ZW50VGltZVpvbmUoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT1JHMDAwOCIsICJUaGUgdHdvIGFyZ3VtZW50cyB0byBmbjpkYXRlVGltZSBoYXZlIGluY29uc2lzdGVudCB0aW1lem9uZXMiLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0V2YWx1YXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9FdmFsdWF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYyNzk1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0V2YWx1YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC4qOwotCi0vKioKLSAqIGludGVyZmFjZSB0byBFdmFsdWF0b3IKLSAqLwotcHVibGljIGludGVyZmFjZSBFdmFsdWF0b3IgewotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIHJvb3Qgbm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gcm9vdAotCSAqICAgICAgICAgICAgaXMgdGhlIFhQYXRoIG5vZGUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBkeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKFhQYXRoTm9kZSByb290KSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9KRmxleEN1cFBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9KRmxleEN1cFBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmM1NTRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvSkZsZXhDdXBQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmFfY3VwLnJ1bnRpbWUuKjsKLWltcG9ydCBqYXZhLmlvLio7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5DdXBFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuSkZsZXhFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhGbGV4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEN1cDsKLQotLyoqCi0gKiBKRmxleEN1cFBhcnNlciBwYXJzZXMgdGhlIHhwYXRoIGV4cHJlc3Npb24KLSAqLwotcHVibGljIGNsYXNzIEpGbGV4Q3VwUGFyc2VyIGltcGxlbWVudHMgWFBhdGhQYXJzZXIgewotCi0JLyoqCi0JICogVHJpZXMgdG8gcGFyc2UgdGhlIHhwYXRoIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0geHBhdGgKLQkgKiAgICAgICAgICAgIGlzIHRoZSB4cGF0aCBzdHJpbmcuCi0JICogQHRocm93cyBYUGF0aFBhcnNlckV4Y2VwdGlvbi4KLQkgKiBAcmV0dXJuIHRoZSB4cGF0aCB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgWFBhdGggcGFyc2UoU3RyaW5nIHhwYXRoKSB0aHJvd3MgWFBhdGhQYXJzZXJFeGNlcHRpb24gewotCi0JCVhQYXRoRmxleCBsZXhlciA9IG5ldyBYUGF0aEZsZXgobmV3IFN0cmluZ1JlYWRlcih4cGF0aCkpOwotCi0JCVhQYXRoQ3VwIHAgPSBuZXcgWFBhdGhDdXAobGV4ZXIpOwotCQl0cnkgewotCQkJU3ltYm9sIHJlcyA9IHAucGFyc2UoKTsKLQkJCXJldHVybiAoWFBhdGgpIHJlcy52YWx1ZTsKLQotCQl9IGNhdGNoIChKRmxleEVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBYUGF0aFBhcnNlckV4Y2VwdGlvbigiSkZsZXggbGV4ZXIgZXJyb3I6ICIgKyBlLnJlYXNvbigpKTsKLQkJfSBjYXRjaCAoQ3VwRXJyb3IgZSkgewotCQkJdGhyb3cgbmV3IFhQYXRoUGFyc2VyRXhjZXB0aW9uKCJDVVAgcGFyc2VyIGVycm9yOiAiICsgZS5yZWFzb24oKSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTdHJpbmcgZXJyID0gIlVua25vd24gZXJyb3IgYXQgbGluZSAiICsgbGV4ZXIubGluZW5vKCk7Ci0KLQkJCWVyciArPSAiIGNvbCAiICsgbGV4ZXIuY29sbm8oKTsKLQkJCWVyciArPSAiOiAiICsgbGV4ZXIueXl0ZXh0KCk7Ci0KLQkJCXRocm93IG5ldyBYUGF0aFBhcnNlckV4Y2VwdGlvbihlcnIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9SZXN1bHRTZXF1ZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9SZXN1bHRTZXF1ZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjU5ZmExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUmVzdWx0U2VxdWVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIEludGVyZmFjZSB0byB0aGUgbWV0aG9kcyBvZiByYW5nZSBvZiByZXN1bHQgc2VxdWVuY2UKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlc3VsdFNlcXVlbmNlIHsKLQotCS8qKgotCSAqIGFkZCBpdGVtCi0JICogCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlzIGFuIGl0ZW0gb2YgYW55IHR5cGUuCi0JICovCi0JcHVibGljIGFic3RyYWN0IHZvaWQgYWRkKEFueVR5cGUgaXRlbSk7Ci0KLQkvKioKLQkgKiBjb25jYXRpbmF0ZSBmcm9tIHJzCi0JICogCi0JICogQHBhcmFtIHJzCi0JICogICAgICAgICAgICBpcyBhIFJlc3VsdCBTZXF1ZW5jZS4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjb25jYXQoUmVzdWx0U2VxdWVuY2UgcnMpOwotCi0JLyoqCi0JICogTGlzdCBJdGVyYXRvci4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKCk7Ci0KLQkvKioKLQkgKiBnZXQgaXRlbSBpbiBpbmRleCBpCi0JICogCi0JICogQHBhcmFtIGkKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwb3NpdGlvbi4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgQW55VHlwZSBnZXQoaW50IGkpOwotCi0JLyoqCi0JICogZ2V0IHRoZSBzaXplCi0JICogCi0JICogQHJldHVybiB0aGUgc2l6ZS4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgaW50IHNpemUoKTsKLQotCS8qKgotCSAqIGNsZWFyCi0JICovCi0JcHVibGljIGFic3RyYWN0IHZvaWQgY2xlYXIoKTsKLQotCS8qKgotCSAqIGNyZWF0ZSBhIG5ldyByZXN1bHQgc2VxdWVuY2UKLQkgKiAKLQkgKiBAcmV0dXJuIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZS4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgUmVzdWx0U2VxdWVuY2UgY3JlYXRlX25ldygpOwotCi0JLyoqCi0JICogcmV0cmlldmUgdGhlIGZpcnN0IGl0ZW0KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBpdGVtLgotCSAqLwotCXB1YmxpYyBBbnlUeXBlIGZpcnN0KCkgewotCQlyZXR1cm4gZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIGNoZWNrIGlzIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eQotCSAqIAotCSAqIEByZXR1cm4gYm9vbGVhbi4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlbXB0eSgpIHsKLQkJaWYgKHNpemUoKSA9PSAwKQotCQkJcmV0dXJuIHRydWU7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiByZXRyaWV2ZSBpdGVtcyBpbiBzZXF1ZW5jZQotCSAqIAotCSAqIEByZXR1cm4gcmVzdWx0IHN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0JCWludCBudW0gPSAxOwotCi0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IGl0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBlbGVtID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQlidWYuYXBwZW5kKG51bSArICIpICIpOwotCi0JCQlidWYuYXBwZW5kKGVsZW0uc3RyaW5nX3R5cGUoKSArICI6ICIpOwotCi0JCQlTdHJpbmcgdmFsdWUgPSBlbGVtLnN0cmluZ192YWx1ZSgpOwotCi0JCQlpZiAoZWxlbSBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQkJUU5hbWUgdG1wID0gKChOb2RlVHlwZSkgZWxlbSkubm9kZV9uYW1lKCk7Ci0KLQkJCQlpZiAodG1wICE9IG51bGwpCi0JCQkJCXZhbHVlID0gdG1wLmV4cGFuZGVkX25hbWUoKTsKLQkJCX0KLQkJCWJ1Zi5hcHBlbmQodmFsdWUgKyAiXG4iKTsKLQotCQkJbnVtKys7Ci0JCX0KLQkJcmVzdWx0ID0gYnVmLnRvU3RyaW5nKCk7Ci0JCWlmIChudW0gPT0gMSkKLQkJCXJlc3VsdCA9ICJFbXB0eSByZXN1bHRzXG4iOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIHJlbGVhc2UgdGhlIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JCVJlc3VsdFNlcXVlbmNlRmFjdG9yeS5yZWxlYXNlKHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1Jlc3VsdFNlcXVlbmNlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGRjODM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFJTRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBSZXN1bHQgc2VxdWVuY2UgZmFjdG9yeQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVzdWx0U2VxdWVuY2VGYWN0b3J5IHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkgX2ZhY3RvcnkgPSBuZXcgRGVmYXVsdFJTRmFjdG9yeSgpOwotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFJlc3VsdFNlcXVlbmNlIGZhY3RfY3JlYXRlX25ldygpOwotCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZmFjdF9yZWxlYXNlKFJlc3VsdFNlcXVlbmNlIHJzKTsKLQotCXByb3RlY3RlZCBSZXN1bHRTZXF1ZW5jZSBmYWN0X2NyZWF0ZV9uZXcoQW55VHlwZSBpdGVtKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gZmFjdF9jcmVhdGVfbmV3KCk7Ci0JCXJzLmFkZChpdGVtKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZhY3RfcHJpbnRfZGVidWcoKSB7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0aGUgY3JlYXRpb24gb2YgYSBuZXcgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjcmVhdGVfbmV3KCkgewotCQlyZXR1cm4gX2ZhY3RvcnkuZmFjdF9jcmVhdGVfbmV3KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlzIGFuIGl0ZW0gb2YgYW55IHR5cGUuCi0JICogQHJldHVybiBmYWN0b3J5IGNyZWF0aW5nIG5ldyBpdGVtCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjcmVhdGVfbmV3KEFueVR5cGUgaXRlbSkgewotCQlyZXR1cm4gX2ZhY3RvcnkuZmFjdF9jcmVhdGVfbmV3KGl0ZW0pOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBycwotCSAqICAgICAgICAgICAgaXMgdGhlIHJlc3VsdCBzZXF1ZW5jZSBmYWN0b3J5IHJlbGVhc2UgcnMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgcmVsZWFzZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQlfZmFjdG9yeS5mYWN0X3JlbGVhc2UocnMpOwotCX0KLQotCS8qKgotCSAqIGZhY3RvcnkgZGVidWcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRfZGVidWcoKSB7Ci0JCV9mYWN0b3J5LmZhY3RfcHJpbnRfZGVidWcoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0NoZWNrZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvU3RhdGljQ2hlY2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWI3ZWNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvU3RhdGljQ2hlY2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC4qOwotCi0vKioKLSAqIEludGVyZmFjZSB0byBzdGF0aWMgY2hlY2tlci4KLSAqLwotcHVibGljIGludGVyZmFjZSBTdGF0aWNDaGVja2VyIHsKLQotCS8qKgotCSAqIGNoZWNrcyBYUGF0aE5vZGUKLQkgKiAKLQkgKiBAdGhyb3dzIHN0YXRpYyBlcnJvci4KLQkgKiBAcGFyYW0gcm9vdAotCSAqICAgICAgICAgICAgaXMgYW4gWFBhdGggbm9kZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBjaGVjayhYUGF0aE5vZGUgcm9vdCkgdGhyb3dzIFN0YXRpY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI1YzdmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGFkZCBhYmlsaXR5IHRvIHNldCB0aGUgYmFzZSB1cmkgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBpbnRlcmZhY2UgdG8gc3RhdGljIGNvbnRleHQKLSAqLwotcHVibGljIGludGVyZmFjZSBTdGF0aWNDb250ZXh0IHsKLQotCS8qKgotCSAqIGlzIGl0IHhwYXRoIDEuMCBjb21wYXRpYmxlLgotCSAqIAotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIHhwYXRoMV9jb21wYXRpYmxlKCk7Ci0KLQkvKioKLQkgKiBuYW1lc3BhY2VzIGRvZXMgdGhlIHByZWZpeCBleGlzdAotCSAqIAotCSAqIEBwYXJhbSBwcmVmaXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwcmVmaXgKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwcmVmaXhfZXhpc3RzKFN0cmluZyBwcmVmaXgpOwotCi0JLyoqCi0JICogQHBhcmFtIHByZWZpeAotCSAqICAgICAgICAgICAgaXMgdGhlIHByZWZpeAotCSAqIEByZXR1cm4gc3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyByZXNvbHZlX3ByZWZpeChTdHJpbmcgcHJlZml4KTsKLQotCS8qKgotCSAqIHRoZSBkZWZhdWx0IG5hbWVzcGFjZQotCSAqIAotCSAqIEByZXR1cm4gc3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBkZWZhdWx0X25hbWVzcGFjZSgpOwotCi0JLyoqCi0JICogdGhlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlCi0JICogCi0JICogQHJldHVybiBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGRlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlKCk7Ci0KLQkvLyBpbiBzY29wZSBzY2hlbWEgZGVmaW5pdGlvbnMKLQkvKioKLQkgKiBAcGFyYW0gYXR0cgotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lIHZhcmlhYmxlCi0JICogQHJldHVybiBhdHRyaWJ1dGVzJ3MgdHlwZSBkZWZpbml0aW9uCi0JICovCi0JcHVibGljIFhTVHlwZURlZmluaXRpb24gYXR0cmlidXRlX3R5cGVfZGVmaW5pdGlvbihRTmFtZSBhdHRyKTsKLQotCS8qKgotCSAqIEBwYXJhbSBlbGVtCi0JICogICAgICAgICAgICBpcyB0aGUgZWxlbSBvZiB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGVsZW1lbnQncyB0eXBlIGRlZmluaXRpb24KLQkgKi8KLQlwdWJsaWMgWFNUeXBlRGVmaW5pdGlvbiBlbGVtZW50X3R5cGVfZGVmaW5pdGlvbihRTmFtZSBlbGVtKTsKLQotCS8qKgotCSAqIGlzIHRoZSBhdHRyaWJ1dGUgZGVjbGFyZWQ/Ci0JICogCi0JICogQHBhcmFtIGF0dHIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHVibGljIGJvb2xlYW4gYXR0cmlidXRlX2RlY2xhcmVkKFFOYW1lIGF0dHIpOwotCi0JLyoqCi0JICogaXMgdGhlIGVsZW1lbnQgZGVjbGFyZWQ/Ci0JICogCi0JICogQHBhcmFtIGVsZW0KLQkgKiAgICAgICAgICAgIGlzIHRoZSBlbGVtIG9mIHRoZSBxbmFtZQotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVsZW1lbnRfZGVjbGFyZWQoUU5hbWUgZWxlbSk7Ci0KLQkvLyBpbiBzY29wZSB2YXJpYWJsZXMKLQotCS8vIGNvbnRleHQgaXRlbSB0eXBlCi0KLQkvKioKLQkgKiBpcyB0aGUgZWxlbWVudCBkZWNsYXJlZD8KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lIG5hbWUKLQkgKiBAcGFyYW0gYXJpdHkKLQkgKiAgICAgICAgICAgIGludGVnZXIgb2YgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQkvLyBmdW5jdGlvbiBzaWduYXR1cmVzCi0JcHVibGljIGJvb2xlYW4gZnVuY3Rpb25fZXhpc3RzKFFOYW1lIG5hbWUsIGludCBhcml0eSk7Ci0KLQkvLyBjb2xsYXRpb25zCi0KLQkvKioKLQkgKiBiYXNlIHVyaQotCSAqIAotCSAqIEByZXR1cm4gdXJpCi0JICovCi0JLy8gYmFzZSB1cmkKLQlwdWJsaWMgWFNBbnlVUkkgYmFzZV91cmkoKTsKLQotCS8vIHN0YXRpY2FsbHkga25vd24gZG9jdW1lbnRzCi0KLQkvLyBjb2xsZWN0aW9ucwotCi0JLy8gb3RoZXIgc3R1ZmYKLQkvKioKLQkgKiBuZXcgc2NvcGUKLQkgKi8KLQlwdWJsaWMgdm9pZCBuZXdfc2NvcGUoKTsKLQotCS8qKgotCSAqIGRlc3Ryb3kgc2NvcGUKLQkgKi8KLQlwdWJsaWMgdm9pZCBkZXN0cm95X3Njb3BlKCk7Ci0KLQkvKioKLQkgKiBhZGQgdmFyaWFibGUKLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICovCi0JcHVibGljIHZvaWQgYWRkX3ZhcmlhYmxlKFFOYW1lIG5hbWUpOwotCi0JLyoqCi0JICogZGVsZXRlIHRoZSB2YXJpYWJsZQotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4gaWYgZGVsZXRlZCB2YXJpYWJsZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGRlbF92YXJpYWJsZShRTmFtZSBuYW1lKTsKLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4gaWYgdmFyaWFibGUgZXhpc3RzCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFyaWFibGVfZXhpc3RzKFFOYW1lIG5hbWUpOyAvLyBpbiBjdXJyZW50IHNjb3BlIG9ubHkKLQotCS8qKgotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2YXJpYWJsZSBvZiBxbmFtZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHZhcmlhYmxlX2luX3Njb3BlKFFOYW1lIHZhcik7Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0eXBlX2RlZmluZWQoUU5hbWUgbmFtZSk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIHRoZSBub2RlIHR5cGUKLQkgKiBAcGFyYW0gZXQKLQkgKiAgICAgICAgICAgIGlzIHRoZSBxbmFtZQotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGRlcml2ZXNfZnJvbShOb2RlVHlwZSBhdCwgUU5hbWUgZXQpOwotCi0JLyoqCi0JICogQHBhcmFtIGF0Ci0JICogICAgICAgICAgICB0aGUgbm9kZSB0eXBlCi0JICogQHBhcmFtIGV0Ci0JICogICAgICAgICAgICBpcyB0aGUgWFNUeXBlRGVmaW5pdGlvbiBvZiB0aGUgbm9kZQotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGRlcml2ZXNfZnJvbShOb2RlVHlwZSBhdCwgWFNUeXBlRGVmaW5pdGlvbiBldCk7Ci0KLQkvKioKLQkgKiBhZGQgbmFtZXNwYWNlCi0JICogCi0JICogQHBhcmFtIHByZWZpeAotCSAqICAgICAgICAgICAgdGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlCi0JICogQHBhcmFtIG5zCi0JICogICAgICAgICAgICBpcyB0aGUgWFNUeXBlRGVmaW5pdGlvbiBvZiB0aGUgbm9kZQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF9uYW1lc3BhY2UoU3RyaW5nIHByZWZpeCwgU3RyaW5nIG5zKTsKLQotCS8qKgotCSAqIGV4cGFuZCBmdW5jdGlvbgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4gaWYgZnVuY3Rpb24gY2FuIGJlIGV4cGFuZGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXhwYW5kX2Z1bmN0aW9uX3FuYW1lKFFOYW1lIG5hbWUpOwotCi0JLyoqCi0JICogZXhwYW5kIGVsZW1lbnQgdHlwZSBxbmFtZQotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4gaWYgZnVuY3Rpb24gY2FuIGJlIGV4cGFuZGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXhwYW5kX2VsZW1fdHlwZV9xbmFtZShRTmFtZSBuYW1lKTsKLQotCS8qKgotCSAqIGV4cGFuZCBxbmFtZQotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4gaWYgZnVuY3Rpb24gY2FuIGJlIGV4cGFuZGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXhwYW5kX3FuYW1lKFFOYW1lIG5hbWUpOwotCi0JLyoqCi0JICogYWRkIGZ1bmN0aW9uIHRvIGxpYnJhcnkKLQkgKiAKLQkgKiBAcGFyYW0gZmwKLQkgKiAgICAgICAgICAgIGlzIHRoZSBmdW5jdGlvbiBsaWJyYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgYWRkX2Z1bmN0aW9uX2xpYnJhcnkoRnVuY3Rpb25MaWJyYXJ5IGZsKTsKLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGFueSBhdG9taWMgdHlwZQotCSAqLwotCXB1YmxpYyBBbnlBdG9taWNUeXBlIG1ha2VfYXRvbWljKFFOYW1lIG5hbWUpOwotCQotCS8qKgotCSAqIFNldHMgdGhlIGJhc2UgdXJpIGZvciB0aGUgY29udGV4dC4KLQkgKiBAcGFyYW0gYmFzZXVyaQotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfYmFzZV91cmkoU3RyaW5nIGJhc2V1cmkpOwotCQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgTWFwPFN0cmluZywgTGlzdDxEb2N1bWVudD4+IGdldF9jb2xsZWN0aW9ucygpOwotCQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfY29sbGVjdGlvbnMoTWFwPFN0cmluZywgTGlzdDxEb2N1bWVudD4+IGNvbGxlY3Rpb25zKTsKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvU3RhdGljRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvU3RhdGljRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJlZGJhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0Vycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciBhbGwgc3RhdGljIGVycm9ycyBhcyBkZWZpbmVkIGJ5IHRoZSBYUGF0aCAyLjAgc3BlY2lmaWNhdGlvbgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNFcnJvciBleHRlbmRzIFhQYXRoRXhjZXB0aW9uIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA3ODcwODY2MTMwODM3ODcwOTcxTDsKLQkvLyBlcnJvcmNvZGUgc3BlY2lmaWVkIGluIGh0dHA6Ly93d3cudzMub3JnLzIwMDQvMTAveHF0LWVycm9ycyBpIGZpbmsKLQlwcml2YXRlIFN0cmluZyBfY29kZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBhIGdlbmVyaWMgc3RhdGljIGVycm9yCi0JICogCi0JICogQHBhcmFtIGNvZGUKLQkgKiAgICAgICAgICAgIFRoZSBlcnJvciBjb2RlIGFzIHNwZWNpZmllZCBpbiBYUGF0aCAyLjAKLQkgKiBAcGFyYW0gZXJyCi0JICogICAgICAgICAgICBIdW1hciByZWFkYWJsZSBlcnJvciBtZXNzYWdlCi0JICovCi0JcHVibGljIFN0YXRpY0Vycm9yKFN0cmluZyBjb2RlLCBTdHJpbmcgZXJyKSB7Ci0JCXN1cGVyKGVycik7Ci0JCV9jb2RlID0gY29kZTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGVycm9yIGNvZGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgZXJyb3IKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGNvZGUoKSB7Ci0JCXJldHVybiBfY29kZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY05hbWVSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNOYW1lUmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFjMjNkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY05hbWVSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0F0dHJOYW1lRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0VsZW1OYW1lRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0Z1bmN0TmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05zTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNUeXBlTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNWYXJOYW1lRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZXNvbHZlcyBzdGF0aWMgbmFtZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNOYW1lUmVzb2x2ZXIgaW1wbGVtZW50cyBYUGF0aFZpc2l0b3IsIFN0YXRpY0NoZWNrZXIgewotCXN0YXRpYyBjbGFzcyBEdW1teUVycm9yIGV4dGVuZHMgRXJyb3IgewotCi0JCS8qKgotCQkgKiAKLQkJICovCi0JCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDM4OTg1NjQ0MDI5ODE3NDE5NTBMOwotCX0KLQotCXByaXZhdGUgU3RhdGljQ29udGV4dCBfc2M7Ci0JcHJpdmF0ZSBTdGF0aWNOYW1lRXJyb3IgX2VycjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBzdGF0aWMgbmFtZSByZXNvbHZlcgotCSAqIAotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgaXMgdGhlIHN0YXRpYyBjb250ZXh0LgotCSAqLwotCXB1YmxpYyBTdGF0aWNOYW1lUmVzb2x2ZXIoU3RhdGljQ29udGV4dCBzYykgewotCQlfc2MgPSBzYzsKLQkJX2VyciA9IG51bGw7Ci0JfQotCi0JLy8gdGhlIHByb2JsZW0gaXMgdGhhdCB2aXNpc3RvciBpbnRlcmZhY2UgZG9lcyBub3QgdGhyb3cgZXhjZXB0aW9ucy4uLgotCS8vIHNvIHdlIGdldCBhcm91bmQgaXQgO0QKLQlwcml2YXRlIHZvaWQgcmVwb3J0X2Vycm9yKFN0YXRpY05hbWVFcnJvciBlcnIpIHsKLQkJX2VyciA9IGVycjsKLQkJdGhyb3cgbmV3IER1bW15RXJyb3IoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVwb3J0X2JhZF9wcmVmaXgoU3RyaW5nIHByZWZpeCkgewotCQlyZXBvcnRfZXJyb3IoU3RhdGljTnNOYW1lRXJyb3IudW5rbm93bl9wcmVmaXgocHJlZml4KSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgdGhlIFhQYXRoIG5vZGUuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBYUGF0aCBub2RlIHRvIGNoZWNrLgotCSAqIEB0aHJvd3MgU3RhdGljRXJyb3IKLQkgKiAgICAgICAgICAgICBzdGF0aWMgZXJyb3IuCi0JICovCi0JcHVibGljIHZvaWQgY2hlY2soWFBhdGhOb2RlIG5vZGUpIHRocm93cyBTdGF0aWNFcnJvciB7Ci0JCXRyeSB7Ci0JCQlub2RlLmFjY2VwdCh0aGlzKTsKLQkJfSBjYXRjaCAoRHVtbXlFcnJvciBlKSB7Ci0JCQl0aHJvdyBfZXJyOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gWFBhdGggYnkgdmlzaXRpbmcgYWxsIHRoZSBub2Rlcy4KLQkgKiAKLQkgKiBAcGFyYW0geHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBYUGF0aC4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aCB4cCkgewotCQlmb3IgKEl0ZXJhdG9yIGkgPSB4cC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUV4cHIgZSA9IChFeHByKSBpLm5leHQoKTsKLQotCQkJZS5hY2NlcHQodGhpcyk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvLyBkb2VzIGEgZm9yIGFuZCBhIHF1YW50aWZpZWQgZXhwcmVzc2lvbgotCS8vIHRha2VzIHRoZSBpdGVyYXRvciBmb3IgdmFyIGV4cHIgcGFyaXMKLQlwcml2YXRlIHZvaWQgZG9Gb3JFeHByKEl0ZXJhdG9yIGl0ZXIsIEV4cHIgZXhwcikgewotCQlpbnQgc2NvcGVzID0gMDsKLQotCQkvLyBhZGQgdmFyaWFibGVzIHRvIHNjb3BlIGFuZCBjaGVjayB0aGUgYmluZGluZyBzZXF1ZW5jZQotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCVZhckV4cHJQYWlyIHBhaXIgPSAoVmFyRXhwclBhaXIpIGl0ZXIubmV4dCgpOwotCi0JCQlRTmFtZSB2YXIgPSBwYWlyLnZhcm5hbWUoKTsKLQkJCWlmICghX3NjLmV4cGFuZF9xbmFtZSh2YXIpKQotCQkJCXJlcG9ydF9iYWRfcHJlZml4KHZhci5wcmVmaXgoKSk7Ci0KLQkJCUV4cHIgZSA9IHBhaXIuZXhwcigpOwotCi0JCQllLmFjY2VwdCh0aGlzKTsKLQotCQkJX3NjLm5ld19zY29wZSgpOwotCQkJc2NvcGVzKys7Ci0JCQlfc2MuYWRkX3ZhcmlhYmxlKHZhcik7Ci0JCX0KLQotCQlfc2MubmV3X3Njb3BlKCk7Ci0JCXNjb3BlcysrOwotCQlleHByLmFjY2VwdCh0aGlzKTsKLQotCQkvLyBraWxsIHRoZSBzY29wZXMKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzY29wZXM7IGkrKykKLQkJCV9zYy5kZXN0cm95X3Njb3BlKCk7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBmb3IgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZm9yIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRm9yRXhwciBmZXgpIHsKLQotCQlkb0ZvckV4cHIoZmV4Lml0ZXJhdG9yKCksIGZleC5leHByKCkpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgcXVhbnRpZmllZCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBxZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBxdWFudGlmaWVkIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUXVhbnRpZmllZEV4cHIgcWV4KSB7Ci0JCS8vIGxldHMgY2hlYXQKLQkJZG9Gb3JFeHByKHFleC5pdGVyYXRvcigpLCBxZXguZXhwcigpKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFeHBycyhJdGVyYXRvciBpKSB7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJRXhwciBlID0gKEV4cHIpIGkubmV4dCgpOwotCi0JCQllLmFjY2VwdCh0aGlzKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGlmIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGlmZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpZiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KElmRXhwciBpZmV4KSB7Ci0KLQkJcHJpbnRFeHBycyhpZmV4Lml0ZXJhdG9yKCkpOwotCi0JCWlmZXgudGhlbl9jbGF1c2UoKS5hY2NlcHQodGhpcyk7Ci0KLQkJaWZleC5lbHNlX2NsYXVzZSgpLmFjY2VwdCh0aGlzKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGJpbmFyeSBleHByZXNzaW9uIGJ5IGNoZWNraW5nIGl0cyBsZWZ0IGFuZCByaWdodCBjaGlsZHJlbi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBleHByZXNzaW9uLgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbiBpdHNlbGYuCi0JICovCi0JcHVibGljIHZvaWQgcHJpbnRCaW5FeHByKFN0cmluZyBuYW1lLCBCaW5FeHByIGUpIHsKLQkJZS5sZWZ0KCkuYWNjZXB0KHRoaXMpOwotCQllLnJpZ2h0KCkuYWNjZXB0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIE9SIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIG9yZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE9yRXhwciBvcmV4KSB7Ci0JCXByaW50QmluRXhwcigiT1IiLCBvcmV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gQU5EIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGFuZGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBbmRFeHByIGFuZGV4KSB7Ci0JCXByaW50QmluRXhwcigiQU5EIiwgYW5kZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gY21wZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENtcEV4cHIgY21wZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJDTVAiICsgY21wZXgudHlwZSgpLCBjbXBleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgcmFuZ2UgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChSYW5nZUV4cHIgcmV4KSB7Ci0JCXByaW50QmluRXhwcigiUkFOR0UiLCByZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBhZGRpdG9uIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGFkZGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBZGRFeHByIGFkZGV4KSB7Ci0JCXByaW50QmluRXhwcigiQUREIiwgYWRkZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHN1YnRyYWN0aW9uIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIHN1YmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTdWJFeHByIHN1YmV4KSB7Ci0JCXByaW50QmluRXhwcigiU1VCIiwgc3ViZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIG11bHRpcGxpY2F0aW9uIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNdWxFeHByIG11bGV4KSB7Ci0JCXByaW50QmluRXhwcigiTVVMIiwgbXVsZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGRpdmlzaW9uIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEaXZFeHByIG11bGV4KSB7Ci0JCXByaW50QmluRXhwcigiRElWIiwgbXVsZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBpbnRlZ2VyIGRpdmlzb24gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KElEaXZFeHByIG11bGV4KSB7Ci0JCXByaW50QmluRXhwcigiSURJViIsIG11bGV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBtb2QgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE1vZEV4cHIgbXVsZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJNT0QiLCBtdWxleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgdW5pb24gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gdW5leAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVW5pb25FeHByIHVuZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJVTklPTiIsIHVuZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHBpcGVkIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIHBpcGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQaXBlRXhwciBwaXBleCkgewotCQlwcmludEJpbkV4cHIoIlBJUEUiLCBwaXBleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGludGVyc2VjdGlvbiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBpZXhwcgotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW50ZXJzZWN0RXhwciBpZXhwcikgewotCQlwcmludEJpbkV4cHIoIklOVEVSU0VDVCIsIGlleHByKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gZXhjZXB0IGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGVleHByCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChFeGNlcHRFeHByIGVleHByKSB7Ci0JCXByaW50QmluRXhwcigiSU5UX0VYQ0VQVCIsIGVleHByKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gJ2luc3RhbmNlIG9mJyBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBpb2V4cAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW5zdE9mRXhwciBpb2V4cCkgewotCQlwcmludEJpbkV4cHIoIklOU1RBTkNFT0YiLCBpb2V4cCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgJ3RyZWF0IGFzJyBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSB0YWV4cAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVHJlYXRBc0V4cHIgdGFleHApIHsKLQkJcHJpbnRCaW5FeHByKCJUUkVBVEFTIiwgdGFleHApOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGNhc3RhYmxlIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGNleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENhc3RhYmxlRXhwciBjZXhwKSB7Ci0JCXByaW50QmluRXhwcigiQ0FTVEFCTEUiLCBjZXhwKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBjYXN0IGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGNleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENhc3RFeHByIGNleHApIHsKLQkJcHJpbnRCaW5FeHByKCJDQVNUIiwgY2V4cCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgdW5hcnkgZXhwcmVzc2lvbiBieSBjaGVja2luZyBpdHMgb25lIGNoaWxkLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24gaXRzZWxmLgotCSAqLwotCXB1YmxpYyB2b2lkIHByaW50VW5FeHByKFN0cmluZyBuYW1lLCBVbkV4cHIgZSkgewotCQllLmFyZygpLmFjY2VwdCh0aGlzKTsKLQotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgbWludXMgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTWludXNFeHByIGUpIHsKLQkJcHJpbnRVbkV4cHIoIk1JTlVTIiwgZSk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgcGx1cyBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQbHVzRXhwciBlKSB7Ci0JCXByaW50VW5FeHByKCJQTFVTIiwgZSk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIHhwYXRoIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFhQYXRoRXhwciBlKSB7Ci0JCVhQYXRoRXhwciB4cCA9IGU7Ci0KLQkJd2hpbGUgKHhwICE9IG51bGwpIHsKLQkJCVN0ZXBFeHByIHNlID0geHAuZXhwcigpOwotCi0JCQlpZiAoc2UgIT0gbnVsbCkKLQkJCQlzZS5hY2NlcHQodGhpcyk7Ci0KLQkJCXhwID0geHAubmV4dCgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgZm9yd2FyZCBzdGVwLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGb3J3YXJkU3RlcCBlKSB7Ci0JCWUubm9kZV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgcmV2ZXJzZSBzdGVwLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChSZXZlcnNlU3RlcCBlKSB7Ci0KLQkJTm9kZVRlc3QgbnQgPSBlLm5vZGVfdGVzdCgpOwotCQlpZiAobnQgIT0gbnVsbCkKLQkJCW50LmFjY2VwdCh0aGlzKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIG5hbWUgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTmFtZVRlc3QgZSkgewotCQlRTmFtZSBuYW1lID0gZS5uYW1lKCk7Ci0KLQkJaWYgKCFfc2MuZXhwYW5kX3FuYW1lKG5hbWUpKQotCQkJcmVwb3J0X2JhZF9wcmVmaXgobmFtZS5wcmVmaXgoKSk7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSB2YXJpYWJsZSByZWZlcmVuY2UuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFZhclJlZiBlKSB7Ci0JCVFOYW1lIHZhciA9IGUubmFtZSgpOwotCQlpZiAoIV9zYy5leHBhbmRfcW5hbWUodmFyKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KHZhci5wcmVmaXgoKSk7Ci0KLQkJaWYgKCFfc2MudmFyaWFibGVfaW5fc2NvcGUodmFyKSkKLQkJCXJlcG9ydF9lcnJvcihuZXcgU3RhdGljVmFyTmFtZUVycm9yKCJWYXJpYWJsZSBub3QgaW4gc2NvcGU6ICIKLQkJCQkJKyB2YXIuc3RyaW5nKCkpKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBzdHJpbmcgbGl0ZXJhbC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3RyaW5nTGl0ZXJhbCBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGludGVnZXIgbGl0ZXJhbC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW50ZWdlckxpdGVyYWwgZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGRvdWJsZSBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEb3VibGVMaXRlcmFsIGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBkZWNpbWFsIGxpdGVyYWwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERlY2ltYWxMaXRlcmFsIGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBhckV4cHIgZSkgewotCQlwcmludEV4cHJzKGUuaXRlcmF0b3IoKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgY29udGV4dCBpdGVtIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENudHhJdGVtRXhwciBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgZnVuY3Rpb24gY2FsbC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRnVuY3Rpb25DYWxsIGUpIHsKLQkJUU5hbWUgbmFtZSA9IGUubmFtZSgpOwotCi0JCWlmICghX3NjLmV4cGFuZF9mdW5jdGlvbl9xbmFtZShuYW1lKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KG5hbWUucHJlZml4KCkpOwotCi0JCWlmICghX3NjLmZ1bmN0aW9uX2V4aXN0cyhuYW1lLCBlLmFyaXR5KCkpKQotCQkJcmVwb3J0X2Vycm9yKG5ldyBTdGF0aWNGdW5jdE5hbWVFcnJvcigiRnVuY3Rpb24gZG9lcyBub3QgZXhpc3Q6ICIKLQkJCQkJKyBuYW1lLnN0cmluZygpICsgIiBhcml0eTogIiArIGUuYXJpdHkoKSkpOwotCi0JCXByaW50RXhwcnMoZS5pdGVyYXRvcigpKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBzaW5nbGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2luZ2xlVHlwZSBlKSB7Ci0JCVFOYW1lIHR5cGUgPSBlLnR5cGUoKTsKLQkJaWYgKCFfc2MuZXhwYW5kX2VsZW1fdHlwZV9xbmFtZSh0eXBlKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KHR5cGUucHJlZml4KCkpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgc2VxdWVuY2UgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2VxdWVuY2VUeXBlIGUpIHsKLQkJSXRlbVR5cGUgaXQgPSBlLml0ZW1fdHlwZSgpOwotCi0JCWlmIChpdCAhPSBudWxsKQotCQkJaXQuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGl0ZW0gdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSXRlbVR5cGUgZSkgewotCi0JCXN3aXRjaCAoZS50eXBlKCkpIHsKLQkJY2FzZSBJdGVtVHlwZS5JVEVNOgotCQkJYnJlYWs7Ci0JCWNhc2UgSXRlbVR5cGUuUU5BTUU6Ci0JCQlRTmFtZSB0eXBlID0gZS5xbmFtZSgpOwotCQkJaWYgKCFfc2MuZXhwYW5kX2VsZW1fdHlwZV9xbmFtZSh0eXBlKSkKLQkJCQlyZXBvcnRfYmFkX3ByZWZpeCh0eXBlLnByZWZpeCgpKTsKLQotCQkJaWYgKCFfc2MudHlwZV9kZWZpbmVkKGUucW5hbWUoKSkpCi0JCQkJcmVwb3J0X2Vycm9yKG5ldyBTdGF0aWNUeXBlTmFtZUVycm9yKCJUeXBlIG5vdCBkZWZpbmVkOiAiCi0JCQkJCQkrIGUucW5hbWUoKS5zdHJpbmcoKSkpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJdGVtVHlwZS5LSU5EVEVTVDoKLQkJCWUua2luZF90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBhbnkga2luZCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBbnlLaW5kVGVzdCBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgZG9jdW1lbnQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRG9jdW1lbnRUZXN0IGUpIHsKLQotCQlzd2l0Y2ggKGUudHlwZSgpKSB7Ci0JCWNhc2UgRG9jdW1lbnRUZXN0LkVMRU1FTlQ6Ci0JCQllLmVsZW1fdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRG9jdW1lbnRUZXN0LlNDSEVNQV9FTEVNRU5UOgotCQkJZS5zY2hlbWFfZWxlbV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSB0ZXh0IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFRleHRUZXN0IGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBjb21tZW50IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENvbW1lbnRUZXN0IGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBwcm9jZXNzaW5nIGluc3RydWN0aW5nIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBJVGVzdCBlKSB7Ci0JCVN0cmluZyBhcmcgPSBlLmFyZygpOwotCQlpZiAoYXJnID09IG51bGwpCi0JCQlhcmcgPSAiIjsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBhdHRyaWJ1dGUgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCS8vIFhYWCBOTyBDSEVDSyA/Ci0JcHVibGljIE9iamVjdCB2aXNpdChBdHRyaWJ1dGVUZXN0IGUpIHsKLQkJUU5hbWUgbmFtZSA9IGUubmFtZSgpOwotCi0JCWlmIChuYW1lID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpZiAoIV9zYy5leHBhbmRfcW5hbWUobmFtZSkpCi0JCQlyZXBvcnRfYmFkX3ByZWZpeChuYW1lLnByZWZpeCgpKTsKLQotCQluYW1lID0gZS50eXBlKCk7Ci0JCWlmIChuYW1lID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpZiAoIV9zYy5leHBhbmRfZWxlbV90eXBlX3FuYW1lKG5hbWUpKQotCQkJcmVwb3J0X2JhZF9wcmVmaXgobmFtZS5wcmVmaXgoKSk7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBzY2hlbWEgYXR0cmlidXRlIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNjaGVtYUF0dHJUZXN0IGUpIHsKLQkJUU5hbWUgbmFtZSA9IGUuYXJnKCk7Ci0KLQkJaWYgKCFfc2MuZXhwYW5kX3FuYW1lKG5hbWUpKQotCQkJcmVwb3J0X2JhZF9wcmVmaXgobmFtZS5wcmVmaXgoKSk7Ci0KLQkJaWYgKCFfc2MuYXR0cmlidXRlX2RlY2xhcmVkKG5hbWUpKQotCQkJcmVwb3J0X2Vycm9yKG5ldyBTdGF0aWNBdHRyTmFtZUVycm9yKCJBdHRyaWJ1dGUgbm90IGRlY2xlYXJlZDogIgotCQkJCQkrIG5hbWUuc3RyaW5nKCkpKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBlbGVtZW50IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQkvLyBYWFggTk8gU0VNQU5USUMgQ0hFQ0s/IQotCXB1YmxpYyBPYmplY3QgdmlzaXQoRWxlbWVudFRlc3QgZSkgewotCQlRTmFtZSBuYW1lID0gZS5uYW1lKCk7Ci0KLQkJaWYgKG5hbWUgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCWlmICghX3NjLmV4cGFuZF9lbGVtX3R5cGVfcW5hbWUobmFtZSkpCi0JCQlyZXBvcnRfYmFkX3ByZWZpeChuYW1lLnByZWZpeCgpKTsKLQotCQluYW1lID0gZS50eXBlKCk7Ci0JCWlmIChuYW1lID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpZiAoIV9zYy5leHBhbmRfZWxlbV90eXBlX3FuYW1lKG5hbWUpKQotCQkJcmVwb3J0X2JhZF9wcmVmaXgobmFtZS5wcmVmaXgoKSk7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBzY2hlbWEgZWxlbWVudCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTY2hlbWFFbGVtVGVzdCBlKSB7Ci0JCVFOYW1lIGVsZW0gPSBlLm5hbWUoKTsKLQotCQlpZiAoIV9zYy5leHBhbmRfZWxlbV90eXBlX3FuYW1lKGVsZW0pKQotCQkJcmVwb3J0X2JhZF9wcmVmaXgoZWxlbS5wcmVmaXgoKSk7Ci0KLQkJaWYgKCFfc2MuZWxlbWVudF9kZWNsYXJlZChlbGVtKSkKLQkJCXJlcG9ydF9lcnJvcihuZXcgU3RhdGljRWxlbU5hbWVFcnJvcigiRWxlbWVudCBub3QgZGVjbGFyZWQ6ICIKLQkJCQkJKyBlbGVtLnN0cmluZygpKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludENvbGxFeHBycyhJdGVyYXRvciBpKSB7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJQ29sbGVjdGlvbiBleHBycyA9IChDb2xsZWN0aW9uKSBpLm5leHQoKTsKLQotCQkJcHJpbnRFeHBycyhleHBycy5pdGVyYXRvcigpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGF4aXMgc3RlcC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQXhpc1N0ZXAgZSkgewotCi0JCWUuc3RlcCgpLmFjY2VwdCh0aGlzKTsKLQotCQlwcmludENvbGxFeHBycyhlLml0ZXJhdG9yKCkpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGZpbHRlciBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGaWx0ZXJFeHByIGUpIHsKLQkJZS5wcmltYXJ5KCkuYWNjZXB0KHRoaXMpOwotCi0JCXByaW50Q29sbEV4cHJzKGUuaXRlcmF0b3IoKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2M2U5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hQYXRoRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLS8qKgotICogVGhpcyBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggYW4gWFBhdGggZXhjZXB0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDEzODAzOTQxNzAxNjM5ODM4NjNMOwotCXByaXZhdGUgU3RyaW5nIF9yZWFzb247Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgWFBhdGhFeGNlcHRpb24KLQkgKiAKLQkgKiBAcGFyYW0gcmVhc29uCi0JICogICAgICAgICAgICBJcyB0aGUgcmVhc29uIHdoeSB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93bi4KLQkgKi8KLQlwdWJsaWMgWFBhdGhFeGNlcHRpb24oU3RyaW5nIHJlYXNvbikgewotCQlfcmVhc29uID0gcmVhc29uOwotCX0KLQotCS8qKgotCSAqIFRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvdy4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHJlYXNvbigpIHsKLQkJcmV0dXJuIF9yZWFzb247Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YUGF0aFBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YUGF0aFBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmZhMjJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGg7Ci0KLS8qKgotICogVGhpcyBpcyBhbiBpbnRlcmZhY2UgY2xhc3MgZm9yIHRoZSBYUGF0aCBwYXJzZXIuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgWFBhdGhQYXJzZXIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHRoZSBYUGF0aCBwYXJzZXIgaW50ZXJmYWNlLgotCSAqIAotCSAqIEBwYXJhbSB4cGF0aAotCSAqICAgICAgICAgICAgaXMgdGhlIGlucHV0IFhQYXRoIHRvIGJlIHBhcnNlZC4KLQkgKiBAdGhyb3dzIFhQYXRoUGFyc2VyRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgWFBhdGggcGFyc2VyIGV4Y2VwdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBwYXJzZWQgWFBhdGguCi0JICovCi0JcHVibGljIFhQYXRoIHBhcnNlKFN0cmluZyB4cGF0aCkgdGhyb3dzIFhQYXRoUGFyc2VyRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YUGF0aFBhcnNlckV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YUGF0aFBhcnNlckV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjQzNWZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhQYXJzZXJFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjczNzYzIC0gY29ycmVjdCBlcnJvciBjb2RlcyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotCi0vKioKLSAqIFRoaXMgZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgWFBhdGggcGFyc2VyLgotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhQYXJzZXJFeGNlcHRpb24gZXh0ZW5kcyBTdGF0aWNFcnJvciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNDk3NDgwNTIzMDQ4OTc2MjQxOUw7Ci0JLyoqCi0JICogVGhlIHR5cGUgb2YgZXhjZXB0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVkFMSURfWFBBVEhfRVhQUkVTU0lPTiA9ICJYUFNUMDAwMyI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgWFBhdGhQYXJzZXJFeGNlcHRpb24uCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24uCi0JICovCi0JcHVibGljIFhQYXRoUGFyc2VyRXhjZXB0aW9uKFN0cmluZyByZWFzb24pIHsKLQkJc3VwZXIoSU5WQUxJRF9YUEFUSF9FWFBSRVNTSU9OLCByZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWGVyY2VzTG9hZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hlcmNlc0xvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTQ0NDk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWGVyY2VzTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NjEzNCAtIGltcHJvdmVtZW50cyB0byBzY2hlbWEgYXdhcmUgcHJpbWl0aXZlIHR5cGUgc3VwcG9ydAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXR0cmlidXRlL2VsZW1lbnQgbm9kZXMgIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBGaXhlZCBuYW1lc3BhY2UgYXdhcmVuZXNzCi0gKiAgICAgRGF2aWQgQ2FydmVyICAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYuICBDb3JyZWN0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nIG9mIGdyYW1tYXJzIGlmIG5vbi12YWxpZGF0aW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS5pby4qOwotCi1pbXBvcnQgb3JnLnczYy5kb20uKjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy4qOwotaW1wb3J0IGphdmF4LnhtbC52YWxpZGF0aW9uLlNjaGVtYTsKLQotaW1wb3J0IG9yZy54bWwuc2F4Lio7Ci0KLS8qKgotICogWGVyY2VzIGxvYWRlciBjbGFzcy4gVGhlIGxvYWRpbmcgaXMgYWx3YXlzIG5hbWVzcGFjZSBhd2FyZS4KLSAqLwotcHVibGljIGNsYXNzIFhlcmNlc0xvYWRlciBpbXBsZW1lbnRzIERPTUxvYWRlciB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9OVkFMSURBVElOR19MT0FEX0RURF9HUkFNTUFSID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9ub252YWxpZGF0aW5nL2xvYWQtZHRkLWdyYW1tYXIiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFU19GRUFUVVJFID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEQVRJT05fRkVBVFVSRSA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdmFsaWRhdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUFfRlVMTF9DSEVDS0lOR19GRUFUVVJFID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYS1mdWxsLWNoZWNraW5nIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERZTkFNSUNfVkFMSURBVElPTl9GRUFUVVJFID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL2R5bmFtaWMiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9BRF9FWFRFUk5BTF9EVERfRkVBVFVSRSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvbm9udmFsaWRhdGluZy9sb2FkLWV4dGVybmFsLWR0ZCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBKQVhQX1NDSEVNQV9MQU5HVUFHRSA9ICJodHRwOi8vamF2YS5zdW4uY29tL3htbC9qYXhwL3Byb3BlcnRpZXMvc2NoZW1hTGFuZ3VhZ2UiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFczQ19YTUxfU0NIRU1BID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ1VNRU5UX0lNUExFTUVOVEFUSU9OX1BST1BFUlRZID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9wcm9wZXJ0aWVzL2RvbS9kb2N1bWVudC1jbGFzcy1uYW1lIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBET0NVTUVOVF9QU1ZJX0lNUExFTUVOVEFUSU9OID0gIm9yZy5hcGFjaGUueGVyY2VzLmRvbS5QU1ZJRG9jdW1lbnRJbXBsIjsKLQotCWJvb2xlYW4gX3ZhbGlkYXRpbmc7Ci0JCi0JU2NoZW1hIF9zY2hlbWEgPSBudWxsOzsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBYZXJjZXMgbG9hZGVyLgotCSAqLwotCXB1YmxpYyBYZXJjZXNMb2FkZXIoKSB7Ci0JCV92YWxpZGF0aW5nID0gZmFsc2U7Ci0JfQotCQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgWGVyY2VzTG9hZGVyKFNjaGVtYSBzY2hlbWEpIHsKLQkJX3ZhbGlkYXRpbmcgPSBmYWxzZTsKLQkJX3NjaGVtYSA9IHNjaGVtYTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgWGVyY2VzIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VtZW50Ci0JICogCi0JICogQHBhcmFtIGluCi0JICogICAgICAgICAgICBpcyB0aGUgaW5wdXQgc3RyZWFtLgotCSAqIEB0aHJvd3MgRE9NTG9hZGVyRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgRE9NIGxvYWRlciBleGNlcHRpb24uCi0JICogQHJldHVybiBUaGUgbG9hZGVkIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBEb2N1bWVudCBsb2FkKElucHV0U3RyZWFtIGluKSB0aHJvd3MgRE9NTG9hZGVyRXhjZXB0aW9uIHsKLQotCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLQkJZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoU0NIRU1BX1ZBTElEQVRJT05fRkVBVFVSRSwKLQkJCQlCb29sZWFuLnZhbHVlT2YoX3ZhbGlkYXRpbmcpKTsKLQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoTE9BRF9FWFRFUk5BTF9EVERfRkVBVFVSRSwgdHJ1ZSk7Ci0JCWZhY3Rvcnkuc2V0QXR0cmlidXRlKE5PTlZBTElEQVRJTkdfTE9BRF9EVERfR1JBTU1BUiwgdHJ1ZSk7Ci0JCWZhY3Rvcnkuc2V0QXR0cmlidXRlKERPQ1VNRU5UX0lNUExFTUVOVEFUSU9OX1BST1BFUlRZLAotCQkJCURPQ1VNRU5UX1BTVklfSU1QTEVNRU5UQVRJT04pOwotCQkKLQkJaWYgKF9zY2hlbWEgIT0gbnVsbCkgewotCQkgIGZhY3Rvcnkuc2V0U2NoZW1hKF9zY2hlbWEpOwotCQl9Ci0JCWVsc2UgewotCQkgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhfdmFsaWRhdGluZyk7CQotCQl9Ci0KLQkJdHJ5IHsKLQkJCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQotCQkJaWYgKF92YWxpZGF0aW5nKSB7Ci0JCQkJYnVpbGRlci5zZXRFcnJvckhhbmRsZXIobmV3IEVycm9ySGFuZGxlcigpIHsKLQkJCQkJcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKQotCQkJCQkJCXRocm93cyBTQVhFeGNlcHRpb24gewotCQkJCQkJdGhyb3cgZTsKLQkJCQkJfQotCi0JCQkJCXB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0JCQkJCQkJdGhyb3dzIFNBWFBhcnNlRXhjZXB0aW9uIHsKLQkJCQkJCXRocm93IGU7Ci0JCQkJCX0KLQotCQkJCQlwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0JCQkJCQkJdGhyb3dzIFNBWFBhcnNlRXhjZXB0aW9uIHsKLQkJCQkJCXRocm93IGU7IC8vIFhYWAotCQkJCQl9Ci0JCQkJfSk7Ci0JCQl9Ci0JCQlyZXR1cm4gYnVpbGRlci5wYXJzZShpbik7Ci0JCX0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKSB7Ci0JCQkvL3Rocm93IG5ldyBET01Mb2FkZXJFeGNlcHRpb24oIlNBWCBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBET01Mb2FkZXJFeGNlcHRpb24oIlBhcnNlciBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbjogIgotCQkJCQkrIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IERPTUxvYWRlckV4Y2VwdGlvbigiSU8gZXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQotCX0KLQotCS8qKgotCSAqIFNldCB2YWxpZGF0aW5nIGJvb2xlYW4uCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2YWx1ZSB0byBzZXQgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbiB0by4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfdmFsaWRhdGluZyhib29sZWFuIHgpIHsKLQkJX3ZhbGlkYXRpbmcgPSB4OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvYXN0L1hQYXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2FzdC9YUGF0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY3YjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvYXN0L1hQYXRoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvcjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBYUGF0aC4KLSAqLwotcHVibGljIGNsYXNzIFhQYXRoIGV4dGVuZHMgWFBhdGhOb2RlIHsKLQlwcml2YXRlIENvbGxlY3Rpb24gX2V4cHJzOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFhQYXRoLgotCSAqIAotCSAqIEBwYXJhbSBleHBycwotCSAqICAgICAgICAgICAgWFBhdGggZXhwcmVzc2lvbnMuCi0JICovCi0JcHVibGljIFhQYXRoKENvbGxlY3Rpb24gZXhwcnMpIHsKLQkJX2V4cHJzID0gZXhwcnM7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfZXhwcnMuaXRlcmF0b3IoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2Z1bmN0aW9uL0ZuRnVuY3Rpb25MaWJyYXJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2Z1bmN0aW9uL0ZuRnVuY3Rpb25MaWJyYXJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzEwYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9mdW5jdGlvbi9GbkZ1bmN0aW9uTGlicmFyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gQWRkZWQgRm5EZWZhdWx0Q29sbGF0aW9uLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjg1MzIxIC0gaW1wbGVtZW50ZWQgZm46ZW5jb2RlLWZvci11cmkoKQotICogICAgIEplc3BlciBNb2xsZXIgICAgICAgLSBidWcgMjg3MzY5IC0gU3VwcG9ydCBmbjpjb2RlcG9pbnQtZXF1YWwoKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci0KLS8vIHRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgbGliYyA9RAotLyoqCi0gKiBNYWludGFpbnMgYSBsaWJyYXJ5IG9mIGNvcmUgZnVuY3Rpb25zIGFuZCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLgotICovCi1wdWJsaWMgY2xhc3MgRm5GdW5jdGlvbkxpYnJhcnkgZXh0ZW5kcyBGdW5jdGlvbkxpYnJhcnkgewotCS8qKgotCSAqIFBhdGggdG8geHBhdGggZnVuY3Rpb25zIHNwZWNpZmljYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEhfRlVOQ1RJT05TX05TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zIjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkZ1bmN0aW9uTGlicmFyeS4KLQkgKi8KLQlwdWJsaWMgRm5GdW5jdGlvbkxpYnJhcnkoKSB7Ci0JCXN1cGVyKFhQQVRIX0ZVTkNUSU9OU19OUyk7Ci0KLQkJLy8gYWRkIGZ1bmN0aW9ucyBoZXJlCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5Cb29sZWFuKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUm9vdCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5vdCgpKTsKLQotCQkvLyBhY2Nlc3NvcnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5vZGVOYW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTmlsbGVkKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGF0YSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN0cmluZygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkJhc2VVcmkoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TdGF0aWNCYXNlVXJpKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRG9jdW1lbnRVcmkoKSk7Ci0KLQkJLy8gZXJyb3IKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkVycm9yKCkpOwotCi0JCS8vIHRyYWNlCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5UcmFjZSgpKTsKLQotCQkvLyBudW1lcmljIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQWJzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ2VpbGluZygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkZsb29yKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUm91bmQoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Sb3VuZEhhbGZUb0V2ZW4oKSk7Ci0KLQkJLy8gc3RyaW5nIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ29kZXBvaW50c1RvU3RyaW5nKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3RyaW5nVG9Db2RlcG9pbnRzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ29tcGFyZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvZGVwb2ludEVxdWFsKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ29uY2F0KCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3RyaW5nSm9pbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN1YnN0cmluZygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN0cmluZ0xlbmd0aCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5vcm1hbGl6ZVNwYWNlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTm9ybWFsaXplVW5pY29kZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblVwcGVyQ2FzZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkxvd2VyQ2FzZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblRyYW5zbGF0ZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkVzY2FwZUhUTUxVcmkoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5JcmlUb1VSSSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvbnRhaW5zKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3RhcnRzV2l0aCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkVuZHNXaXRoKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3Vic3RyaW5nQmVmb3JlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3Vic3RyaW5nQWZ0ZXIoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5NYXRjaGVzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmVwbGFjZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblRva2VuaXplKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRW5jb2RlRm9yVVJJKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmVzb2x2ZVVSSSgpKTsKLQotCQkvLyBib29sZWFuIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuVHJ1ZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkZhbHNlKCkpOwotCi0JCS8vIGRhdGUgZXh0cmFjdGlvbiBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblllYXJzRnJvbUR1cmF0aW9uKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTW9udGhzRnJvbUR1cmF0aW9uKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGF5c0Zyb21EdXJhdGlvbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkhvdXJzRnJvbUR1cmF0aW9uKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTWludXRlc0Zyb21EdXJhdGlvbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblNlY29uZHNGcm9tRHVyYXRpb24oKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5ZZWFyRnJvbURhdGVUaW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTW9udGhGcm9tRGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5EYXlGcm9tRGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Ib3Vyc0Zyb21EYXRlVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk1pbnV0ZXNGcm9tRGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TZWNvbmRzRnJvbURhdGVUaW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuVGltZXpvbmVGcm9tRGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5ZZWFyRnJvbURhdGUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Nb250aEZyb21EYXRlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGF5RnJvbURhdGUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5UaW1lem9uZUZyb21EYXRlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuSG91cnNGcm9tVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk1pbnV0ZXNGcm9tVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblNlY29uZHNGcm9tVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblRpbWV6b25lRnJvbVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5EYXRlVGltZSgpKTsKLQotCQkvLyB0aW1lem9uZSBmdW5jdHMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkltcGxpY2l0VGltZXpvbmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5BZGp1c3REYXRlVGltZVRvVGltZVpvbmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5BZGp1c3RUaW1lVG9UaW1lWm9uZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkFkanVzdERhdGVUb1RpbWVab25lKCkpOwotCi0JCS8vIFFOYW1lIGZ1bmN0cwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmVzb2x2ZVFOYW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUU5hbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Mb2NhbE5hbWVGcm9tUU5hbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5OYW1lc3BhY2VVcmlGcm9tUU5hbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5QcmVmaXhGcm9tUU5hbWUoKSk7Ci0KLQkJLy8gWFhYIGltcGxlbWVudCBoZXggJiBiaW5hcnkgJiBub3RhdGlvbnMKLQotCQkvLyBub2RlIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTmFtZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkxvY2FsTmFtZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5hbWVzcGFjZVVyaSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk51bWJlcigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkluU2NvcGVQcmVmaXhlcygpKTsKLQotCQkvLyBub2RlIGZ1bmN0cwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTGFuZygpKTsKLQotCQkvLyBzZXF1ZW5jZSBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkluZGV4T2YoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5FbXB0eSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkV4aXN0cygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkRpc3RpbmN0VmFsdWVzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuSW5zZXJ0QmVmb3JlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmVtb3ZlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmV2ZXJzZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN1YnNlcXVlbmNlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuVW5vcmRlcmVkKCkpOwotCi0JCS8vIHNlcXVlbmNlIGNhcmlkbmFsaXR5Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5aZXJvT3JPbmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5PbmVPck1vcmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5FeGFjdGx5T25lKCkpOwotCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5EZWVwRXF1YWwoKSk7Ci0KLQkJLy8gYWdncmVnYXRlIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ291bnQoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5BdmcoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5NYXgoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5NaW4oKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TdW0oKSk7Ci0KLQkJLy8gWFhYIGltcGxlbWVudCBmdW5jdGlvbnMgdGhhdCBnZW5lcmF0ZSBzZXF1ZW5jZXMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkRvYygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvbGxlY3Rpb24oKSk7Ci0KLQkJLy8gY29udGV4dCBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblBvc2l0aW9uKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTGFzdCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkN1cnJlbnREYXRlVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkN1cnJlbnREYXRlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ3VycmVudFRpbWUoKSk7Ci0JCQotCQkvLyBYWFggY29sbGF0aW9uCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5EZWZhdWx0Q29sbGF0aW9uKCkpOwotCQkKLQkJLy8gSUQgYW5kIElEUmVmCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5JRCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbklEUkVGKCkpOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9mdW5jdGlvbi9YU0N0ckxpYnJhcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvZnVuY3Rpb24vWFNDdHJMaWJyYXJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZGVkNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9mdW5jdGlvbi9YU0N0ckxpYnJhcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0OTUyIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6bG9uZyBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc1MTA1IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6aW50IGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc1OTkgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpub25Qb3NpdGl2ZUludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzYwMiAtIGltcGxlbWVudGF0aW9uIG9mIHhzOm5lZ2F0aXZlSW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjA4IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6c2hvcnQgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzYwOSAtIGltcGxlbWVudGF0aW9uIG9mIHhzOm5vbk5lZ2F0aXZlSW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjI5IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6dW5zaWduZWRMb25nIGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MzIgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpwb3NpdGl2ZUludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzYzOSAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmJ5dGUgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzY0MiAtIGltcGxlbWVudGF0aW9uIG9mIHhzOnVuc2lnbmVkSW50IGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2NDUgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp1bnNpZ2hlZFNob3J0IGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2NTAgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp1bnNpZ25lZEJ5dGUgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MTA0NiAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmJhc2U2NEJpbmFyeSBkYXRhIHR5cGUKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24gZGF0YSB0eXBlLgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp1bnR5cGVkQXRvbWljIGRhdGEgdHlwZS4KLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI5NzcwNyAtIE1pc3NpbmcgdGhlIGVtcHR5LXNlcXVlbmNlKCkgdHlwZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNvbnN0cnVjdG9yRkw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogWE1MIFNjaGVtYSBjb250cm9sIGxpYnJhcnkgc3VwcG9ydC4KLSAqLwotcHVibGljIGNsYXNzIFhTQ3RyTGlicmFyeSBleHRlbmRzIENvbnN0cnVjdG9yRkwgewotCS8qKgotCSAqIFBhdGggdG8gdzMub3JnIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfU0NIRU1BX05TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBYU0N0ckxpYnJhcnkuCi0JICovCi0JcHVibGljIFhTQ3RyTGlicmFyeSgpIHsKLQkJc3VwZXIoWE1MX1NDSEVNQV9OUyk7Ci0KLQkJLy8gYWRkIHR5cGVzIGhlcmUKLQkJYWRkX3R5cGUobmV3IFhTU3RyaW5nKCkpOwotCQlhZGRfdHlwZShuZXcgWFNCb29sZWFuKCkpOwotCQlhZGRfdHlwZShuZXcgWFNVbnR5cGVkQXRvbWljKCkpOwotCQlhZGRfdHlwZShuZXcgWFNOb3RhdGlvbigpKTsKLQotCQlhZGRfYWJzdHJhY3RfdHlwZSgiYW55QXRvbWljVHlwZSIsIG5ldyBBbnlBdG9taWNUeXBlKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfSk7Ci0JCQotCQkvLyBudW1lcmljCi0JCWFkZF90eXBlKG5ldyBYU0RlY2ltYWwoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0Zsb2F0KCkpOwotCQlhZGRfdHlwZShuZXcgWFNEb3VibGUoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0ludGVnZXIoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0xvbmcoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0ludCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTTm9uUG9zaXRpdmVJbnRlZ2VyKCkpOwotCQlhZGRfdHlwZShuZXcgWFNOZWdhdGl2ZUludGVnZXIoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1Nob3J0KCkpOwotCQlhZGRfdHlwZShuZXcgWFNOb25OZWdhdGl2ZUludGVnZXIoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1Vuc2lnbmVkTG9uZygpKTsKLQkJYWRkX3R5cGUobmV3IFhTUG9zaXRpdmVJbnRlZ2VyKCkpOwotCQlhZGRfdHlwZShuZXcgWFNCeXRlKCkpOwotCQlhZGRfdHlwZShuZXcgWFNVbnNpZ25lZEludCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTVW5zaWduZWRTaG9ydCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTVW5zaWduZWRCeXRlKCkpOwotCi0JCS8vIGRhdGUKLQkJYWRkX3R5cGUobmV3IFhTRGF0ZVRpbWUoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0RhdGUoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1RpbWUoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0dZZWFyTW9udGgoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0dZZWFyKCkpOwotCQlhZGRfdHlwZShuZXcgWFNHTW9udGhEYXkoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0dNb250aCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTR0RheSgpKTsKLQotCQlhZGRfdHlwZShuZXcgUU5hbWUoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU05DTmFtZSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTQW55VVJJKCkpOwotCQlhZGRfdHlwZShuZXcgWFNZZWFyTW9udGhEdXJhdGlvbigpKTsKLQkJYWRkX3R5cGUobmV3IFhTRGF5VGltZUR1cmF0aW9uKCkpOwotCQlhZGRfdHlwZShuZXcgWFNEdXJhdGlvbigpKTsKLQkJYWRkX3R5cGUobmV3IFhTRW50aXR5KCkpOwotCQlhZGRfdHlwZShuZXcgWFNJRCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTSURSRUYoKSk7Ci0JCQotCQlhZGRfdHlwZShuZXcgWFNCYXNlNjRCaW5hcnkoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0hleEJpbmFyeSgpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQW5jZXN0b3JBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0FuY2VzdG9yQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTliOThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQW5jZXN0b3JBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIGFuY2VzdG9ycyBvZiB0aGUgY29udGV4dCBub2RlLCB0aGlzIGFsd2F5cyBpbmNsdWRlcyB0aGUgcm9vdAotICogbm9kZS4KLSAqLwotcHVibGljIGNsYXNzIEFuY2VzdG9yQXhpcyBleHRlbmRzIFBhcmVudEF4aXMgewotCi0JLyoqCi0JICogR2V0IHRoZSBhbmNlc3RvcnMgb2YgdGhlIGNvbnRleHQgbm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuCi0JICogQHJldHVybiBUaGUgbm9kZXMgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIHRoZSBjb250ZXh0IG5vZGUuCi0JICovCi0JLy8gWFhYIHVuaWZ5IHRoaXMgd2l0aCBkZXNjZW5kYW50cyBheGlzID8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaXRlcmF0ZShOb2RlVHlwZSBub2RlLCBEeW5hbWljQ29udGV4dCBkYykgewotCi0JCS8vIGdldCB0aGUgcGFyZW50Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gc3VwZXIuaXRlcmF0ZShub2RlLCBkYyk7Ci0KLQkJLy8gbm8gcGFyZW50Ci0JCWlmIChycy5zaXplKCkgPT0gMCkKLQkJCXJldHVybiByczsKLQotCQlOb2RlVHlwZSBwYXJlbnQgPSAoTm9kZVR5cGUpIHJzLmdldCgwKTsKLQotCQkvLyBnZXQgYW5jZXN0b3JzIG9mIHBhcmVudAotCQlSZXN1bHRTZXF1ZW5jZSBhbmNlcyA9IGl0ZXJhdGUocGFyZW50LCBkYyk7Ci0KLQkJYW5jZXMuY29uY2F0KHJzKTsKLQotCQlyZXR1cm4gYW5jZXM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0FuY2VzdG9yT3JTZWxmQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9BbmNlc3Rvck9yU2VsZkF4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEyZGIyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0FuY2VzdG9yT3JTZWxmQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBUaGUgYW5jZXN0b3Itb3Itc2VsZiBheGlzIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUgYW5kIHRoZSBhbmNlc3RvcnMgb2YgdGhlCi0gKiBjb250ZXh0IG5vZGUsIHRoaXMgYWx3YXlzIGluY2x1ZGVzIHRoZSByb290IG5vZGUuCi0gKi8KLS8vIG11bHRpcGxlIGluaGVyZXRhbmNlIG1pZ2h0IGJlIGNvb2wgaGVyZSA9RAotcHVibGljIGNsYXNzIEFuY2VzdG9yT3JTZWxmQXhpcyBleHRlbmRzIFJldmVyc2VBeGlzIHsKLQotCS8qKgotCSAqIEdldCBhbmNlc3RvciBub2RlcyBvZiB0aGUgY29udGV4dCBub2RlIGFuZCB0aGUgY29udGV4dCBub2RlIGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuCi0JICogQHJldHVybiBUaGUgY29udGV4dCBub2RlIGFuZCBpdHMgYW5jZXN0b3JzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCS8vIGdldCBhbmNlc3RvcnMKLQkJQW5jZXN0b3JBeGlzIGFhID0gbmV3IEFuY2VzdG9yQXhpcygpOwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGFhLml0ZXJhdGUobm9kZSwgZGMpOwotCi0JCS8vIGFkZCBzZWxmCi0JCXJzLmFkZChub2RlKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0F0dHJpYnV0ZUF4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQXR0cmlidXRlQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWIxMTQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQXR0cmlidXRlQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBUaGUgYXR0cmlidXRlIGF4aXMgY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGNvbnRleHQgbm9kZS4gVGhlIGF4aXMgd2lsbAotICogYmUgZW1wdHkgdW5sZXNzIHRoZSBjb250ZXh0IG5vZGUgaXMgYW4gZWxlbWVudC4KLSAqLwotcHVibGljIGNsYXNzIEF0dHJpYnV0ZUF4aXMgZXh0ZW5kcyBGb3J3YXJkQXhpcyB7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGNvbnRleHQgbm9kZSdzIGF0dHJpYnV0ZXMuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEByZXR1cm4gVGhlIGF0dGlidXRlcyBvZiB0aGUgY29udGV4dCBub2RlLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBvbmx5IGVsZW1lbnRzIGhhdmUgYXR0cmlidXRlcwotCQlpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudFR5cGUpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIGdldCBhdHRyaWJ1dGVzCi0JCUVsZW1lbnRUeXBlIGVsZW0gPSAoRWxlbWVudFR5cGUpIG5vZGU7Ci0JCU5hbWVkTm9kZU1hcCBhdHRycyA9IGVsZW0udmFsdWUoKS5nZXRBdHRyaWJ1dGVzKCk7Ci0KLQkJLy8gYWRkIGF0dHJpYnV0ZXMKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLQotCQkJcnMuYWRkKE5vZGVUeXBlLmRvbV90b194cGF0aChhdHRyKSk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0KLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5vZGUncyBwcmluY2lwbGUgbm9kZSBraW5kLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHR5cGUgb2Ygbm9kZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTm9kZVR5cGUgcHJpbmNpcGFsX25vZGVfa2luZCgpIHsKLQkJcmV0dXJuIG5ldyBBdHRyVHlwZSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9BeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0F4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjZThiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0F4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGNsYXNzIGZvciBhbiBBeGlzLgotICogCi0gKiBBbiBheGlzIGRlZmluZXMgdGhlICJkaXJlY3Rpb24gb2YgbW92ZW1lbnQiIGZvciBhIHN0ZXAgYmV0d2VlbiBhIGNvbnRleHQgbm9kZQotICogYW5kIGFub3RoZXIgbm9kZSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGF4aXMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQXhpcyB7Ci0JLyoqCi0JICogR2V0IGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgdHlwZSBvZiBub2RlLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dC4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgc2VxdWVuY2UuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgRHluYW1pY0NvbnRleHQgZGMpOwotCi0JLyoqCi0JICogR2V0IHRoZSBwcmluY2lwbGUga2luZCBvZiBub2RlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHByaW5jaXBsZSBub2RlIGtpbmQuCi0JICovCi0JcHVibGljIE5vZGVUeXBlIHByaW5jaXBhbF9ub2RlX2tpbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQ2hpbGRBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0NoaWxkQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmExZDdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQ2hpbGRBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIFdhcyBub3QgaGFuZGxpbmcgeG1sIGxvYWRlZCBkeW5hbWljYWxseSBpbiB2YXJpYWJsZXMuIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBUaGUgY2hpbGQgYXhpcyBjb250YWlucyB0aGUgY2hpbGRyZW4gb2YgdGhlIGNvbnRleHQgbm9kZS4KLSAqLwotcHVibGljIGNsYXNzIENoaWxkQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgY29udGV4dCBub2RlJ3MgY2hpbGRyZW4uCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEByZXR1cm4gVGhlIGNvbnRleHQgbm9kZSdzIGNoaWxkcmVuLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJTm9kZUxpc3QgbmwgPSBudWxsOwotCQkKLQotCQkvLyBvbmx5IGRvY3VtZW50IGFuZCBlbGVtZW50IG5vZGVzIGhhdmUgY2hpbGRyZW4KLQkJaWYgKG5vZGUgaW5zdGFuY2VvZiBEb2NUeXBlKSB7Ci0JCQlubCA9ICgoRG9jVHlwZSkgbm9kZSkudmFsdWUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0JCX0KLQkJaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50VHlwZSkKLQkJCW5sID0gKChFbGVtZW50VHlwZSkgbm9kZSkudmFsdWUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0KLQkJLy8gYWRkIHRoZSBjaGlsZHJlbiB0byB0aGUgcmVzdWx0Ci0JCWlmIChubCAhPSBudWxsKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGRub2RlID0gbmwuaXRlbShpKTsKLQkJCQlOb2RlVHlwZSBuID0gbnVsbDsKLQkJCQl0cnkgewotCQkJCQluID0gTm9kZVR5cGUuZG9tX3RvX3hwYXRoKGRub2RlKTsKLQkJCQl9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBleCkgewotCQkJCQluID0gTm9kZVR5cGUuZG9tX3RvX3hwYXRoKGRub2RlKTsKLQkJCQl9Ci0KLQkJCQlycy5hZGQobik7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0N1cEVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0N1cEVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NWM2ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9DdXBFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBDVVAgUGFyc2VyLgotICovCi1wdWJsaWMgY2xhc3MgQ3VwRXJyb3IgZXh0ZW5kcyBYUGF0aEVycm9yIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xODM1Nzg0NjIzMjgwNjkyMjc0TDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDVVAgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBDdXBFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKHJlYXNvbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZWZhdWx0UlNGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRSU0ZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1Yjg5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRSU0ZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKioKLSAqIEZhY3RvcnkgaW1wbGVtZW50YXRpb24gd2hpY2ggY3JlYXRlcyBzZXF1ZW5jZXMgb2YgdHlwZSBEZWZhdWx0UmVzdWx0U2VxdWVuY2UuCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRSU0ZhY3RvcnkgZXh0ZW5kcyBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc3VsdFNlcXVlbmNlIF9yc19jcmVhdG9yID0gbmV3IERlZmF1bHRSZXN1bHRTZXF1ZW5jZSgpOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9PTF9TSVpFID0gNTA7Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlW10gX3JzX3Bvb2wgPSBuZXcgUmVzdWx0U2VxdWVuY2VbUE9PTF9TSVpFXTsKLQlwcml2YXRlIGludCBfaGVhZF9wb3M7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBvZiBmYWN0b3J5LgotCSAqIAotCSAqLwotCXB1YmxpYyBEZWZhdWx0UlNGYWN0b3J5KCkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IFBPT0xfU0laRTsgaSsrKQotCQkJX3JzX3Bvb2xbaV0gPSBfcnNfY3JlYXRvci5jcmVhdGVfbmV3KCk7Ci0KLQkJX2hlYWRfcG9zID0gUE9PTF9TSVpFIC0gMTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgUmVzdWx0U2VxdWVuY2UgZmFjdF9jcmVhdGVfbmV3KCkgewotCQlpZiAoX2hlYWRfcG9zID4gMCkgewotCQkJcmV0dXJuIF9yc19wb29sW19oZWFkX3Bvcy0tXTsKLQkJfQotCi0JCXJldHVybiBfcnNfY3JlYXRvci5jcmVhdGVfbmV3KCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZmFjdF9yZWxlYXNlKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCWludCBuZXdfcG9zID0gX2hlYWRfcG9zICsgMTsKLQotCQlpZiAobmV3X3BvcyA8IFBPT0xfU0laRSkgewotCQkJcnMuY2xlYXIoKTsKLQotCQkJX2hlYWRfcG9zID0gbmV3X3BvczsKLQkJCV9yc19wb29sW25ld19wb3NdID0gcnM7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBmYWN0X3ByaW50X2RlYnVnKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlYWQgcG9zOiAiICsgX2hlYWRfcG9zKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRSZXN1bHRTZXF1ZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZWZhdWx0UmVzdWx0U2VxdWVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgzOGY1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRSZXN1bHRTZXF1ZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYSByZXN1bHQgc2VxdWVuY2UuCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRSZXN1bHRTZXF1ZW5jZSBleHRlbmRzIFJlc3VsdFNlcXVlbmNlIHsKLQotCXByaXZhdGUgTGlzdCBfc2VxOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogYW4gZW1wdHkgYXJyYXkgaXMgY3JlYXRlZAotCSAqLwotCXB1YmxpYyBEZWZhdWx0UmVzdWx0U2VxdWVuY2UoKSB7Ci0JCV9zZXEgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlzIGFkZGVkCi0JICovCi0JcHVibGljIERlZmF1bHRSZXN1bHRTZXF1ZW5jZShBbnlUeXBlIGl0ZW0pIHsKLQkJdGhpcygpOwotCQlhZGQoaXRlbSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlzIGFkZGVkIHRvIGFycmF5IF9zZXEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBhZGQoQW55VHlwZSBpdGVtKSB7Ci0JCWFzc2VydCBpdGVtICE9IG51bGw7Ci0JCV9zZXEuYWRkKGl0ZW0pOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBycwotCSAqICAgICAgICAgICAgUmVzdWx0U2VxdWVuY2UKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjb25jYXQoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkJX3NlcS5hZGQoaS5uZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdGhlIG5leHQgaXRlcmF0aW9uIG9mIGFycmF5IF9zZXEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX3NlcS5saXN0SXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGludGVnZXIgb2YgdGhlIHNpemUgb2YgYXJyYXkgX3NlcQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBpbnQgc2l6ZSgpIHsKLQkJcmV0dXJuIF9zZXEuc2l6ZSgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpCi0JICogICAgICAgICAgICBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGFycmF5IGl0ZW0gdGhhdCBpcyB3YW50ZWQuCi0JICogQHJldHVybiBpdGVtIGkgZnJvbSBhcnJheSBfc2VxCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgZ2V0KGludCBpKSB7Ci0JCXJldHVybiAoQW55VHlwZSkgX3NlcS5nZXQoaSk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBmaXJzdCBpdGVtIGZyb20gYXJyYXkgX3NlcQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlUeXBlIGZpcnN0KCkgewotCQlpZiAoX3NlcS5zaXplKCkgPT0gMCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBnZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogV2hldGhlciBvciBub3QgYXJyYXkgX3NlcSBpcyBlbXB0eQotCSAqIAotCSAqIEByZXR1cm4gYSBib29sZWFuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZW1wdHkoKSB7Ci0JCXJldHVybiBfc2VxLmlzRW1wdHkoKTsKLQl9Ci0KLQkvKioKLQkgKiBDbGVhcnMgdGhlIHNlcXVlbmNlLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNsZWFyKCkgewotCQlfc2VxLmNsZWFyKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IHNlcXVlbmNlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG5ldyBzZXF1ZW5jZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY3JlYXRlX25ldygpIHsKLQkJcmV0dXJuIG5ldyBEZWZhdWx0UmVzdWx0U2VxdWVuY2UoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRTdGF0aWNDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRTdGF0aWNDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZTUzY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZWZhdWx0U3RhdGljQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjc3NzkyIC0gYWRkIGJ1aWx0IGluIHR5cGVzIHRvIHN0YXRpYyBjb250ZXh0LiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI5NzcwNyAtIE1pc3NpbmcgdGhlIGVtcHR5LXNlcXVlbmNlKCkgdHlwZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uRm5GdW5jdGlvbkxpYnJhcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLlhTQ3RyTGlicmFyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYSBzdGF0aWMgY29udGV4dCBhcyBkZXNjcmliZWQgYnkgdGhlIFhQYXRoIDIuMAotICogc3BlY2lmaWNhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRTdGF0aWNDb250ZXh0IGltcGxlbWVudHMgU3RhdGljQ29udGV4dCB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gX3hwYXRoMV9jb21wYXRpYmxlOwotCXByaXZhdGUgU3RyaW5nIF9kZWZhdWx0X25hbWVzcGFjZTsKLQlwcml2YXRlIFN0cmluZyBfZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2U7Ci0JcHJpdmF0ZSBYU01vZGVsIF9zY2hlbWE7Ci0JcHJpdmF0ZSBYU0N0ckxpYnJhcnkgYnVpbHRpblR5cGVzOwotCi0JLy8ga2V5OiBTdHJpbmcgcHJlZml4LCBjb250ZW50czogU3RyaW5nIG5hbWVzcGFjZQotCXByaXZhdGUgTWFwIF9uYW1lc3BhY2VzOwotCi0JcHJpdmF0ZSBTdHJpbmcgX2NudHh0X2l0ZW1fdHlwZTsKLQlwcml2YXRlIE1hcCBfZnVuY3Rpb25zOwotCi0JLy8gWFhYIGNvbGxhdGlvbnMKLQotCXByaXZhdGUgWFNBbnlVUkkgX2Jhc2VfdXJpOwotCXByaXZhdGUgTWFwIF9kb2N1bWVudHM7Ci0JcHJpdmF0ZSBNYXAgX2NvbGxlY3Rpb25zOwotCQotCXB1YmxpYyBTdHJpbmcgZ2V0X2NudHh0X2l0ZW1fdHlwZSgpIHsKLQkJcmV0dXJuIF9jbnR4dF9pdGVtX3R5cGU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0X2NudHh0X2l0ZW1fdHlwZShTdHJpbmcgY250eHRJdGVtVHlwZSkgewotCQlfY250eHRfaXRlbV90eXBlID0gY250eHRJdGVtVHlwZTsKLQl9Ci0KLQlwdWJsaWMgTWFwPFN0cmluZywgTGlzdDxEb2N1bWVudD4+IGdldF9jb2xsZWN0aW9ucygpIHsKLQkJcmV0dXJuIF9jb2xsZWN0aW9uczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRfY29sbGVjdGlvbnMoTWFwPFN0cmluZywgTGlzdDxEb2N1bWVudD4+IGNvbGxlY3Rpb25zKSB7Ci0JCV9jb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0X2RlZmF1bHRfY29sbGVjdGlvbl90eXBlKCkgewotCQlyZXR1cm4gX2RlZmF1bHRfY29sbGVjdGlvbl90eXBlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldF9kZWZhdWx0X2NvbGxlY3Rpb25fdHlwZShTdHJpbmcgZGVmYXVsdENvbGxlY3Rpb25UeXBlKSB7Ci0JCV9kZWZhdWx0X2NvbGxlY3Rpb25fdHlwZSA9IGRlZmF1bHRDb2xsZWN0aW9uVHlwZTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBfZGVmYXVsdF9jb2xsZWN0aW9uX3R5cGU7Ci0KLQkvLyBWYXJpYWJsZXMgYXJlIGhlbGQgbGlrZSB0aGlzOgotCS8vIEEgc3RhY2sgb2YgbWFwcyBvZiB2YXJpYWJsZXMuLi4uCi0JLy8gb3IgaW4gbW9yZSBodW1hbiB0ZXJtczoKLQkvLyBhIHN0YWNrIG9mIHNjb3BlcyBlYWNoIGNvbnRhaW5pbmcgYSBzeW1ib2wgdGFibGUKLQkvLyBYWFggdmFycyBjb250YWluIEFueVR5cGUuLi4gc2hvdWxkIHRoZXkgYmUgUmVzdWx0U2VxdWVuY2UgPwotCXByaXZhdGUgU3RhY2sgX3Njb3BlczsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBzY2hlbWEKLQkgKiAgICAgICAgICAgIFNjaGVtYSBpbmZvcm1hdGlvbiBmcm9tIGRvY3VtZW50LiBNYXkgYmUgbnVsbC4KLQkgKi8KLQlwdWJsaWMgRGVmYXVsdFN0YXRpY0NvbnRleHQoWFNNb2RlbCBzY2hlbWEpIHsKLQkJX3hwYXRoMV9jb21wYXRpYmxlID0gZmFsc2U7Ci0KLQkJX2RlZmF1bHRfbmFtZXNwYWNlID0gbnVsbDsKLQkJX2RlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlID0gRm5GdW5jdGlvbkxpYnJhcnkuWFBBVEhfRlVOQ1RJT05TX05TOwotCQlfc2NoZW1hID0gc2NoZW1hOwotCQlidWlsdGluVHlwZXMgPSBuZXcgWFNDdHJMaWJyYXJ5KCk7Ci0KLQkJX2Z1bmN0aW9ucyA9IG5ldyBIYXNoTWFwKDIwKTsgLy8gYWxsb3cgbnVsbCBrZXlzOiBudWxsIG5hbWVzcGFjZQotCQlfbmFtZXNwYWNlcyA9IG5ldyBIYXNoTWFwKDIwKTsgLy8gZGl0dG8KLQotCQlfY250eHRfaXRlbV90eXBlID0gbnVsbDsKLQotCQlfc2NvcGVzID0gbmV3IFN0YWNrKCk7Ci0JCW5ld19zY29wZSgpOwotCi0JCWlmIChfc2NoZW1hICE9IG51bGwpCi0JCQlpbml0X3NjaGVtYShzY2hlbWEpOwotCi0JCV9iYXNlX3VyaSA9IG5ldyBYU0FueVVSSSgpOwotCi0JCS8vIFhYWCB3aWxkY2FyZCBwcmVmaXgKLQkJYWRkX25hbWVzcGFjZSgiKiIsICIqIik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3Igc2NoZW1hLWxlc3MgZG9jdW1lbnRzLgotCSAqIAotCSAqLwotCXB1YmxpYyBEZWZhdWx0U3RhdGljQ29udGV4dCgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdF9zY2hlbWEoWFNNb2RlbCBzY2hlbWEpIHsKLQl9Ci0KLQkvKioKLQkgKiByZXR1cm4gdGhlIGJhc2UgVVJJCi0JICogCi0JICogQHJldHVybiBYU0FueVVSSQotCSAqLwotCXB1YmxpYyBYU0FueVVSSSBiYXNlX3VyaSgpIHsKLQkJcmV0dXJuIF9iYXNlX3VyaTsKLQl9Ci0KLQkvKioKLQkgKiBpcyBpdCB4cGF0aDEgY29tcGF0aWJsZT8KLQkgKiAKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB4cGF0aDFfY29tcGF0aWJsZSgpIHsKLQkJcmV0dXJuIF94cGF0aDFfY29tcGF0aWJsZTsKLQl9Ci0KLQkvKioKLQkgKiBhZGRzIG5hbWVzcGFjZQotCSAqIAotCSAqIEBwYXJhbSBwcmVmaXgKLQkgKiAgICAgICAgICAgIG5hbWVzcGFjZSBwcmVmaXgKLQkgKiBAcGFyYW0gbmFtZXNwYWNlCi0JICogICAgICAgICAgICBuYW1lc3BhY2UgVVJJCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgYWRkX25hbWVzcGFjZShTdHJpbmcgcHJlZml4LCBTdHJpbmcgbmFtZXNwYWNlKSB7Ci0JCS8vIFhYWCBhcmUgdGhlc2UgcmVzZXJ2ZWQgPwotCQkvLyByZWZlciB0byBmb3JtYWwgc2VtYW50aWNzIHNlY3Rpb24gMi41LjEKLQkJaWYgKChwcmVmaXggIT0gbnVsbCkgJiYgKHByZWZpeC5lcXVhbHMoImZzIikgfHwgcHJlZml4LmVxdWFscygib3AiKSB8fCBwcmVmaXguZXF1YWxzKCJkbSIpKSkKLQkJCXJldHVybjsKLQkJIGlmIChwcmVmaXggPT0gbnVsbCkgewotCQkgICBfZGVmYXVsdF9uYW1lc3BhY2UgPSBuYW1lc3BhY2U7IAotCQkgICBfbmFtZXNwYWNlcy5wdXQoIiIsIG5hbWVzcGFjZSk7Ci0JCSB9IGVsc2UgewotCQkgICBfbmFtZXNwYWNlcy5wdXQocHJlZml4LCBuYW1lc3BhY2UpOwotCQkgfQotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIHdoZW4gb25lIGlzIG5vdCBhbGxvY2F0ZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZGVmYXVsdF9uYW1lc3BhY2UoKSB7Ci0JCXJldHVybiBfZGVmYXVsdF9uYW1lc3BhY2U7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkZWZhdWwgZnVuY3Rpb24gbmFtZXNwYWNlCi0JICogCi0JICogQHJldHVybiBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGRlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlKCkgewotCQlyZXR1cm4gX2RlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlOwotCX0KLQotCS8qKgotCSAqIEFkZHMgYSBmdW5jdGlvbiB0byB0aGUgbGlicmFyeS4KLQkgKiAKLQkgKiBAcGFyYW0gZmwKLQkgKiAgICAgICAgICAgIEZ1bmN0aW9uIGxpYnJhcnkgdG8gYWRkLgotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF9mdW5jdGlvbl9saWJyYXJ5KEZ1bmN0aW9uTGlicmFyeSBmbCkgewotCQlmbC5zZXRfc3RhdGljX2NvbnRleHQodGhpcyk7Ci0JCV9mdW5jdGlvbnMucHV0KGZsLm5hbWVzcGFjZSgpLCBmbCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIGV4aXN0YW5jZSBvZiBmdW5jdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgZnVuY3Rpb24gbmFtZS4KLQkgKiBAcGFyYW0gYXJpdHkKLQkgKiAgICAgICAgICAgIGFyaXR5IG9mIGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiBleGlzdHMuIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBmdW5jdGlvbl9leGlzdHMoUU5hbWUgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCVN0cmluZyBucyA9IG5hbWUubmFtZXNwYWNlKCk7Ci0JCWlmICghX2Z1bmN0aW9ucy5jb250YWluc0tleShucykpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJRnVuY3Rpb25MaWJyYXJ5IGZsID0gKEZ1bmN0aW9uTGlicmFyeSkgX2Z1bmN0aW9ucy5nZXQobnMpOwotCi0JCXJldHVybiBmbC5mdW5jdGlvbl9leGlzdHMobmFtZSwgYXJpdHkpOwotCX0KLQotCXByb3RlY3RlZCBGdW5jdGlvbiBmdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJU3RyaW5nIG5zID0gbmFtZS5uYW1lc3BhY2UoKTsKLQkJaWYgKCFfZnVuY3Rpb25zLmNvbnRhaW5zS2V5KG5zKSkKLQkJCXJldHVybiBudWxsOwotCi0JCUZ1bmN0aW9uTGlicmFyeSBmbCA9IChGdW5jdGlvbkxpYnJhcnkpIF9mdW5jdGlvbnMuZ2V0KG5zKTsKLQotCQlyZXR1cm4gZmwuZnVuY3Rpb24obmFtZSwgYXJpdHkpOwotCX0KLQotCS8qKgotCSAqIAotCSAqIENyZWF0ZXMgYW4gYXRvbWljIGZyb20gYSBzcGVjaWZpYyB0eXBlIG5hbWUgaW5pdGlhbGl6ZWQgd2l0aCBhIGRlZmF1bHQKLQkgKiB2YWx1ZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgbmFtZSBvZiB0eXBlIHRvIGNyZWF0ZQotCSAqIEByZXR1cm4gQXRvbWljIHR5cGUgb2YgZGVzaXJlZCB0eXBlLgotCSAqLwotCXB1YmxpYyBBbnlBdG9taWNUeXBlIG1ha2VfYXRvbWljKFFOYW1lIG5hbWUpIHsKLQkJU3RyaW5nIG5zID0gbmFtZS5uYW1lc3BhY2UoKTsKLQotCQlpZiAoIV9mdW5jdGlvbnMuY29udGFpbnNLZXkobnMpKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJRnVuY3Rpb25MaWJyYXJ5IGZsID0gKEZ1bmN0aW9uTGlicmFyeSkgX2Z1bmN0aW9ucy5nZXQobnMpOwotCi0JCWlmICghKGZsIGluc3RhbmNlb2YgQ29uc3RydWN0b3JGTCkpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlDb25zdHJ1Y3RvckZMIGNmbCA9IChDb25zdHJ1Y3RvckZMKSBmbDsKLQotCQlyZXR1cm4gY2ZsLmF0b21pY190eXBlKG5hbWUpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBleHBhbmRfcW5hbWUoUU5hbWUgbmFtZSwgU3RyaW5nIGRlZikgewotCQlTdHJpbmcgcHJlZml4ID0gbmFtZS5wcmVmaXgoKTsKLQotCQlpZiAocHJlZml4ID09IG51bGwpIHsKLQkJCW5hbWUuc2V0X25hbWVzcGFjZShkZWYpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlpZiAoIXByZWZpeF9leGlzdHMocHJlZml4KSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQluYW1lLnNldF9uYW1lc3BhY2UocmVzb2x2ZV9wcmVmaXgocHJlZml4KSk7Ci0JCXJldHVybiB0cnVlOwotCi0JfQotCi0JLyoqCi0JICogRXhwYW5kcyB0aGUgcW5hbWUncyBwcmVmaXggaW50byBhIG5hbWVzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgcW5hbWUgdG8gZXhwYW5kLgotCSAqIEByZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4cGFuZF9xbmFtZShRTmFtZSBuYW1lKSB7Ci0JCXJldHVybiBleHBhbmRfcW5hbWUobmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRXhwYW5kcyBhIHFuYW1lIGFuZCB1c2VzIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIG5hbWVzcGFjZSBpZiB1bnByZWZpeGVkLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBxbmFtZSB0byBleHBhbmQuCi0JICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXhwYW5kX2Z1bmN0aW9uX3FuYW1lKFFOYW1lIG5hbWUpIHsKLQkJcmV0dXJuIGV4cGFuZF9xbmFtZShuYW1lLCBkZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBFeHBhbmRzIGEgcW5hbWUgYW5kIHVzZXMgdGhlIGRlZmF1bHQgdHlwZS9lbGVtZW50IG5hbWVzcGFjZSBpZgotCSAqIHVucHJlZml4ZWQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIHFuYW1lIHRvIGV4cGFuZC4KLQkgKiBAcmV0dXJuIHRydWUgb24gc3VjY2Vzcy4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBleHBhbmRfZWxlbV90eXBlX3FuYW1lKFFOYW1lIG5hbWUpIHsKLQkJcmV0dXJuIGV4cGFuZF9xbmFtZShuYW1lLCBkZWZhdWx0X25hbWVzcGFjZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBDaGVja3Mgd2hldGhlciB0aGUgdHlwZSBpcyBkZWZpbmVkIGluIHRoZSBpbiBzY29wZSBzY2hlbWEgZGVmaW5pdGlvbnMuCi0JICogCi0JICogQHBhcmFtIHFuYW1lCi0JICogICAgICAgICAgICB0eXBlIG5hbWUuCi0JICogQHJldHVybiB0cnVlIGlmIHR5cGUgaXMgZGVmaW5lZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0eXBlX2RlZmluZWQoUU5hbWUgcW5hbWUpIHsKLQkJCi0JCWlmIChfc2NoZW1hID09IG51bGwpIHsKLQkJCXJldHVybiBidWlsdGluVHlwZXMuYXRvbWljX3R5cGUocW5hbWUpICE9IG51bGw7Ci0JCX0KLQotCQlYU1R5cGVEZWZpbml0aW9uIHRkID0gX3NjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbihxbmFtZS5sb2NhbCgpLCBxbmFtZQotCQkJCS5uYW1lc3BhY2UoKSk7Ci0JCWlmICh0ZCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIENoZWNrcyB3aGV0aGVyIHRoZSB0eXBlIGlzIGRlZmluZWQgaW4gdGhlIGluIHNjb3BlIHNjaGVtYSBkZWZpbml0aW9ucy4KLQkgKiAKLQkgKiBAcGFyYW0gbnMKLQkgKiAgICAgICAgICAgIG5hbWVzcGFjZSBvZiB0eXBlLgotCSAqIEBwYXJhbSB0eXBlCi0JICogICAgICAgICAgICBuYW1lIG9mIHR5cGUuCi0JICogQHJldHVybiB0cnVlIGlmIHR5cGUgaXMgZGVmaW5lZC4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0eXBlX2RlZmluZWQoU3RyaW5nIG5zLCBTdHJpbmcgdHlwZSkgewotCQlyZXR1cm4gdHlwZV9kZWZpbmVkKG5ldyBRTmFtZShucywgdHlwZSkpOwotCX0KLQotCS8qKgotCSAqIGlzIGVsZW1lbnQgZGVjbGFyZWQ/Ci0JICogCi0JICogQHBhcmFtIGVsZW0KLQkgKiAgICAgICAgICAgIG5hbWUgb2YgZWxlbWVudC4KLQkgKiBAcmV0dXJuIHRydWUgaWYgZWxlbWVudCBkZWNsYXJlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlbGVtZW50X2RlY2xhcmVkKFFOYW1lIGVsZW0pIHsKLQkJaWYgKF9zY2hlbWEgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlYU0VsZW1lbnREZWNsYXJhdGlvbiBlZCA9IF9zY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9uKGVsZW0ubG9jYWwoKSwKLQkJCQllbGVtLm5hbWVzcGFjZSgpKTsKLQotCQlpZiAoZWQgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW5zIHNjaGVtYSBkZWZpbml0aW9uIG9mIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGVsZW0KLQkgKiAgICAgICAgICAgIG5hbWUgb2YgZWxlbWVudCB3aG8ncyB0eXBlIGlzIGRlc2lyZWQuCi0JICogQHJldHVybiBzY2hlbWEgZGVmaW5pdGlvbiBvZiB0eXBlCi0JICovCi0JcHVibGljIFhTVHlwZURlZmluaXRpb24gZWxlbWVudF90eXBlX2RlZmluaXRpb24oUU5hbWUgZWxlbSkgewotCQlYU0VsZW1lbnREZWNsYXJhdGlvbiBlZCA9IF9zY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9uKGVsZW0ubG9jYWwoKSwKLQkJCQllbGVtLm5hbWVzcGFjZSgpKTsKLQotCQlyZXR1cm4gZWQuZ2V0VHlwZURlZmluaXRpb24oKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVja3MgaWYgYW4gYXR0cmlidXRlIGlzIGluIHRoZSBpbi1zY29wZSBzY2hlbWEgZGVmaW5pdGlvbnMuCi0JICogCi0JICogQHBhcmFtIGF0dHIKLQkgKiAgICAgICAgICAgIG5hbWUgb2YgYXR0cmlidXRlLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBhdHRyaWJ1dGUgaXMgZGVjbGFyZWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gYXR0cmlidXRlX2RlY2xhcmVkKFFOYW1lIGF0dHIpIHsKLQkJaWYgKF9zY2hlbWEgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlYU0F0dHJpYnV0ZURlY2xhcmF0aW9uIGFkID0gX3NjaGVtYS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyCi0JCQkJLmxvY2FsKCksIGF0dHIubmFtZXNwYWNlKCkpOwotCi0JCWlmIChhZCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0eXBlIGRlZmluaXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBpbiBhbiBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtCi0JICogICAgICAgICAgICBlbGVtZW50IG5hbWUKLQkgKiBAcmV0dXJuIHNjaGVtYSBkZWZpbml0aW9uIG9mIHRoZSB0eXBlIG9mIHRoZSBhdHRyaWJ1dGUKLQkgKi8KLQlwdWJsaWMgWFNUeXBlRGVmaW5pdGlvbiBhdHRyaWJ1dGVfdHlwZV9kZWZpbml0aW9uKFFOYW1lIGVsZW0pIHsKLQkJWFNBdHRyaWJ1dGVEZWNsYXJhdGlvbiBhZCA9IF9zY2hlbWEuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oZWxlbQotCQkJCS5sb2NhbCgpLCBlbGVtLm5hbWVzcGFjZSgpKTsKLQotCQlyZXR1cm4gYWQuZ2V0VHlwZURlZmluaXRpb24oKTsKLQl9Ci0KLQkvKioKLQkgKiBkb2VzIHByZWZpeCBleGlzdD8KLQkgKiAKLQkgKiBAcGFyYW0gcHJlZgotCSAqICAgICAgICAgICAgcHJlZml4IG5hbWUuCi0JICogQHJldHVybiB0cnVlIGlmIGl0IGRvZXMuCi0JICovCi0JcHVibGljIGJvb2xlYW4gcHJlZml4X2V4aXN0cyhTdHJpbmcgcHJlZikgewotCQlyZXR1cm4gX25hbWVzcGFjZXMuY29udGFpbnNLZXkocHJlZik7Ci0JfQotCi0JLyoqCi0JICogUmVzb2x2ZXMgYSBwcmVmaXggaW50byBhIG5hbWVzcGFjZSBVUkkuCi0JICogCi0JICogQHBhcmFtIHByZWYKLQkgKiAgICAgICAgICAgIHByZWZpeCBuYW1lCi0JICogQHJldHVybiB1cmkgcHJlZml4IGlzIHJlc29sdmVkIHRvIG9yIG51bGwuCi0JICovCi0JcHVibGljIFN0cmluZyByZXNvbHZlX3ByZWZpeChTdHJpbmcgcHJlZikgewotCQlyZXR1cm4gKFN0cmluZykgX25hbWVzcGFjZXMuZ2V0KHByZWYpOwotCX0KLQotCS8qKgotCSAqIENoZWNrcyBpZiBhbiBYTUwgbm9kZSBkZXJpdmVzIGZyb20gYSBzcGVjaWZpZWQgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIG5vZGUgYWN0dWFsIHR5cGUKLQkgKiBAcGFyYW0gZXQKLQkgKiAgICAgICAgICAgIG5hbWUgb2YgZXhwZWN0ZWQgdHlwZQotCSAqIEByZXR1cm4gdHJ1ZSBpZiBhIGRlcml2YXRpb24gZXhpc3RzCi0JICovCi0JLy8gWFhYIGZpeCB0aGlzCi0JcHVibGljIGJvb2xlYW4gZGVyaXZlc19mcm9tKE5vZGVUeXBlIGF0LCBRTmFtZSBldCkgewotCQlJdGVtUFNWSSBwc3ZpID0gKEl0ZW1QU1ZJKSBhdC5ub2RlX3ZhbHVlKCk7Ci0JCVhTVHlwZURlZmluaXRpb24gdGQgPSBwc3ZpLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0KLQkJc2hvcnQgbWV0aG9kID0gMDsKLQotCQkvLyBYWFgKLQkJaWYgKCFldC5leHBhbmRlZCgpKSB7Ci0JCQlTdHJpbmcgcHJlID0gZXQucHJlZml4KCk7Ci0KLQkJCWlmIChwcmUgIT0gbnVsbCkgewotCQkJCWlmIChwcmVmaXhfZXhpc3RzKHByZSkpIHsKLQkJCQkJZXQuc2V0X25hbWVzcGFjZShyZXNvbHZlX3ByZWZpeChwcmUpKTsKLQkJCQl9IGVsc2UKLQkJCQkJYXNzZXJ0IGZhbHNlOwotCQkJfSBlbHNlCi0JCQkJZXQuc2V0X25hbWVzcGFjZShkZWZhdWx0X25hbWVzcGFjZSgpKTsKLQkJfQotCi0JCXJldHVybiB0ZC5kZXJpdmVkRnJvbShldC5uYW1lc3BhY2UoKSwgZXQubG9jYWwoKSwgbWV0aG9kKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVja3MgaWYgYW4gWE1MIG5vZGUgZGVyaXZlcyBmcm9tIGEgc3BlY2lmaWVkIHR5cGUgZGVmaW5pdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIG5vZGUgYWN0dWFsIHR5cGUuCi0JICogQHBhcmFtIGV0Ci0JICogICAgICAgICAgICB0eXBlIGRlZmluaXRpb24gb2YgZXhwZWN0ZWQgdHlwZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgYSBkZXJpdmF0aW9uIGV4aXN0cy4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBkZXJpdmVzX2Zyb20oTm9kZVR5cGUgYXQsIFhTVHlwZURlZmluaXRpb24gZXQpIHsKLQkJSXRlbVBTVkkgcHN2aSA9IChJdGVtUFNWSSkgYXQubm9kZV92YWx1ZSgpOwotCQlYU1R5cGVEZWZpbml0aW9uIHRkID0gcHN2aS5nZXRUeXBlRGVmaW5pdGlvbigpOwotCi0JCXNob3J0IG1ldGhvZCA9IDA7Ci0KLQkJcmV0dXJuIHRkLmRlcml2ZWRGcm9tVHlwZShldCwgbWV0aG9kKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IHNjb3BlIGxldmVsLgotCSAqLwotCS8vIHZhcmlhYmxlIHN0dWZmCi0JcHVibGljIHZvaWQgbmV3X3Njb3BlKCkgewotCQlNYXAgdmFycyA9IG5ldyBIYXNoTWFwKCk7Ci0KLQkJX3Njb3Blcy5wdXNoKHZhcnMpOwotCX0KLQotCS8qKgotCSAqIERlc3Ryb3lzIGEgc2NvcGUuCi0JICovCi0JcHVibGljIHZvaWQgZGVzdHJveV9zY29wZSgpIHsKLQkJX3Njb3Blcy5wb3AoKTsKLQl9Ci0KLQlwcml2YXRlIE1hcCBjdXJyZW50X3Njb3BlKCkgewotCQlyZXR1cm4gKE1hcCkgX3Njb3Blcy5wZWVrKCk7Ci0JfQotCi0JLyoqCi0JICogZG9lcyB2YXJpYWJsZSBleGlzdCBpbiBjdXJyZW50IHNjb3BlID8KLQkgKiAKLQkgKiBAcGFyYW0gdmFyCi0JICogICAgICAgICAgICB2YXJpYWJsZSBuYW1lLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBpdCBkb2VzLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHZhcmlhYmxlX2V4aXN0cyhRTmFtZSB2YXIpIHsKLQkJTWFwIHNjb3BlID0gY3VycmVudF9zY29wZSgpOwotCi0JCXJldHVybiBzY29wZS5jb250YWluc0tleSh2YXIpOwotCX0KLQotCS8qKgotCSAqIGNoZWNrcyB0byBzZWUgaWYgdmFyaWFibGUgaXMgaW4gc2NvcGUKLQkgKiAKLQkgKiBAcGFyYW0gdmFyCi0JICogICAgICAgICAgICB2YXJpYWJsZSBuYW1lLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB2YXJpYWJsZSBpcyBpbiBjdXJyZW50IG9yIGFib3ZlIHNjb3BlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHZhcmlhYmxlX2luX3Njb3BlKFFOYW1lIHZhcikgewotCQkvLyBvcmRlciBkb2Vzbid0IG1hdHRlci4uCi0JCWZvciAoSXRlcmF0b3IgaSA9IF9zY29wZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlNYXAgc2NvcGUgPSAoTWFwKSBpLm5leHQoKTsKLQotCQkJaWYgKHNjb3BlLmNvbnRhaW5zS2V5KHZhcikpCi0JCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIEFkZHMgYSB2YXJpYWJsZSB0byBjdXJyZW50IHNjb3BlLgotCSAqIAotCSAqIHVzZWQgZm9yIHN0YXRpYyBjaGVja2luZy4uLi4gaS5lLiBwcmVzZW5jZSBvZiB2YXJpYWJsZXMKLQkgKiAKLQkgKiBAcGFyYW0gdmFyCi0JICogICAgICAgICAgICB2YXJpYWJsZSBuYW1lIHRvIGFkZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRfdmFyaWFibGUoUU5hbWUgdmFyKSB7Ci0JCXNldF92YXJpYWJsZSh2YXIsIG51bGwpOwotCX0KLQotCS8vIG92ZXJ3cml0ZXMsIG9yIGNyZWF0ZXMKLQlwcm90ZWN0ZWQgdm9pZCBzZXRfdmFyaWFibGUoUU5hbWUgdmFyLCBBbnlUeXBlIHZhbCkgewotCQlNYXAgc2NvcGUgPSBjdXJyZW50X3Njb3BlKCk7Ci0KLQkJc2NvcGUucHV0KHZhciwgdmFsKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWxldGVzIGEgdmFyaWFibGUgZnJvbSBjdXJyZW50IHNjb3BlLgotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUgdG8gZGVsZXRlLgotCSAqIEByZXR1cm4gZmFsc2UgaWYgdmFyaWFibGUgZG9lc24ndCBleGlzdC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBkZWxfdmFyaWFibGUoUU5hbWUgdmFyKSB7Ci0JCWlmICghdmFyaWFibGVfZXhpc3RzKHZhcikpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJTWFwIHNjb3BlID0gY3VycmVudF9zY29wZSgpOwotCQlpZiAoc2NvcGUucmVtb3ZlKHZhcikgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIHRydWU7Ci0KLQl9Ci0KLQkvLyByZXR1cm4gbnVsbCBpZiAibm90IGZvdW5kIgotCXByb3RlY3RlZCBBbnlUeXBlIGdldF92YXIoUU5hbWUgdmFyKSB7Ci0JCS8vIGdvIHRocm91Z2ggdGhlIHN0YWNrIGluIHJldmVyc2Ugb3JkZXIuLi4gcmV2ZXJzZSBpdGVyYXRvcnMKLQkJLy8gd291bGQgYmUgbmljZSBoZXJlLi4uCi0KLQkJaW50IHBvcyA9IF9zY29wZXMuc2l6ZSgpOwotCQl3aGlsZSAoLS1wb3MgPj0gMCkgewotCQkJTWFwIHNjb3BlID0gKE1hcCkgX3Njb3Blcy5nZXQocG9zKTsKLQotCQkJLy8gZ290Y2hhCi0JCQlpZiAoc2NvcGUuY29udGFpbnNLZXkodmFyKSkgewotCQkJCXJldHVybiAoQW55VHlwZSkgc2NvcGUuZ2V0KHZhcik7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBEZWJ1ZyBmdW5jdGlvbiB3aGljaCB3aWxsIHByaW50IGN1cnJlbnQgdmFyaWFibGUgc2NvcGVzIGFuZCBpbmZvLgotCSAqLwotCS8vIGRlYnVnIGZ1bmN0aW9ucwotCXB1YmxpYyB2b2lkIGRlYnVnX3ByaW50X3ZhcnMoKSB7Ci0JCWludCBsZXZlbCA9IDA7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gX3Njb3Blcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU1hcCBzY29wZSA9IChNYXApIGkubmV4dCgpOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNjb3BlIGxldmVsICIgKyBsZXZlbCk7Ci0vLwkJCXNjb3BlLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLQkJCWZvciAoSXRlcmF0b3IgaiA9IHNjb3BlLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KSB7Ci0JCQkJUU5hbWUgdmFybmFtZSA9IChRTmFtZSkgai5uZXh0KCk7Ci0KLQkJCQlBbnlUeXBlIHZhbCA9IChBbnlUeXBlKSBzY29wZS5nZXQodmFybmFtZSk7Ci0KLQkJCQlTdHJpbmcgc3RyaW5nX3ZhbCA9ICJudWxsIjsKLQotCQkJCWlmICh2YWwgIT0gbnVsbCkKLQkJCQkJc3RyaW5nX3ZhbCA9IHZhbC5zdHJpbmdfdmFsdWUoKTsKLQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVmFybmFtZTogIiArIHZhcm5hbWUuc3RyaW5nKCkKLQkJCQkJCSsgIiBleHBhbmRlZD0iICsgdmFybmFtZS5leHBhbmRlZCgpICsgIiBWYWx1ZTogIgotCQkJCQkJKyBzdHJpbmdfdmFsKTsKLQotCQkJfQotCi0JCQlsZXZlbCsrOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBCYXNlIFVSSSBmb3IgdGhlIHN0YXRpYyBjb250ZXh0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9iYXNlX3VyaShTdHJpbmcgYmFzZXVyaSkgewotCQlfYmFzZV91cmkgPSBuZXcgWFNBbnlVUkkoYmFzZXVyaSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0X2RvY3VtZW50cyhNYXAgX2RvY3VtZW50cykgewotCQl0aGlzLl9kb2N1bWVudHMgPSBfZG9jdW1lbnRzOwotCX0KLQotCXB1YmxpYyBNYXAgZ2V0X2RvY3VtZW50cygpIHsKLQkJcmV0dXJuIF9kb2N1bWVudHM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZXNjZW5kYW50QXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZXNjZW5kYW50QXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2VhMmVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVzY2VuZGFudEF4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBUaGUgZGVzY2VuZGFudCBheGlzIGNvbnRhaW5zIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgY29udGV4dCBub2RlCi0gKi8KLXB1YmxpYyBjbGFzcyBEZXNjZW5kYW50QXhpcyBleHRlbmRzIENoaWxkQXhpcyB7Ci0KLQkvKioKLQkgKiBVc2luZyB0aGUgY29udGV4dCBub2RlIHJldHJpZXZlIHRoZSBkZXNjZW5kYW50cyBvZiB0aGlzIG5vZGUKLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuCi0JICogQHJldHVybiBUaGUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbnRleHQgbm9kZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaXRlcmF0ZShOb2RlVHlwZSBub2RlLCBEeW5hbWljQ29udGV4dCBkYykgewotCQkvLyBnZXQgdGhlIGNoaWxkcmVuCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gc3VwZXIuaXRlcmF0ZShub2RlLCBkYyk7Ci0KLQkJQXJyYXlMaXN0IGRlc2NlbmRhbnRzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCS8vIGdldCBkZXNjZW5kYW50cyBvZiBhbGwgY2hpbGRyZW4KLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBuID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQotCQkJZGVzY2VuZGFudHMuYWRkKGl0ZXJhdGUobiwgZGMpKTsKLQkJfQotCi0JCS8vIGFkZCBkZXNjZW5kYW50cyB0byByZXN1bHQKLQkJZm9yIChJdGVyYXRvciBpID0gZGVzY2VuZGFudHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBkZXNjID0gKFJlc3VsdFNlcXVlbmNlKSBpLm5leHQoKTsKLQotCQkJcnMuY29uY2F0KGRlc2MpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZXNjZW5kYW50T3JTZWxmQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZXNjZW5kYW50T3JTZWxmQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmMwMjQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVzY2VuZGFudE9yU2VsZkF4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBUaGUgZGVzY2VuZGFudC1vci1zZWxmIGF4aXMgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSBhbmQgdGhlIGRlc2NlbmRhbnRzIG9mCi0gKiB0aGUgY29udGV4dCBub2RlLgotICovCi0vLyBtdWx0aXBsZSBpbmhlcmV0YW5jZSBtaWdodCBiZSBjb29sIGhlcmUgPUQKLXB1YmxpYyBjbGFzcyBEZXNjZW5kYW50T3JTZWxmQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbnRleHQgbm9kZSBhbmQgdGhlIGNvbnRleHQgbm9kZQotCSAqIGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuCi0JICogQHJldHVybiBUaGUgY29udGV4dCBub2RlIGFuZCBpdHMgZGVzY2VuZGFudHMuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGFkZCBzZWxmCi0JCXJzLmFkZChub2RlKTsKLQotCQkvLyBhZGQgZGVzY2VuZGFudHMKLQkJRGVzY2VuZGFudEF4aXMgZGEgPSBuZXcgRGVzY2VuZGFudEF4aXMoKTsKLQkJUmVzdWx0U2VxdWVuY2UgZGVzYyA9IGRhLml0ZXJhdGUobm9kZSwgZGMpOwotCQlycy5jb25jYXQoZGVzYyk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2N1cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2N1cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzgwNjllLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9jdXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTkzOCAtIGhhbmRsZSBtaXNzaW5nIGZvY3VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogc2V0IHRoZSBmb2N1cyBmcm9tIGEgcmVzdWx0IHNlcXVlbmNlCi0gKi8KLXB1YmxpYyBjbGFzcyBGb2N1cyB7Ci0JcHJpdmF0ZSBpbnQgX2NwOyAvLyBjb250ZXh0IHBvc2l0aW9uCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBfcnM7IC8vIGFsbCBpdGVtcyBpbiBjb250ZXh0Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBfcnMgdG8gcnMgYW5kIGNvbnRleHQgcG9zaXRpb24gdG8gMS4KLQkgKiAKLQkgKiBAcGFyYW0gcnMKLQkgKiAgICAgICAgICAgIGlzIGEgUmVzdWx0U2VxdWVuY2UgYW5kIGlzIHNldCB0byBfcnMuCi0JICovCi0JcHVibGljIEZvY3VzKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCV9ycyA9IHJzOwotCQlfY3AgPSAxOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBwcmV2aW91cyBpdGVtIGZyb20gY3VycmVudCBjb250ZXh0IHBvc2l0aW9uLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGl0ZW0gZnJvbSBfcnMsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gY29udGV4dCBpdGVtLgotCSAqLwotCXB1YmxpYyBBbnlUeXBlIGNvbnRleHRfaXRlbSgpIHsKLQkJLy8gaWRleGVzIHN0YXJ0IGF0IDAKLQkJaWYgKF9jcCA+IF9ycy5zaXplKCkpIHJldHVybiBudWxsOwotCQlyZXR1cm4gX3JzLmdldChfY3AgLSAxKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVja3MgdG8gc2VlIGlmIHBvc3NpYmxlIHRvIGFkdmFuY2UgcnMuCi0JICogCi0JICogQHJldHVybiB0aGUgYm9vbGVhbi4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBhZHZhbmNlX2NwKCkgewotCQlpbnQgc2l6ZTsKLQotCQkvLyBjaGVjayBpZiB3ZSBjYW4gYWR2YW5jZQotCQlzaXplID0gX3JzLnNpemUoKTsKLQkJaWYgKF9jcCA9PSBzaXplKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCV9jcCsrOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiByZXR1cm5zIGFuIGludGVnZXIgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0JICogCi0JICogQHJldHVybiB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBycy4KLQkgKi8KLQlwdWJsaWMgaW50IHBvc2l0aW9uKCkgewotCQlyZXR1cm4gX2NwOwotCX0KLQotCS8qKgotCSAqIHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcnMuCi0JICogCi0JICogQHJldHVybiB0aGUgc2l6ZSBvZiBycy4KLQkgKi8KLQlwdWJsaWMgaW50IGxhc3QoKSB7Ci0JCXJldHVybiBfcnMuc2l6ZSgpOwotCX0KLQotCS8qKgotCSAqIHNldHMgdGhlIHBvc2l0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBwCi0JICogICAgICAgICAgICBpcyB0aGUgcG9zaXRpb24gdGhhdCBpcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3Bvc2l0aW9uKGludCBwKSB7Ci0JCV9jcCA9IHA7IC8vIFhYWCBubyBjaGVja3MKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0ZvbGxvd2luZ0F4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9sbG93aW5nQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWI0YjM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9sbG93aW5nQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogdGhlIGZvbGxvd2luZyBheGlzIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUncyBmb2xsb3dpbmcgc2libGluZ3MsIHRob3NlCi0gKiBjaGlsZHJlbiBvZiB0aGUgY29udGV4dCBub2RlJ3MgcGFyZW50IHRoYXQgb2NjdXIgYWZ0ZXIgdGhlIGNvbnRleHQgbm9kZSBpbgotICogZG9jdW1lbnQgb3JkZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBGb2xsb3dpbmdBeGlzIGV4dGVuZHMgRm9yd2FyZEF4aXMgewotCi0JLyoqCi0JICogUmV0dXJuIHRoZSByZXN1bHQgb2YgRm9sbG93aW5nQXhpcyBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBGb2xsb3dpbmdBeGlzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gWFhYIHNob3VsZCBiZSByb290Li4uIG5vdCBwYXJlbnQhISEgcmVhZCB0aGUgc3BlYy4uLi4gQlVHIEJVRwotCQkvLyBCVUcgTEFNRSBMQU1FLi4uLgotCi0JCS8vIGdldCB0aGUgcGFyZW50Ci0JCU5vZGVUeXBlIHBhcmVudCA9IG51bGw7Ci0JCVBhcmVudEF4aXMgcGEgPSBuZXcgUGFyZW50QXhpcygpOwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IHBhLml0ZXJhdGUobm9kZSwgZGMpOwotCQlpZiAocnMuc2l6ZSgpID09IDEpCi0JCQlwYXJlbnQgPSAoTm9kZVR5cGUpIHJzLmdldCgwKTsKLQotCQkvLyBnZXQgdGhlIGZvbGxvd2luZyBzaWJsaW5ncyBvZiB0aGlzIG5vZGUsIGFuZCBhZGQgdGhlbQotCQlGb2xsb3dpbmdTaWJsaW5nQXhpcyBmc2EgPSBuZXcgRm9sbG93aW5nU2libGluZ0F4aXMoKTsKLQkJcnMgPSBmc2EuaXRlcmF0ZShub2RlLCBkYyk7Ci0JCXJlc3VsdC5jb25jYXQocnMpOwotCi0JCS8vIGZvciBlYWNoIHNpYmxpbmcsIGdldCBhbGwgaXRzIGRlc2NlbmRhbnRzCi0JCURlc2NlbmRhbnRBeGlzIGRhID0gbmV3IERlc2NlbmRhbnRBeGlzKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJUmVzdWx0U2VxdWVuY2UgZGVzYyA9IGRhLml0ZXJhdGUoKE5vZGVUeXBlKSBpLm5leHQoKSwgZGMpOwotCi0JCQkvLyBhZGQgYWxsIGRlc2NlbmRhbnRzIHRvIHRoZSByZXN1bHQKLQkJCXJlc3VsdC5jb25jYXQoZGVzYyk7Ci0JCX0KLQotCQkvLyBpZiB3ZSBnb3QgYSBwYXJlbnQsIHdlIGdvdHRhIHJlcGVhdCB0aGUgc3RvcnkgZm9yIHRoZSBwYXJlbnQKLQkJLy8gYW5kIGFkZCB0aGUgcmVzdWx0cwotCQlpZiAocGFyZW50ICE9IG51bGwpIHsKLQkJCXJzID0gaXRlcmF0ZShwYXJlbnQsIGRjKTsKLQkJCXJlc3VsdC5jb25jYXQocnMpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2xsb3dpbmdTaWJsaW5nQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2xsb3dpbmdTaWJsaW5nQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGNjNzhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9sbG93aW5nU2libGluZ0F4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBUaGUgZm9sbG93aW5nLXNpYmxpbmcgYXhpcyBjb250YWlucyB0aGUgY29udGV4dCBub2RlJ3MgZm9sbG93aW5nIHNpYmxpbmdzLAotICogdGhvc2UgY2hpbGRyZW4gb2YgdGhlIGNvbnRleHQgbm9kZSdzIHBhcmVudCB0aGF0IG9jY3VyIGFmdGVyIHRoZSBjb250ZXh0IG5vZGUKLSAqIGluIGRvY3VtZW50IG9yZGVyOyBpZiB0aGUgY29udGV4dCBub2RlIGlzIGFuIGF0dHJpYnV0ZSBub2Rlb3IgbmFtZXNwYWNlIG5vZGUsCi0gKiB0aGUgZm9sbG93aW5nLXNpYmxpbmcgYXhpcyBpcyBlbXB0eS4KLSAqLwotcHVibGljIGNsYXNzIEZvbGxvd2luZ1NpYmxpbmdBeGlzIGV4dGVuZHMgRm9yd2FyZEF4aXMgewotCi0JLyoqCi0JICogUmV0dXJuIHRoZSByZXN1bHQgb2YgRm9sbG93aW5nU2libGluZ0F4aXMgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgdHlwZSBvZiBub2RlLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dC4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgRm9sbG93aW5nU2libGluZ0F4aXMuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJLy8gWFhYIGNoZWNrIGZvciBhdHRyaWJ1dGUgLyBuYW1lc3BhY2Ugbm9kZS4uLiBpZiBzbyByZXR1cm4KLQkJLy8gZW1wdHkgc2VxdWVuY2UKLQotCQkvLyBnZXQgdGhlIHBhcmVudAotCQlQYXJlbnRBeGlzIHBhID0gbmV3IFBhcmVudEF4aXMoKTsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBwYS5pdGVyYXRlKG5vZGUsIGRjKTsKLQotCQkvLyBYWFg6IGlmIG5vIHBhcmVudCwgb3V0IG9mIGx1Y2sgaSBndWVzcwotCQlpZiAocnMuc2l6ZSgpID09IDApCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gZ2V0IHRoZSBjaGlsZHJlbiBvZiB0aGUgcGFyZW50IFtzaWJsaW5nc10KLQkJQ2hpbGRBeGlzIGNhID0gbmV3IENoaWxkQXhpcygpOwotCQlOb2RlVHlwZSBwYXJlbnQgPSAoTm9kZVR5cGUpIHJzLmdldCgwKTsKLQkJcnMgPSBjYS5pdGVyYXRlKHBhcmVudCwgZGMpOwotCi0JCS8vIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzCi0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJTm9kZVR5cGUgbiA9IChOb2RlVHlwZSkgaS5uZXh0KCk7Ci0KLQkJCS8vIGlmIHdlIGhhdmVuJ3QgZm91bmQgdGhlIG5vZGUgeWV0LCByZW1vdmUgZWxlbWVudHMKLQkJCS8vIFtwcmVjaWRpbmcgc2libGluZ3NdCi0JCQkvLyBub3RlOiBpZiBub2RlIGlzIGZpcnN0Li4uIGl0cyBvay4uLiBjdXogd2UgZG9uJ3QKLQkJCS8vIGluY2x1ZGUgbm9kZS4uLgotCQkJaS5yZW1vdmUoKTsKLQotCQkJLy8gY2hlY2sgcmVmZXJlbmNlIG9mIERPTSBvYmplY3QuLi4gc2hvdWxkIGJlIGNvcnJlY3QgPyEKLQkJCS8vIGR1bm5vLi4uIFhYWAotCQkJaWYgKG4ubm9kZV92YWx1ZSgpID09IG5vZGUubm9kZV92YWx1ZSgpKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb3J3YXJkQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb3J3YXJkQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTViY2U4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9yd2FyZEF4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIEFuIGF4aXMgdGhhdCBvbmx5IGV2ZXIgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSBvciBub2RlcyB0aGF0IGFyZSBhZnRlciB0aGUKLSAqIGNvbnRleHQgbm9kZSBpbiBkb2N1bWVudCBvcmRlciBpcyBhIGZvcndhcmQgYXhpcy4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEZvcndhcmRBeGlzIGltcGxlbWVudHMgQXhpcyB7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIG5ldyBFbGVtZW50IFR5cGUKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBlbGVtZW50IHR5cGUuCi0JICovCi0JLy8gImRlZmF1bHQiIHR5cGUgaXMgZWxlbWVudC4uLi4KLQkvLyByZW1lbWJlciB0byBvdmVycmlkZSBmb3IgYXR0cmlidXRlIGFuZCBuYW1lc3BjZSBheGlzIHRobyEKLQlwdWJsaWMgTm9kZVR5cGUgcHJpbmNpcGFsX25vZGVfa2luZCgpIHsKLQkJcmV0dXJuIG5ldyBFbGVtZW50VHlwZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvSkZsZXhFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9KRmxleEVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMDFmMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9KRmxleEVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKgotICogRXJyb3IgY2F1c2VkIGJ5IEpGbGV4Ci0gKi8KLXB1YmxpYyBjbGFzcyBKRmxleEVycm9yIGV4dGVuZHMgWFBhdGhFcnJvciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNzE1NDc4NDQ4MjQxNzgzMzI5N0w7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgSkZsZXggZXJyb3IuCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBKRmxleEVycm9yKFN0cmluZyByZWFzb24pIHsKLQkJc3VwZXIocmVhc29uKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL05vcm1hbGl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvTm9ybWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmMwNTQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvTm9ybWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBOb3JtYWxpemVyIHRoYXQgdXNlcyBYUGF0aFZpc2l0b3IuCi0gKi8KLS8vIFhYWCBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBhbnltb3JlIQotcHVibGljIGNsYXNzIE5vcm1hbGl6ZXIgaW1wbGVtZW50cyBYUGF0aFZpc2l0b3IgewotCi0JcHJpdmF0ZSBTdGF0aWNDb250ZXh0IF9zYzsKLQotCS8qKgotCSAqIFN0YXRpYyBDb250ZXh0IGlzIHNldCB0byBzYwotCSAqIAotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgaXMgdGhlIFN0YXRpY0NvbnRleHQuCi0JICovCi0JcHVibGljIE5vcm1hbGl6ZXIoU3RhdGljQ29udGV4dCBzYykgewotCQlfc2MgPSBzYzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHRyZWUKLQkgKiAKLQkgKiBAcGFyYW0geHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSB4cGF0aCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gdGhlIHhwYXRoIGV4cHJlc3Npb25zLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoWFBhdGggeHApIHsKLQkJQ29sbGVjdGlvbiBleHBycyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSB4cC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUV4cHIgZSA9IChFeHByKSBpLm5leHQoKTsKLQotCQkJRXhwciBuID0gKEV4cHIpIGUuYWNjZXB0KHRoaXMpOwotCi0JCQlleHBycy5hZGQobik7Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhQYXRoKGV4cHJzKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRWYXJFeHByUGFpcnMoSXRlcmF0b3IgaSkgewotCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCVZhckV4cHJQYWlyIHBhaXIgPSAoVmFyRXhwclBhaXIpIGkubmV4dCgpOwotCi0JCQlRTmFtZSB2YXIgPSBwYWlyLnZhcm5hbWUoKTsKLQkJCUV4cHIgZSA9IHBhaXIuZXhwcigpOwotCi0JCQllLmFjY2VwdCh0aGlzKTsKLQkJfQotCX0KLQotCS8vIGRvZXMgYSBmb3IgYW5kIGEgcXVhbnRpZmllZCBleHByZXNzaW9uCi0JLy8gdGFrZXMgdGhlIGl0ZXJhdG9yIGZvciB2YXIgZXhwciBwYXJpcwotCXByaXZhdGUgdm9pZCBkb0ZvckV4cHIoSXRlcmF0b3IgaXRlciwgRXhwciBleHByKSB7Ci0JCUNvbGxlY3Rpb24gdmFycyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQkvLyBnbyB0aHJvdWdoIGV4cHJlc3Npb24gYW5kIGNhY2hlIHZhcmlhYmxlcwotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCVZhckV4cHJQYWlyIHBhaXIgPSAoVmFyRXhwclBhaXIpIGl0ZXIubmV4dCgpOwotCi0JCQlRTmFtZSB2YXIgPSBwYWlyLnZhcm5hbWUoKTsKLQkJCUV4cHIgZSA9IHBhaXIuZXhwcigpOwotCi0JCQkvLyBYWFggdGhpcyBpcyB3cm9uZyEKLQkJCS8vIG5lZWQgdG8gZGVmaW5lIG5ldyBzY29wZSwgYW5kIHJlZmVyZW5jZSAiaW5uZXIgc2NvcGUiCi0JCQkvLyBbc2hhZG93IG91dGVyIHZhcnNdCi0JCQkvKgotCQkJICogaWYoX3NjLnZhcmlhYmxlX2V4aXN0cyh2YXIpKSByZXBvcnRfZXJyb3IobmV3Ci0JCQkgKiBTdGF0aWNOYW1lRXJyb3IoIlZhcmlhYmxlICIgKyB2YXIuc3RyaW5nKCkgKwotCQkJICogIiBhbHJlYWR5IGRlZmluZWQiKSk7Ci0JCQkgKi8KLQkJCS8vIG9rIHdlIGNhbiBjaGVhdCBoZXJlIGN1eiB3ZSBvbmx5IGNhcmUgYWJvdXQgdmFyaWFibGUKLQkJCS8vICJwcmVzZW5jZSIgbm90IGl0cyBzcGVjaWZpYyBpbnN0YW5jZSAvIHZhbHVlIHNvIHdlCi0JCQkvLyBjYW4gZmFrZWx5IHNoYWRvdyB3aXRob3V0IGNyZWF0aW5nIGV4cGxpY2l0IHNjb3BlcwotCQkJLy8gaWYgdmFyaWFibGUgYWxyZWFkeSBleGlzdHMuLi4uIHRoZW4gbGVhdmUgaXQgdGhlcmUuLi4KLQkJCS8vIFt3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2UgYW5kIGRlbGV0ZQotCQkJLy8gaXQgYXQgdGhlIGVuZF0KLQkJCS8vIHdlIG9ubHkgbmVlZCB0byBpZiB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdAotCQkJLy8gWFhYOiBpIGZpbmsgdGhpcyBpcyBhbGwgd3JvbmcKLQkJCXZhcnMuYWRkKHZhcik7Ci0KLQkJCWUuYWNjZXB0KHRoaXMpOwotCQl9Ci0KLQkJLy8gYWRkIHZhcmlhYmxlcyB0byBzY29wZQotCQlmb3IgKEl0ZXJhdG9yIGkgPSB2YXJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJUU5hbWUgdmFyID0gKFFOYW1lKSBpLm5leHQoKTsKLQkJfQotCi0JCS8vIGRvIHRoZSBib3VuZGVkIGV4cHJlc3Npb24KLQkJZXhwci5hY2NlcHQodGhpcyk7Ci0KLQkJLy8gcmVtb3ZlIHZhcmlhYmxlcwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBmZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBGb3IgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGZleCBleHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRm9yRXhwciBmZXgpIHsKLQkJRm9yRXhwciBsYXN0ID0gZmV4OwotCQlFeHByIHJldCA9IGZleC5leHByKCk7Ci0JCWludCBkZXB0aCA9IDA7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gZmV4Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJVmFyRXhwclBhaXIgdmUgPSAoVmFyRXhwclBhaXIpIGkubmV4dCgpOwotCi0JCQkvLyBvayB3ZSBnb3QgbmVzdGVkIGZvcnMuLi4KLQkJCWlmIChkZXB0aCA+IDApIHsKLQkJCQlDb2xsZWN0aW9uIHBhaXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCXBhaXJzLmFkZCh2ZSk7Ci0KLQkJCQlGb3JFeHByIGZlID0gbmV3IEZvckV4cHIocGFpcnMsIHJldCk7Ci0JCQkJbGFzdC5zZXRfZXhwcihmZSk7Ci0KLQkJCQlsYXN0ID0gZmU7Ci0JCQl9Ci0KLQkJCWRlcHRoKys7Ci0JCX0KLQotCQkvLyBub3JtYWxpemUgcmV0dXJuIHZhbHVlLCBhbmQgc2V0IGl0IHRvIHRoZSBsYXN0IGZvciBleHByCi0JCXJldC5hY2NlcHQodGhpcyk7Ci0KLQkJLy8gZ2V0IHJpZCBvZiB0aGUgcGFpcnMgaW4gdGhlIHBhcmVudCAob3JpZ2luYWwpIGZvcgotCQlpZiAoZGVwdGggPiAxKQotCQkJZmV4LnRydW5jYXRlX3BhaXJzKCk7Ci0KLQkJcmV0dXJuIGZleDsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcWV4Ci0JICogICAgICAgICAgICBpcyB0aGUgUXVhbnRpZmllZCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gcWV4IGV4cHJlc3Npb24uCi0JICovCi0JLy8gWFhYOiBjb2RlIGR1cGxpY2F0aW9uCi0JcHVibGljIE9iamVjdCB2aXNpdChRdWFudGlmaWVkRXhwciBxZXgpIHsKLQkJUXVhbnRpZmllZEV4cHIgbGFzdCA9IHFleDsKLQkJRXhwciByZXQgPSBxZXguZXhwcigpOwotCQlpbnQgZGVwdGggPSAwOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IHFleC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCVZhckV4cHJQYWlyIHZlID0gKFZhckV4cHJQYWlyKSBpLm5leHQoKTsKLQotCQkJLy8gb2sgd2UgZ290IG5lc3RlZCBmb3JzLi4uCi0JCQlpZiAoZGVwdGggPiAwKSB7Ci0JCQkJQ29sbGVjdGlvbiBwYWlycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlwYWlycy5hZGQodmUpOwotCi0JCQkJUXVhbnRpZmllZEV4cHIgcWUgPSBuZXcgUXVhbnRpZmllZEV4cHIocWV4LnR5cGUoKSwgcGFpcnMsIHJldCk7Ci0JCQkJbGFzdC5zZXRfZXhwcihxZSk7Ci0KLQkJCQlsYXN0ID0gcWU7Ci0JCQl9Ci0KLQkJCWRlcHRoKys7Ci0JCX0KLQotCQkvLyBub3JtYWxpemUgcmV0dXJuIHZhbHVlLCBhbmQgc2V0IGl0IHRvIHRoZSBsYXN0IGZvciBleHByCi0JCXJldC5hY2NlcHQodGhpcyk7Ci0KLQkJLy8gZ2V0IHJpZCBvZiB0aGUgcGFpcnMgaW4gdGhlIHBhcmVudCAob3JpZ2luYWwpIGZvcgotCQlpZiAoZGVwdGggPiAxKQotCQkJcWV4LnRydW5jYXRlX3BhaXJzKCk7Ci0KLQkJcmV0dXJuIHFleDsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludEV4cHJzKEl0ZXJhdG9yIGkpIHsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlFeHByIGUgPSAoRXhwcikgaS5uZXh0KCk7Ci0KLQkJCWUuYWNjZXB0KHRoaXMpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGlmZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSAnaWYnIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBpZmV4IGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJZkV4cHIgaWZleCkgewotCi0JCXByaW50RXhwcnMoaWZleC5pdGVyYXRvcigpKTsKLQotCQlpZmV4LnRoZW5fY2xhdXNlKCkuYWNjZXB0KHRoaXMpOwotCi0JCWlmZXguZWxzZV9jbGF1c2UoKS5hY2NlcHQodGhpcyk7Ci0KLQkJcmV0dXJuIGlmZXg7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIG9mIGJpbmFyeSBleHByZXNzaW9uLgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgYmluYXJ5IGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIHZvaWQgcHJpbnRCaW5FeHByKFN0cmluZyBuYW1lLCBCaW5FeHByIGUpIHsKLQkJZS5sZWZ0KCkuYWNjZXB0KHRoaXMpOwotCQllLnJpZ2h0KCkuYWNjZXB0KHRoaXMpOwotCX0KLQotCXByaXZhdGUgQmluRXhwciBtYWtlX2xvZ2ljX2V4cHIoQmluRXhwciBlKSB7Ci0JCUNvbGxlY3Rpb24gbm9ybWFsaXplZCA9IG5vcm1hbGl6ZV9iaW5fYXJncyhlKTsKLQotCQlYUGF0aE5vZGUgbm9yX2FycltdID0gbmV3IFhQYXRoTm9kZVsyXTsKLQkJaW50IGogPSAwOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IG5vcm1hbGl6ZWQuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlub3JfYXJyW2pdID0gKFhQYXRoTm9kZSkgaS5uZXh0KCk7Ci0JCQlqKys7Ci0JCX0KLQotCQlDb2xsZWN0aW9uIGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFyZ3MuYWRkKG5vcl9hcnJbMF0pOwotCQllLnNldF9sZWZ0KG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJmbiIsICJib29sZWFuIiwKLQkJCQlGbkZ1bmN0aW9uTGlicmFyeS5YUEFUSF9GVU5DVElPTlNfTlMpLCBhcmdzKSk7Ci0KLQkJYXJncy5jbGVhcigpOwotCQlhcmdzLmFkZChub3JfYXJyWzFdKTsKLQkJZS5zZXRfcmlnaHQobWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoImZuIiwgImJvb2xlYW4iLAotCQkJCUZuRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX0ZVTkNUSU9OU19OUyksIGFyZ3MpKTsKLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gb3JleAotCSAqICAgICAgICAgICAgaXMgdGhlICdvcicgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG1ha2UgbG9naWMgZXhwcihvcmV4KS4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE9yRXhwciBvcmV4KSB7Ci0JCXJldHVybiBtYWtlX2xvZ2ljX2V4cHIob3JleCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGFuZGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgJ2FuZCcgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG1ha2UgbG9naWMgZXhwcihhbmRleCkuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBbmRFeHByIGFuZGV4KSB7Ci0JCXJldHVybiBtYWtlX2xvZ2ljX2V4cHIoYW5kZXgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbXBleAotCSAqICAgICAgICAgICAgaXMgdGhlIGNvbXBhcmUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGNtcGV4LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ21wRXhwciBjbXBleCkgewotCQlzd2l0Y2ggKGNtcGV4LnR5cGUoKSkgewotCQljYXNlIENtcEV4cHIuRVE6Ci0JCQlyZXR1cm4gbWFrZV9DbXBPcChjbXBleCwgbmV3IFFOYW1lKCJmcyIsICJlcSIsCi0JCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0KLQkJY2FzZSBDbXBFeHByLk5FOgotCQkJcmV0dXJuIG1ha2VfQ21wT3AoY21wZXgsIG5ldyBRTmFtZSgiZnMiLCAibmUiLAotCQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCi0JCWNhc2UgQ21wRXhwci5MVDoKLQkJCXJldHVybiBtYWtlX0NtcE9wKGNtcGV4LCBuZXcgUU5hbWUoImZzIiwgImx0IiwKLQkJCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQotCQljYXNlIENtcEV4cHIuR1Q6Ci0JCQlyZXR1cm4gbWFrZV9DbXBPcChjbXBleCwgbmV3IFFOYW1lKCJmcyIsICJndCIsCi0JCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0KLQkJY2FzZSBDbXBFeHByLkxFOgotCQkJcmV0dXJuIG1ha2VfQ21wT3AoY21wZXgsIG5ldyBRTmFtZSgiZnMiLCAibGUiLAotCQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCi0JCWNhc2UgQ21wRXhwci5HRToKLQkJCXJldHVybiBtYWtlX0NtcE9wKGNtcGV4LCBuZXcgUU5hbWUoImZzIiwgImdlIiwKLQkJCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQotCQkJLy8gWFhYIGRvbid0IGhhdmUgZnVuY3RzIQotCQljYXNlIENtcEV4cHIuSVM6Ci0JCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoIm9wIiwgIm5vZGUtZXF1YWwiKSwKLQkJCQkJbm9ybWFsaXplX2Jpbl9hcmdzKGNtcGV4KSk7Ci0KLQkJY2FzZSBDbXBFeHByLkxFU1NfTEVTUzoKLQkJCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgib3AiLCAibm9kZS1iZWZvcmUiKSwKLQkJCQkJbm9ybWFsaXplX2Jpbl9hcmdzKGNtcGV4KSk7Ci0KLQkJY2FzZSBDbXBFeHByLkdSRUFURVJfR1JFQVRFUjoKLQkJCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgib3AiLCAibm9kZS1hZnRlciIpLAotCQkJCQlub3JtYWxpemVfYmluX2FyZ3MoY21wZXgpKTsKLQkJfQotCi0JCXByaW50QmluRXhwcigiQ01QIiArIGNtcGV4LnR5cGUoKSwgY21wZXgpOwotCQlyZXR1cm4gY21wZXg7Ci0JfQotCi0JcHJpdmF0ZSBDb2xsZWN0aW9uIG5vcm1hbGl6ZV9iaW5fYXJncyhCaW5FeHByIGUpIHsKLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCVhQYXRoTm9kZSBsZWZ0ID0gKFhQYXRoTm9kZSkgZS5sZWZ0KCkuYWNjZXB0KHRoaXMpOwotCQlYUGF0aE5vZGUgcmlnaHQgPSAoWFBhdGhOb2RlKSBlLnJpZ2h0KCkuYWNjZXB0KHRoaXMpOwotCi0JCWFyZ3MuYWRkKGxlZnQpOwotCQlhcmdzLmFkZChyaWdodCk7Ci0KLQkJcmV0dXJuIGFyZ3M7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHJleAotCSAqICAgICAgICAgICAgaXMgdGhlIHJhbmdlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFJhbmdlRXhwciByZXgpIHsKLQkJQ29sbGVjdGlvbiBhcmdzID0gbm9ybWFsaXplX2Jpbl9hcmdzKHJleCk7Ci0JCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgib3AiLCAidG8iLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSwgYXJncyk7Ci0JfQotCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV94cGF0aGV4cHIoUHJpbWFyeUV4cHIgcGV4KSB7Ci0JCUZpbHRlckV4cHIgZmUgPSBuZXcgRmlsdGVyRXhwcihwZXgsIG5ldyBBcnJheUxpc3QoKSk7Ci0JCXJldHVybiBuZXcgWFBhdGhFeHByKDAsIGZlKTsKLQl9Ci0KLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX2ludF9saXQoaW50IGkpIHsKLQkJSW50ZWdlckxpdGVyYWwgaWwgPSBuZXcgSW50ZWdlckxpdGVyYWwoQmlnSW50ZWdlci52YWx1ZU9mKGkpKTsKLQkJcmV0dXJuIG1ha2VfeHBhdGhleHByKGlsKTsKLQl9Ci0KLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX3N0cmluZ19saXQoU3RyaW5nIHMpIHsKLQkJU3RyaW5nTGl0ZXJhbCBzbCA9IG5ldyBTdHJpbmdMaXRlcmFsKHMpOwotCQlyZXR1cm4gbWFrZV94cGF0aGV4cHIoc2wpOwotCX0KLQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2VfY29udmVydF9vcGVyYW5kKFhQYXRoRXhwciBhcmcxLCBYUGF0aEV4cHIgYXJnMikgewotCQlDb2xsZWN0aW9uIGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFyZ3MuYWRkKGFyZzEpOwotCQlhcmdzLmFkZChhcmcyKTsKLQotCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoImZzIiwgImNvbnZlcnQtb3BlcmFuZCIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpLCBhcmdzKTsKLQl9Ci0KLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX2RvdWJsZV9saXQoZG91YmxlIGQpIHsKLQkJRG91YmxlTGl0ZXJhbCBkbCA9IG5ldyBEb3VibGVMaXRlcmFsKGQpOwotCQlyZXR1cm4gbWFrZV94cGF0aGV4cHIoZGwpOwotCX0KLQotCS8vIGZzOmZuYW1lKCBmczpjb252ZXJ0LW9wZXJhbmQoIGZuOmRhdGEoQVJHMSksIDEuMEUwICksCi0JLy8gZnM6Y29udmVydC1vcGVyYW5kKCBmbjpkYXRhKEFSRzIpLCAxLjBFMCApCi0JLy8gKQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2VfY29udmVydF9iaW5vcChCaW5FeHByIGUsIFhQYXRoRXhwciBjb252YXJnLAotCQkJUU5hbWUgbmFtZSkgewotCQlDb2xsZWN0aW9uIGFyZ3MgPSBub3JtYWxpemVfYmluX2FyZ3MoZSk7Ci0JCVhQYXRoRXhwciBhcmdzX2FycltdID0gbmV3IFhQYXRoRXhwclsyXTsKLQkJaW50IGogPSAwOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZ3MuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlhcmdzX2FycltqXSA9IChYUGF0aEV4cHIpIGkubmV4dCgpOwotCQkJaisrOwotCQl9Ci0KLQkJQ29sbGVjdGlvbiBhcmdzZm5hbWUgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCVhQYXRoRXhwciBhcmcgPSBtYWtlX2NvbnZlcnRfb3BlcmFuZChhcmdzX2FycltqXSwgY29udmFyZyk7Ci0JCQlhcmdzZm5hbWUuYWRkKGFyZyk7Ci0JCX0KLQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmFtZSwgYXJnc2ZuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX0FyaXRoT3AoQmluRXhwciBlLCBRTmFtZSBuYW1lKSB7Ci0JCXJldHVybiBtYWtlX2NvbnZlcnRfYmlub3AoZSwgbWFrZV9kb3VibGVfbGl0KDEuMCksIG5hbWUpOwotCX0KLQotCS8vIGZzOmZuYW1lKCBmczpjb252ZXJ0X29wZXJhbmQoIGZuOmRhdGEoQVJHMSksICJzdHJpbmciKSwKLQkvLyBmczpjb252ZXJ0X29wZXJhbmQoIGZuOmRhdGEoQVJHMiksICJzdHJpbmciKQotCS8vICkKLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX0NtcE9wKEJpbkV4cHIgZSwgUU5hbWUgbmFtZSkgewotCQlyZXR1cm4gbWFrZV9jb252ZXJ0X2Jpbm9wKGUsIG1ha2Vfc3RyaW5nX2xpdCgic3RyaW5nIiksIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBhZGRleAotCSAqICAgICAgICAgICAgaXMgdGhlIGFkZCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBZGRFeHByIGFkZGV4KSB7Ci0JCXJldHVybiBtYWtlX0FyaXRoT3AoYWRkZXgsIG5ldyBRTmFtZSgiZnMiLCAicGx1cyIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3ViZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzdWIgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3ViRXhwciBzdWJleCkgewotCQlyZXR1cm4gbWFrZV9Bcml0aE9wKHN1YmV4LCBuZXcgUU5hbWUoImZzIiwgIm1pbnVzIiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIG11bHRpcGx5IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE11bEV4cHIgbXVsZXgpIHsKLQkJcmV0dXJuIG1ha2VfQXJpdGhPcChtdWxleCwgbmV3IFFOYW1lKCJmcyIsICJ0aW1lcyIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkaXZpc2lvbiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEaXZFeHByIG11bGV4KSB7Ci0JCXJldHVybiBtYWtlX0FyaXRoT3AobXVsZXgsIG5ldyBRTmFtZSgiZnMiLCAiZGl2IiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIGludGVnZXIgZGl2aXNpb24gZXhwcmVzc2lvbiB0aGF0IGFsd2F5cyByZXR1cm5zIGFuCi0JICogICAgICAgICAgICBpbnRlZ2VyLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JLy8gWFhYOiBpbnRlZ2VyIGNhc3QhCi0JcHVibGljIE9iamVjdCB2aXNpdChJRGl2RXhwciBtdWxleCkgewotCQlyZXR1cm4gbWFrZV9Bcml0aE9wKG11bGV4LCBuZXcgUU5hbWUoImZzIiwgImlkaXYiLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgbW9kIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE1vZEV4cHIgbXVsZXgpIHsKLQkJcmV0dXJuIG1ha2VfQXJpdGhPcChtdWxleCwgbmV3IFFOYW1lKCJmcyIsICJtb2QiLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHVuZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSB1bmlvbiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChVbmlvbkV4cHIgdW5leCkgewotCQlDb2xsZWN0aW9uIGFyZ3MgPSBub3JtYWxpemVfYmluX2FyZ3ModW5leCk7Ci0JCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgib3AiLCAidW5pb24iLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSwgYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHBpcGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgcGlwZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQaXBlRXhwciBwaXBleCkgewotCQlDb2xsZWN0aW9uIGFyZ3MgPSBub3JtYWxpemVfYmluX2FyZ3MocGlwZXgpOwotCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoIm9wIiwgInVuaW9uIiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUyksIGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpZXhwcgotCSAqICAgICAgICAgICAgaXMgdGhlIGludGVyc2VjdCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlcnNlY3RFeHByIGlleHByKSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IG5vcm1hbGl6ZV9iaW5fYXJncyhpZXhwcik7Ci0JCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgib3AiLCAiaW50ZXJzZWN0IiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUyksIGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlZXhwcgotCSAqICAgICAgICAgICAgaXMgdGhlIGV4Y2VwdCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChFeGNlcHRFeHByIGVleHByKSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IG5vcm1hbGl6ZV9iaW5fYXJncyhlZXhwcik7Ci0JCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgib3AiLCAiZXhjZXB0IiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUyksIGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpb2V4cAotCSAqICAgICAgICAgICAgaXMgdGhlIGluc3RhbmNlIG9mIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIGlvZXhwLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW5zdE9mRXhwciBpb2V4cCkgewotCQlwcmludEJpbkV4cHIoIklOU1RBTkNFT0YiLCBpb2V4cCk7Ci0JCXJldHVybiBpb2V4cDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGFleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0cmVhdCBhcyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSB0YWV4cC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFRyZWF0QXNFeHByIHRhZXhwKSB7Ci0JCXByaW50QmluRXhwcigiVFJFQVRBUyIsIHRhZXhwKTsKLQkJcmV0dXJuIHRhZXhwOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgY2FzdGFibGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGNleHAuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDYXN0YWJsZUV4cHIgY2V4cCkgewotCQlwcmludEJpbkV4cHIoIkNBU1RBQkxFIiwgY2V4cCk7Ci0JCXJldHVybiBjZXhwOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgY2FzdCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gY2V4cC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENhc3RFeHByIGNleHApIHsKLQkJcHJpbnRCaW5FeHByKCJDQVNUIiwgY2V4cCk7Ci0JCXJldHVybiBjZXhwOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgbmFtZS4KLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIFVuIEV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIHZvaWQgcHJpbnRVbkV4cHIoU3RyaW5nIG5hbWUsIFVuRXhwciBlKSB7Ci0JCWUuYXJnKCkuYWNjZXB0KHRoaXMpOwotCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtaW51cyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbmV3IHN1YiBleHByZXNzaW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNaW51c0V4cHIgZSkgewotCQlTdWJFeHByIHNlID0gbmV3IFN1YkV4cHIobWFrZV9pbnRfbGl0KDApLCBlLmFyZygpKTsKLQkJcmV0dXJuIHNlLmFjY2VwdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHBsdXMgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG5ldyBhZGQgZXhwcmVzc2lvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGx1c0V4cHIgZSkgewotCQlBZGRFeHByIGFlID0gbmV3IEFkZEV4cHIobWFrZV9pbnRfbGl0KDApLCBlLmFyZygpKTsKLQotCQlyZXR1cm4gYWUuYWNjZXB0KHRoaXMpOwotCX0KLQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2VfZnVuY3Rpb24oUU5hbWUgbmFtZSwgQ29sbGVjdGlvbiBhcmdzKSB7Ci0KLQkJRnVuY3Rpb25DYWxsIGZjID0gbmV3IEZ1bmN0aW9uQ2FsbChuYW1lLCBhcmdzKTsKLQkJRmlsdGVyRXhwciBmZSA9IG5ldyBGaWx0ZXJFeHByKGZjLCBuZXcgQXJyYXlMaXN0KCkpOwotCQlyZXR1cm4gbmV3IFhQYXRoRXhwcigwLCBmZSk7Ci0KLQl9Ci0KLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX3Jvb3Rfc2VsZl9ub2RlKCkgewotCi0JCS8vIHNlbGY6Om5vZGUoKQotCQlTdGVwIHNlbGZfbm9kZSA9IG5ldyBGb3J3YXJkU3RlcChGb3J3YXJkU3RlcC5TRUxGLCBuZXcgQW55S2luZFRlc3QoKSk7Ci0JCVN0ZXBFeHByIHNlbGZfbm9kZV9leHByID0gbmV3IEF4aXNTdGVwKHNlbGZfbm9kZSwgbmV3IEFycmF5TGlzdCgpKTsKLQkJWFBhdGhFeHByIHNlbGZfbm9kZV94cGF0aCA9IG5ldyBYUGF0aEV4cHIoMCwgc2VsZl9ub2RlX2V4cHIpOwotCi0JCS8vIGZuOnJvb3Qoc2VsZjo6bm9kZSgpKQotCQlDb2xsZWN0aW9uIGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFyZ3MuYWRkKHNlbGZfbm9kZV94cGF0aCk7Ci0JCVhQYXRoRXhwciB4cGUgPSBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgiZm4iLCAicm9vdCIsCi0JCQkJRm5GdW5jdGlvbkxpYnJhcnkuWFBBVEhfRlVOQ1RJT05TX05TKSwgYXJncyk7Ci0KLQkJcmV0dXJuIHhwZTsKLQl9Ci0KLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX2Rlc2NlbmRhbnRfb3Jfc2VsZigpIHsKLQkJU3RlcCBkZXNjX3NlbGZfbm9kZSA9IG5ldyBGb3J3YXJkU3RlcChGb3J3YXJkU3RlcC5ERVNDRU5EQU5UX09SX1NFTEYsCi0JCQkJbmV3IEFueUtpbmRUZXN0KCkpOwotCQlTdGVwRXhwciBzZSA9IG5ldyBBeGlzU3RlcChkZXNjX3NlbGZfbm9kZSwgbmV3IEFycmF5TGlzdCgpKTsKLQotCQlyZXR1cm4gbmV3IFhQYXRoRXhwcigwLCBzZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB4cGF0aCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gcmVzdWx0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoWFBhdGhFeHByIGUpIHsKLQkJWFBhdGhFeHByIHhwID0gZTsKLQkJaW50IGRlcHRoID0gMDsgLy8gaW5kaWNhdGVzIGhvdyBtYW55IC8gd2UgdHJhdmVyc2VkCi0JCVhQYXRoRXhwciByZXN1bHQgPSBlOwotCi0JCXdoaWxlICh4cCAhPSBudWxsKSB7Ci0JCQlpbnQgc2xhc2hlcyA9IHhwLnNsYXNoZXMoKTsKLQkJCVN0ZXBFeHByIHNlID0geHAuZXhwcigpOwotCi0JCQlpZiAoc2xhc2hlcyA9PSAxKSB7Ci0JCQkJLy8gdGhpcyBpcyBhIHNpbmdsZSBzbGFzaCBhbmQgbm90aGluZyBlbHNlLi4uCi0JCQkJaWYgKHNlID09IG51bGwpCi0JCQkJCXJldHVybiBtYWtlX3Jvb3Rfc2VsZl9ub2RlKCk7Ci0KLQkJCQkvLyAvUmVsYXRpdmVQYXRoRXhwcgotCQkJCWlmIChkZXB0aCA9PSAwKSB7Ci0JCQkJCVhQYXRoRXhwciB4cGUgPSBtYWtlX3Jvb3Rfc2VsZl9ub2RlKCk7Ci0JCQkJCXhwZS5zZXRfbmV4dChlKTsKLQotCQkJCQlyZXN1bHQgPSB4cGU7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoc2xhc2hlcyA9PSAyKSB7Ci0JCQkJLy8gLy9SZWxhdGl2ZVBhdGhFeHByCi0JCQkJaWYgKGRlcHRoID09IDApIHsKLQkJCQkJWFBhdGhFeHByIGRlc2MgPSBtYWtlX2Rlc2NlbmRhbnRfb3Jfc2VsZigpOwotCQkJCQlkZXNjLnNldF9zbGFzaGVzKDEpOwotCQkJCQllLnNldF9zbGFzaGVzKDEpOwotCQkJCQlkZXNjLnNldF9uZXh0KGUpOwotCi0JCQkJCVhQYXRoRXhwciByb290X3NlbGYgPSBtYWtlX3Jvb3Rfc2VsZl9ub2RlKCk7Ci0JCQkJCXJvb3Rfc2VsZi5zZXRfbmV4dChkZXNjKTsKLQkJCQkJcmV0dXJuIHJvb3Rfc2VsZjsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChzZSAhPSBudWxsKQotCQkJCXNlLmFjY2VwdCh0aGlzKTsKLQotCQkJWFBhdGhFeHByIG5leHQgPSB4cC5uZXh0KCk7Ci0KLQkJCS8vIHBlZWsgaWYgdGhlIG5leHQgZ3V5IHdpbGwgaGF2ZSAyIHNsYXNoZXMuLi4KLQkJCWlmIChuZXh0ICE9IG51bGwpIHsKLQkJCQkvLyBTdGVwRXhwci8vU3RlcEV4cHIKLQkJCQlpZiAobmV4dC5zbGFzaGVzKCkgPT0gMikgewotCQkJCQkvLyBjcmVhdGUgdGhlIG5vZGUgdG8gc3RpY2sgYmV0d2VlbiB0aGUKLQkJCQkJLy8gc2xhc2hlcwotCQkJCQlYUGF0aEV4cHIgZGVzYyA9IG1ha2VfZGVzY2VuZGFudF9vcl9zZWxmKCk7Ci0JCQkJCWRlc2Muc2V0X3NsYXNoZXMoMSk7Ci0KLQkJCQkJLy8gY3VycmVudCBub2RlIC8gZGVzYyAvIG5leHQKLQkJCQkJeHAuc2V0X25leHQoZGVzYyk7Ci0JCQkJCWRlc2Muc2V0X25leHQobmV4dCk7Ci0JCQkJCW5leHQuc2V0X3NsYXNoZXMoMSk7Ci0JCQkJfQotCQkJfQotCQkJeHAgPSBuZXh0OwotCQkJZGVwdGgrKzsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZm9yd2FyZCBzdGVwLgotCSAqIEByZXR1cm4gZQotCSAqLwotCS8vIFhYWDogbm9ybWFsemllIQotCXB1YmxpYyBPYmplY3QgdmlzaXQoRm9yd2FyZFN0ZXAgZSkgewotCQlpbnQgYXhpcyA9IGUuYXhpcygpOwotCi0JCXN3aXRjaCAoYXhpcykgewotCQljYXNlIEZvcndhcmRTdGVwLkFUX1NZTToKLQkJCWUuc2V0X2F4aXMoRm9yd2FyZFN0ZXAuQVRUUklCVVRFKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRm9yd2FyZFN0ZXAuTk9ORToKLQkJCWUuc2V0X2F4aXMoRm9yd2FyZFN0ZXAuQ0hJTEQpOwotCQkJYnJlYWs7Ci0KLQkJfQotCi0JCWUubm9kZV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgcmV2ZXJzZSBzdGVwLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUmV2ZXJzZVN0ZXAgZSkgewotCi0JCWlmIChlLmF4aXMoKSA9PSBSZXZlcnNlU3RlcC5ET1RET1QpIHsKLQkJCU5vZGVUZXN0IG50ID0gbmV3IEFueUtpbmRUZXN0KCk7Ci0JCQlTdGVwIHMgPSBuZXcgUmV2ZXJzZVN0ZXAoUmV2ZXJzZVN0ZXAuUEFSRU5ULCBudCk7Ci0KLQkJCXJldHVybiBzOwotCQl9Ci0KLQkJTm9kZVRlc3QgbnQgPSBlLm5vZGVfdGVzdCgpOwotCQlpZiAobnQgIT0gbnVsbCkKLQkJCW50LmFjY2VwdCh0aGlzKTsKLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIE5hbWUgdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE5hbWVUZXN0IGUpIHsKLQotCQlTdHJpbmcgcHJlZml4ID0gZS5uYW1lKCkucHJlZml4KCk7Ci0KLQkJLy8gWFhYOiBpcyB0aGlzIGNvcnJlY3QgPwotCQkvLyBpLmUuIGlmIHRoZXJlIGlzIG5vIHByZWZpeC4uLiBpdHMgb2suLiBlbHNlIGl0IG11c3QgZXhpc3QKLQkJaWYgKHByZWZpeCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2ZXJpYWJsZSByZWZlcmVuY2UuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChWYXJSZWYgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHN0cmluZyBsaXRlcmFsLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3RyaW5nTGl0ZXJhbCBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBsaXRlcmFsLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW50ZWdlckxpdGVyYWwgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGRvdWJsZSBsaXRlcmFsLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRG91YmxlTGl0ZXJhbCBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZGVjaW1hbCBsaXRlcmFsLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRGVjaW1hbExpdGVyYWwgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHBhciBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGFyRXhwciBlKSB7Ci0JCXByaW50RXhwcnMoZS5pdGVyYXRvcigpKTsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBDbnR4IEl0ZW0gRXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ250eEl0ZW1FeHByIGUpIHsKLQkJcmV0dXJuIG5ldyBWYXJSZWYobmV3IFFOYW1lKCJmcyIsICJkb3QiKSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBmdWNudGlvbiBjYWxsLgotCSAqIEByZXR1cm4gZQotCSAqLwotCS8vIFhYWDogaG93IGRvIHdlIG5vcm1hbGl6ZSA/Ci0JcHVibGljIE9iamVjdCB2aXNpdChGdW5jdGlvbkNhbGwgZSkgewotCi0JCXByaW50RXhwcnMoZS5pdGVyYXRvcigpKTsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzaW5nbGUgdHlwZS4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNpbmdsZVR5cGUgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHNlcXVlbmNlIHR5cGUuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTZXF1ZW5jZVR5cGUgZSkgewotCQlJdGVtVHlwZSBpdCA9IGUuaXRlbV90eXBlKCk7Ci0KLQkJaWYgKGl0ICE9IG51bGwpCi0JCQlpdC5hY2NlcHQodGhpcyk7Ci0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpdGVtIHR5cGUuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJdGVtVHlwZSBlKSB7Ci0KLQkJc3dpdGNoIChlLnR5cGUoKSkgewotCQljYXNlIEl0ZW1UeXBlLklURU06Ci0JCQlicmVhazsKLQkJY2FzZSBJdGVtVHlwZS5RTkFNRToKLQkJCWJyZWFrOwotCi0JCWNhc2UgSXRlbVR5cGUuS0lORFRFU1Q6Ci0JCQllLmtpbmRfdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBhbnkga2luZCB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQW55S2luZFRlc3QgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGRvY3VtZW50IHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEb2N1bWVudFRlc3QgZSkgewotCi0JCXN3aXRjaCAoZS50eXBlKCkpIHsKLQkJY2FzZSBEb2N1bWVudFRlc3QuRUxFTUVOVDoKLQkJCWUuZWxlbV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBEb2N1bWVudFRlc3QuU0NIRU1BX0VMRU1FTlQ6Ci0JCQllLnNjaGVtYV9lbGVtX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0JCQlicmVhazsKLQkJfQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHRleHQgdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFRleHRUZXN0IGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjb21tb24gdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENvbW1lbnRUZXN0IGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBQSSB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUElUZXN0IGUpIHsKLQkJU3RyaW5nIGFyZyA9IGUuYXJnKCk7Ci0JCWlmIChhcmcgPT0gbnVsbCkKLQkJCWFyZyA9ICIiOwotCi0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgYXR0cmlidXRlIHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JLy8gWFhYIE5PIENIRUNLID8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF0dHJpYnV0ZVRlc3QgZSkgewotCi0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2NoZW1hQXR0clRlc3QgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGVsZW1lbnQgdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQkvLyBYWFggTk8gU0VNQU5USUMgQ0hFQ0s/IQotCXB1YmxpYyBPYmplY3QgdmlzaXQoRWxlbWVudFRlc3QgZSkgewotCi0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgc2NoZW1hIGVsZW1lbnQgdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNjaGVtYUVsZW1UZXN0IGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50Q29sbEV4cHJzKEl0ZXJhdG9yIGkpIHsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlDb2xsZWN0aW9uIGV4cHJzID0gKENvbGxlY3Rpb24pIGkubmV4dCgpOwotCi0JCQlwcmludEV4cHJzKGV4cHJzLml0ZXJhdG9yKCkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBheGlzIHN0ZXAuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBeGlzU3RlcCBlKSB7Ci0KLQkJU3RlcCBzID0gKFN0ZXApIGUuc3RlcCgpLmFjY2VwdCh0aGlzKTsKLQkJZS5zZXRfc3RlcChzKTsKLQotCQlwcmludENvbGxFeHBycyhlLml0ZXJhdG9yKCkpOwotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGZpbHRlciBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRmlsdGVyRXhwciBlKSB7Ci0JCVByaW1hcnlFeHByIHBlID0gKFByaW1hcnlFeHByKSBlLnByaW1hcnkoKS5hY2NlcHQodGhpcyk7Ci0JCWUuc2V0X3ByaW1hcnkocGUpOwotCi0JCXByaW50Q29sbEV4cHJzKGUuaXRlcmF0b3IoKSk7Ci0JCXJldHVybiBlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUGFyZW50QXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9QYXJlbnRBeGlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YWY5ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9QYXJlbnRBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyNzU2MTAgLSBBdm9pZCBiaWcgdGltZSBhbmQgbWVtb3J5IG92ZXJoZWFkIGZvciBleHRlcm5hbHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIHRoZSBwYXJlbnQgYXhpcyBjb250YWlucyB0aGUgc2VxdWVuY2UgcmV0dXJuZWQgYnkgdGhlIGRtOnBhcmVudCBhY2Nlc3NvciBpbiwKLSAqIHdoaWNoIHJldHVybnMgdGhlIHBhcmVudCBvZiB0aGUgY29udGV4dCBub2RlLCBvciBhbiBlbXB0eSBzZXF1ZW5jZSBpZiB0aGUKLSAqIGNvbnRleHQgbm9kZSBoYXMgbm8gcGFyZW50Ci0gKi8KLXB1YmxpYyBjbGFzcyBQYXJlbnRBeGlzIGV4dGVuZHMgUmV2ZXJzZUF4aXMgewotCi0JLyoqCi0JICogcmV0dXJucyBwYXJlbnQgYWNjZXNzb3JzIG9mIHRoZSBjb250ZXh0IG5vZGUKLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIG5vZGUgdHlwZS4KLQkgKiBAdGhyb3dzIGRjCi0JICogICAgICAgICAgICAgaXMgdGhlIER5bmFtaWMgY29udGV4dC4KLQkgKiBAcmV0dXJuIHRoZSBhY2Nlc3NvcnMuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCU5vZGUgbiA9IG5vZGUubm9kZV92YWx1ZSgpOwotCQlOb2RlIHBhcmVudCA9IG4uZ2V0UGFyZW50Tm9kZSgpOwotCi0JCS8vIHNwZWNpYWwgY2FzZSBhdHRyaWJ1dGUgZWxlbWVudHMuLi4KLQkJLy8gaW4gdGhpcyBjYXNlLi4uIHRoZSBwYXJlbnQgaXMgdGhlIGVsZW1lbnQgd2hpY2ggb3ducyB0aGUgYXR0cgotCQlpZiAobi5nZXROb2RlVHlwZSgpID09IE5vZGUuQVRUUklCVVRFX05PREUpIHsKLQkJCUF0dHIgYXR0ID0gKEF0dHIpIG47Ci0KLQkJCXBhcmVudCA9IGF0dC5nZXRPd25lckVsZW1lbnQoKTsKLQkJfQotCi0JCS8vIGlmIGEgcGFyZW50IGV4aXN0cy4uLiBhZGQgaXQKLQkJaWYgKHBhcmVudCAhPSBudWxsKQotCQkJcnMuYWRkKE5vZGVUeXBlLmRvbV90b194cGF0aChwYXJlbnQpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1ByZWNlZGluZ0F4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUHJlY2VkaW5nQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDkxODYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUHJlY2VkaW5nQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogdGhlIHByZWNlZGluZyBheGlzIGNvbnRhaW5zIGFsbCBub2RlcyB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiB0aGUgcm9vdCBvZiB0aGUKLSAqIHRyZWUgaW4gd2hpY2ggdGhlIGNvbnRleHQgbm9kZSBpcyBmb3VuZAotICovCi1wdWJsaWMgY2xhc3MgUHJlY2VkaW5nQXhpcyBleHRlbmRzIFJldmVyc2VBeGlzIHsKLQkvLyBYWFggRE9DVU1FTlQgT1JERVIuLi4uIGR1bm5vCi0KLQkvKioKLQkgKiByZXR1cm5zIHByZWNlZGluZyBub2RlcyBvZiB0aGUgY29udGV4dCBub2RlCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBub2RlIHR5cGUuCi0JICogQHRocm93cyBkYwotCSAqICAgICAgICAgICAgIGlzIHRoZSBEeW5hbWljIGNvbnRleHQuCi0JICogQHJldHVybiB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbnRleHQgbm9kZQotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IHRoZSBwYXJlbnQKLQkJTm9kZVR5cGUgcGFyZW50ID0gbnVsbDsKLQkJUGFyZW50QXhpcyBwYSA9IG5ldyBQYXJlbnRBeGlzKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gcGEuaXRlcmF0ZShub2RlLCBkYyk7Ci0JCWlmIChycy5zaXplKCkgPT0gMSkKLQkJCXBhcmVudCA9IChOb2RlVHlwZSkgcnMuZ2V0KDApOwotCi0JCS8vIGdldCB0aGUgcHJlY2VkaW5nIHNpYmxpbmdzIG9mIHRoaXMgbm9kZSwgYW5kIGFkZCB0aGVtCi0JCVByZWNlZGluZ1NpYmxpbmdBeGlzIHBzYSA9IG5ldyBQcmVjZWRpbmdTaWJsaW5nQXhpcygpOwotCQlycyA9IHBzYS5pdGVyYXRlKG5vZGUsIGRjKTsKLQkJcmVzdWx0LmNvbmNhdChycyk7Ci0KLQkJLy8gZm9yIGVhY2ggc2libGluZywgZ2V0IGFsbCBpdHMgZGVzY2VuZGFudHMKLQkJRGVzY2VuZGFudEF4aXMgZGEgPSBuZXcgRGVzY2VuZGFudEF4aXMoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBkZXNjID0gZGEuaXRlcmF0ZSgoTm9kZVR5cGUpIGkubmV4dCgpLCBkYyk7Ci0KLQkJCS8vIGFkZCBhbGwgZGVzY2VuZGFudHMgdG8gdGhlIHJlc3VsdAotCQkJcmVzdWx0LmNvbmNhdChkZXNjKTsKLQkJfQotCi0JCS8vIGlmIHdlIGdvdCBhIHBhcmVudCwgd2UgZ290dGEgcmVwZWF0IHRoZSBzdG9yeSBmb3IgdGhlIHBhcmVudAotCQkvLyBhbmQgYWRkIHRoZSByZXN1bHRzCi0JCWlmIChwYXJlbnQgIT0gbnVsbCkgewotCQkJcnMgPSBpdGVyYXRlKHBhcmVudCwgZGMpOwotCi0JCQlycy5jb25jYXQocmVzdWx0KTsKLQkJCXJlc3VsdCA9IHJzOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9QcmVjZWRpbmdTaWJsaW5nQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9QcmVjZWRpbmdTaWJsaW5nQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjkwODE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUHJlY2VkaW5nU2libGluZ0F4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiB0aGUgcHJlY2VkaW5nIGF4aXMgY29udGFpbnMgYWxsIG5vZGVzIHRoYXQgYXJlIGRlc2NlbmRhbnRzIG9mIHRoZSByb290IG9mIHRoZQotICogdHJlZSBpbiB3aGljaCB0aGUgY29udGV4dCBub2RlIGlzIGZvdW5kIGluY2x1ZGluZyB0aGUgY29udGV4dCBub2RlIGl0c2VsZgotICovCi1wdWJsaWMgY2xhc3MgUHJlY2VkaW5nU2libGluZ0F4aXMgZXh0ZW5kcyBSZXZlcnNlQXhpcyB7Ci0JLy8gWFhYIGFnYWluLCB1bmlmeSB3aXRoIGZvbGxvd2luZwotCi0JLyoqCi0JICogcmV0dXJucyBwcmVjZWRpbmcgbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZQotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgbm9kZSB0eXBlLgotCSAqIEB0aHJvd3MgZGMKLQkgKiAgICAgICAgICAgICBpcyB0aGUgRHluYW1pYyBjb250ZXh0LgotCSAqIEByZXR1cm4gdGhlIGRlc2NlbmRhbnRzIGFuZCB0aGUgY29udGV4dCBub2RlCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQkvLyBYWFggY2hlY2sgZm9yIGF0dHJpYnV0ZSAvIG5hbWVzcGFjZSBub2RlLi4uIGlmIHNvIHJldHVybgotCQkvLyBlbXB0eSBzZXF1ZW5jZQotCi0JCS8vIGdldCB0aGUgcGFyZW50Ci0JCVBhcmVudEF4aXMgcGEgPSBuZXcgUGFyZW50QXhpcygpOwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IHBhLml0ZXJhdGUobm9kZSwgZGMpOwotCi0JCS8vIFhYWDogaWYgbm8gcGFyZW50LCBvdXQgb2YgbHVjayBpIGd1ZXNzCi0JCWlmIChycy5zaXplKCkgPT0gMCkKLQkJCXJldHVybiByczsKLQotCQkvLyBnZXQgdGhlIGNoaWxkcmVuIG9mIHRoZSBwYXJlbnQgW3NpYmxpbmdzXQotCQlDaGlsZEF4aXMgY2EgPSBuZXcgQ2hpbGRBeGlzKCk7Ci0JCU5vZGVUeXBlIHBhcmVudCA9IChOb2RlVHlwZSkgcnMuZ2V0KDApOwotCQlycyA9IGNhLml0ZXJhdGUocGFyZW50LCBkYyk7Ci0KLQkJLy8gZ2V0IHRoZSBwcmVjZWRpbmcgc2libGluZ3MKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBuID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQotCQkJLy8gb2sgd2UgcGFzc2VkIHRoZSBub2RlLCBzbyBqdXN0IGVyYXNlIHRoZSByZXN0IG9mIHRoZQotCQkJLy8gcmVzdWx0cwotCQkJaWYgKGZvdW5kKSB7Ci0JCQkJaS5yZW1vdmUoKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKG4ubm9kZV92YWx1ZSgpID09IG5vZGUubm9kZV92YWx1ZSgpKSB7Ci0JCQkJaS5yZW1vdmUoKTsKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1JhbmdlUmVzdWx0U2VxdWVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUmFuZ2VSZXN1bHRTZXF1ZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTRhY2IyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUmFuZ2VSZXN1bHRTZXF1ZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIEEgcmFuZ2UgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYSBzZXF1ZW5jZSBvZiBjb25zZWN1dGl2ZQotICogaW50ZWdlcnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBSYW5nZVJlc3VsdFNlcXVlbmNlIGV4dGVuZHMgUmVzdWx0U2VxdWVuY2UgewotCi0JcHJpdmF0ZSBpbnQgX3N0YXJ0OwotCXByaXZhdGUgaW50IF9lbmQ7Ci0JcHJpdmF0ZSBpbnQgX3NpemU7Ci0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBfdGFpbDsKLQotCS8qKgotCSAqIHNldCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgcmFuZ2UgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIHN0YXJ0Ci0JICogICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgcmFuZ2UuCi0JICogQHBhcmFtIGVuZAotCSAqICAgICAgICAgICAgaXMgdGhlIGludGVnZXIgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiByYW5nZS4KLQkgKi8KLQlwdWJsaWMgUmFuZ2VSZXN1bHRTZXF1ZW5jZShpbnQgc3RhcnQsIGludCBlbmQpIHsKLQkJX3NpemUgPSAoZW5kIC0gc3RhcnQpICsgMTsKLQotCQlhc3NlcnQgX3NpemUgPj0gMDsKLQotCQlfc3RhcnQgPSBzdGFydDsKLQkJX2VuZCA9IGVuZDsKLQotCQlfdGFpbCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JfQotCi0JLyoqCi0JICogaXRlbSBpcyBhbiBpbnRlZ2VyIHRvIGFkZCB0byB0aGUgcmFuZ2UuCi0JICogCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlzIGFuIGludGVnZXIuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgYWRkKEFueVR5cGUgaXRlbSkgewotCQlfdGFpbC5hZGQoaXRlbSk7Ci0JfQotCi0JLyoqCi0JICogcmVtb3ZlIHRoZSB0YWlsIGZyb20gdGhlIHJhbmdlIGdpdmVuLgotCSAqIAotCSAqIEBwYXJhbSBycwotCSAqICAgICAgICAgICAgaXMgdGhlIHJhbmdlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgY29uY2F0KFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCV90YWlsLmNvbmNhdChycyk7Ci0JfQotCi0JLyoqCi0JICogaW50ZXJhdGUgdGhyb3VnaCByYW5nZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRhaWwKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQkvLyBYWFggbGlmZSBpcyBnZXR0aW5nIGhhcmQuLi4KLQkJaWYgKF9zaXplICE9IDApIHsKLQkJCVJlc3VsdFNlcXVlbmNlIG5ld3RhaWwgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCQlmb3IgKDsgX3N0YXJ0IDw9IF9lbmQ7IF9zdGFydCsrKQotCQkJCW5ld3RhaWwuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKF9zdGFydCkpKTsKLQotCQkJbmV3dGFpbC5jb25jYXQoX3RhaWwpOwotCQkJX3RhaWwucmVsZWFzZSgpOwotCQkJX3RhaWwgPSBuZXd0YWlsOwotCi0JCQlfc2l6ZSA9IDA7Ci0JCQlfc3RhcnQgPSAwOwotCQkJX2VuZCA9IDA7Ci0KLQkJfQotCi0JCXJldHVybiBfdGFpbC5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gaXRlbSBmcm9tIHJhbmdlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgZ2V0KGludCBpKSB7Ci0JCWlmIChpIDwgX3NpemUpCi0JCQlyZXR1cm4gbmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoX3N0YXJ0ICsgaSkpOwotCQllbHNlCi0JCQlyZXR1cm4gX3RhaWwuZ2V0KGkgLSBfc2l6ZSk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBzaXplCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGludCBzaXplKCkgewotCQlyZXR1cm4gX3NpemUgKyBfdGFpbC5zaXplKCk7Ci0JfQotCi0JLyoqCi0JICogY2xlYXIgcmFuZ2UKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjbGVhcigpIHsKLQkJX3NpemUgPSAwOwotCQlfdGFpbC5jbGVhcigpOwotCX0KLQotCS8qKgotCSAqIGNyZWF0ZSBuZXcgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHJldHVybiBudWxsCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNyZWF0ZV9uZXcoKSB7Ci0JCWFzc2VydCBmYWxzZTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBmaXJzdCBpdGVtIGluIHJhbmdlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgZmlyc3QoKSB7Ci0JCXJldHVybiBnZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogYXNrcyBpZiB0aGUgcmFuZ2UgaXMgZW1wdHk/Ci0JICogCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZW1wdHkoKSB7Ci0JCXJldHVybiBzaXplKCkgPT0gMDsKLQl9Ci0KLQkvKioKLQkgKiByZWxlYXNlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1JldmVyc2VBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1JldmVyc2VBeGlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MDcwZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9SZXZlcnNlQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogQW4gYXhpcyB0aGF0IG9ubHkgZXZlciBjb250YWlucyB0aGUgY29udGV4dCBub2RlIG9yIG5vZGVzIHRoYXQgYXJlIGJlZm9yZSB0aGUKLSAqIGNvbnRleHQgbm9kZSBpbiBkb2N1bWVudCBvcmRlciBpcyBhIHJldmVyc2UgYXhpcy4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFJldmVyc2VBeGlzIGltcGxlbWVudHMgQXhpcyB7Ci0KLQkvKioKLQkgKiBAcmV0dXJuIG5ldyBlbGVtZW50IHR5cGUKLQkgKi8KLQkvLyBzaG91bGQgYWx3YXlzIGJlIGVsZW1lbnQgaSBmaW5rCi0JcHVibGljIE5vZGVUeXBlIHByaW5jaXBhbF9ub2RlX2tpbmQoKSB7Ci0JCXJldHVybiBuZXcgRWxlbWVudFR5cGUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1NlbGZBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1NlbGZBeGlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZWVkMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TZWxmQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIENyZWF0ZSBhIHJlc3VsdCBzZXF1ZW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUKLSAqLwotcHVibGljIGNsYXNzIFNlbGZBeGlzIGV4dGVuZHMgRm9yd2FyZEF4aXMgewotCi0JLyoqCi0JICogY3JlYXRlIG5ldyBycyBhbmQgYWRkIHRoZSBjb250ZXh0IG5vZGUgdG8gaXQKLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIG5vZGUgdHlwZQotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dAotCSAqIEByZXR1cm4gcnMgY29udGFpbmluZyBub2RlCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCXJzLmFkZChub2RlKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1NlcVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU2VxVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjc1OWM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU2VxVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBkb24ndCBzaWxlbnRseSBhbGxvdyBlbXB0eSBzZXF1ZW5jZXMgYWx3YXlzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjk3NzA3IC0gTWlzc2luZyB0aGUgZW1wdHktc2VxdWVuY2UoKSB0eXBlCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODI2NyAtIENvcnJlY3RseSBoYW5kbGUgaW5zdG9mIHdpdGggZWxlbWVudHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIHJlcHJlc2VudHMgYSBTZXF1ZW5jZSB0eXBlcyB1c2VkIGZvciBtYXRjaGluZyBleHBlY3RlZCBhcmd1bWVudHMgb2YgZnVuY3Rpb25zCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXFUeXBlIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9DQ19OT05FID0gMDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPQ0NfU1RBUiA9IDE7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0NDX1BMVVMgPSAyOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9DQ19RTUFSSyA9IDM7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0NDX0VNUFRZID0gNDsKLQotCS8qKgotCSAqIFBhdGggdG8gdzMub3JnIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfU0NIRU1BX05TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIEFOWV9BVE9NSUNfVFlQRSA9IG5ldyBRTmFtZSgieHMiLAotCQkJImFueUF0b21pY1R5cGUiLCBYTUxfU0NIRU1BX05TKTsKLQotCXByaXZhdGUgdHJhbnNpZW50IEFueVR5cGUgYW55dHlwZSA9IG51bGw7Ci0JcHJpdmF0ZSB0cmFuc2llbnQgaW50IG9jYzsKLQlwcml2YXRlIHRyYW5zaWVudCBDbGFzcyB0eXBlQ2xhc3MgPSBudWxsOwotCXByaXZhdGUgdHJhbnNpZW50IFFOYW1lIG5vZGVOYW1lID0gbnVsbDsKLQlwcml2YXRlIHRyYW5zaWVudCBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQotCS8qKgotCSAqIHNlcXVlbmNlIHR5cGUKLQkgKiAKLQkgKiBAcGFyYW0gdAotCSAqICAgICAgICAgICAgaXMgYW55IHR5cGUKLQkgKiBAcGFyYW0gb2NjCi0JICogICAgICAgICAgICBpcyBhbiBpbnRlZ2VyIGluIHRoZSBzZXF1ZW5jZS4KLQkgKi8KLQlwdWJsaWMgU2VxVHlwZShBbnlUeXBlIHQsIGludCBvY2MpIHsKLQkJYW55dHlwZSA9IHQ7Ci0JCXRoaXMub2NjID0gb2NjOwotCi0JCWlmICh0ICE9IG51bGwpCi0JCQl0eXBlQ2xhc3MgPSB0LmdldENsYXNzKCk7Ci0JCWVsc2UKLQkJCXR5cGVDbGFzcyA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG9jYwotCSAqICAgICAgICAgICAgaXMgYW4gaW50ZWdlciBpbiB0aGUgc2VxdWVuY2UuCi0JICovCi0JLy8gWFhYIGhhY2sgdG8gcmVwcmVzZW50IEFueU5vZGUuLi4KLQlwdWJsaWMgU2VxVHlwZShpbnQgb2NjKSB7Ci0JCXRoaXMoKEFueVR5cGUpIG51bGwsIG9jYyk7Ci0KLQkJdHlwZUNsYXNzID0gTm9kZVR5cGUuY2xhc3M7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHR5cGVfY2xhc3MKLQkgKiAgICAgICAgICAgIGlzIGEgY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyB0aGUgZXhwZWN0ZWQgdHlwZQotCSAqIEBwYXJhbSBvY2MKLQkgKiAgICAgICAgICAgIGlzIGFuIGludGVnZXIgaW4gdGhlIHNlcXVlbmNlLgotCSAqLwotCXB1YmxpYyBTZXFUeXBlKENsYXNzIHR5cGVfY2xhc3MsIGludCBvY2MpIHsKLQkJdGhpcygoQW55VHlwZSkgbnVsbCwgb2NjKTsKLQotCQl0aGlzLnR5cGVDbGFzcyA9IHR5cGVfY2xhc3M7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0Ci0JICogICAgICAgICAgICBpcyBhIHNlcXVlbmNlIHR5cGUuCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBpcyBhIHN0YXRpYyBjb250ZXh0LgotCSAqLwotCXB1YmxpYyBTZXFUeXBlKFNlcXVlbmNlVHlwZSBzdCwgU3RhdGljQ29udGV4dCBzYywgUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQotCQkvLyBjb252ZXJ0IG9jY3VycmVuY2UKLQkJc3dpdGNoIChzdC5vY2N1cnJlbmNlKCkpIHsKLQkJY2FzZSBTZXF1ZW5jZVR5cGUuRU1QVFk6Ci0JCQlvY2MgPSBPQ0NfRU1QVFk7Ci0JCQlyZXR1cm47Ci0KLQkJY2FzZSBTZXF1ZW5jZVR5cGUuTk9ORToKLQkJCW9jYyA9IE9DQ19OT05FOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTZXF1ZW5jZVR5cGUuUVVFU1RJT046Ci0JCQlvY2MgPSBPQ0NfUU1BUks7Ci0JCQlicmVhazsKLQotCQljYXNlIFNlcXVlbmNlVHlwZS5TVEFSOgotCQkJb2NjID0gT0NDX1NUQVI7Ci0JCQlicmVhazsKLQotCQljYXNlIFNlcXVlbmNlVHlwZS5QTFVTOgotCQkJb2NjID0gT0NDX1BMVVM7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCQl9Ci0KLQkJLy8gZmlndXJlIG91dCB0aGUgaXRlbSBpcwotCQlmaW5hbCBJdGVtVHlwZSBpdGVtID0gc3QuaXRlbV90eXBlKCk7Ci0JCUtpbmRUZXN0IGt0ZXN0ID0gbnVsbDsKLQkJc3dpdGNoIChpdGVtLnR5cGUoKSkgewotCQljYXNlIEl0ZW1UeXBlLklURU06Ci0JCQl0eXBlQ2xhc3MgPSBBbnlUeXBlLmNsYXNzOwotCQkJcmV0dXJuOwotCi0JCQkvLyBYWFggSU1QTEVNRU5UIFRISVMKLQkJY2FzZSBJdGVtVHlwZS5RTkFNRToKLQkJCWZpbmFsIEFueUF0b21pY1R5cGUgYWF0ID0gc2MubWFrZV9hdG9taWMoaXRlbS5xbmFtZSgpKTsKLQotCQkJYXNzZXJ0IGFhdCAhPSBudWxsOwotCQkJYW55dHlwZSA9IGFhdDsKLQkJCWlmIChpdGVtLnFuYW1lKCkuZXF1YWxzKEFOWV9BVE9NSUNfVFlQRSkpIHsKLQkJCQl0eXBlQ2xhc3MgPSBBbnlBdG9taWNUeXBlLmNsYXNzOwotCQkJfSBlbHNlIHsKLQkJCQl0eXBlQ2xhc3MgPSBhbnl0eXBlLmdldENsYXNzKCk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0KLQkJY2FzZSBJdGVtVHlwZS5LSU5EVEVTVDoKLQkJCWt0ZXN0ID0gaXRlbS5raW5kX3Rlc3QoKTsKLQkJCWJyZWFrOwotCi0JCX0KLQotCQlpZiAoa3Rlc3QgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJdHlwZUNsYXNzID0ga3Rlc3QuZ2V0WERNQ2xhc3NUeXBlKCk7Ci0JCWFueXR5cGUgPSBrdGVzdC5jcmVhdGVUZXN0VHlwZShycyk7Ci0JCW5vZGVOYW1lID0ga3Rlc3QubmFtZSgpOwotCQl3aWxkID0ga3Rlc3QuaXNXaWxkKCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHQKLQkgKiAgICAgICAgICAgIGlzIGFuIGFueSB0eXBlLgotCSAqLwotCXB1YmxpYyBTZXFUeXBlKEFueVR5cGUgdCkgewotCQl0aGlzKHQsIE9DQ19OT05FKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGFuIGludGVnZXIuCi0JICovCi0JcHVibGljIGludCBvY2N1cmVuY2UoKSB7Ci0JCXJldHVybiBvY2M7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBhIHR5cGUuCi0JICovCi0JcHVibGljIEFueVR5cGUgdHlwZSgpIHsKLQkJcmV0dXJuIGFueXR5cGU7Ci0JfQotCi0JLyoqCi0JICogbWF0Y2hlcyBhcmdzCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlzIGEgcmVzdWx0IHNlcXVlbmNlCi0JICogQHRocm93cyBhCi0JICogICAgICAgICAgICAgZHluYW1pYyBlcnJvcgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWF0Y2goUmVzdWx0U2VxdWVuY2UgYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJaW50IG9jY3VycmVuY2UgPSBvY2N1cmVuY2UoKTsKLQotCQkvLyBDaGVjayBmb3IgZW1wdHkgc2VxdWVuY2UgZmlyc3QKLQkJaWYgKG9jY3VycmVuY2UgPT0gT0NDX0VNUFRZICYmICFhcmdzLmVtcHR5KCkpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCX0KLQotCQlpbnQgYXJnX2NvdW50ID0gMDsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmdzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBhcmcgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCS8vIG1ha2Ugc3VyZSBhbGwgYXJncyBhcmUgdGhlIHNhbWUgdHlwZSBhcyBleHBlY3RlZCB0eXBlCi0JCQlpZiAoISh0eXBlQ2xhc3MuaXNJbnN0YW5jZShhcmcpKSkgewotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCQl9Ci0KLQkJCWlmIChhbnl0eXBlICE9IG51bGwpIHsKLQkJCQlpZiAoKG5vZGVOYW1lICE9IG51bGwgfHwgd2lsZCkgJiYgYXJnIGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCQkJTm9kZVR5cGUgbm9kZVR5cGUgPSAoTm9kZVR5cGUpIGFyZzsKLQkJCQkJTm9kZSBub2RlID0gbm9kZVR5cGUubm9kZV92YWx1ZSgpOwotCQkJCQlOb2RlIGxub2RlID0gKChOb2RlVHlwZSkgYW55dHlwZSkubm9kZV92YWx1ZSgpOwotCQkJCQlpZiAobG5vZGUgPT0gbnVsbCkgewotCQkJCQkJLy90aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJaWYgKCFsbm9kZS5pc0VxdWFsTm9kZShub2RlKSkgewotCQkJCQkJLy90aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWFyZ19jb3VudCsrOwotCi0JCX0KLQotCQlzd2l0Y2ggKG9jY3VycmVuY2UpIHsKLQkJY2FzZSBPQ0NfTk9ORToKLQkJCWlmIChhcmdfY291bnQgIT0gMSkgewotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIE9DQ19QTFVTOgotCQkJaWYgKGFyZ19jb3VudCA9PSAwKSB7Ci0JCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgT0NDX1NUQVI6Ci0JCQlicmVhazsKLQotCQljYXNlIE9DQ19RTUFSSzoKLQkJCWlmIChhcmdfY291bnQgPiAxKSB7Ci0JCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQgZmFsc2U7Ci0KLQkJfQotCi0JCXJldHVybiBhcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljQXR0ck5hbWVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNBdHRyTmFtZUVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZmM5MzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNBdHRyTmFtZUVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKgotICogRXJyb3IgY2F1c2VkIGJ5IHN0YXRpYyBhdHRyaWJ1dGUgbmFtZS4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY0F0dHJOYW1lRXJyb3IgZXh0ZW5kcyBTdGF0aWNOYW1lRXJyb3IgewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTUwMzc3ODg2NTQyOTMwNTAyNjJMOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHN0YXRpYyBhdHRyaWJ1dGUgbmFtZSBlcnJvcgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgU3RhdGljQXR0ck5hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKHJlYXNvbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNFbGVtTmFtZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY0VsZW1OYW1lRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRkNzZiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY0VsZW1OYW1lRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqCi0gKiBFcnJvciBjYXVzZWQgYnkgc3RhdGljIGVsZW1lbnQgbmFtZS4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY0VsZW1OYW1lRXJyb3IgZXh0ZW5kcyBTdGF0aWNOYW1lRXJyb3IgewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMTg3MTU3NTY3MTg3MTc1NTY3M0w7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3Igc3RhdGljIGVsZW1lbnQgbmFtZSBlcnJvcgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgU3RhdGljRWxlbU5hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKHJlYXNvbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNGdW5jdE5hbWVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNGdW5jdE5hbWVFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2MzODlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljRnVuY3ROYW1lRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqCi0gKiBFcnJvciBjYXVzZWQgYnkgc3RhdGljIGZ1bmN0aW9uIG5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNGdW5jdE5hbWVFcnJvciBleHRlbmRzIFN0YXRpY05hbWVFcnJvciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODA0NTY1ODc2NzcwMzc2NDQ0TDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGVU5DVElPTl9OT1RfRk9VTkQgPSAiWFBTVDAwMTciOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHN0YXRpYyBmdW5jdGlvbiBuYW1lIGVycm9yCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBTdGF0aWNGdW5jdE5hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKEZVTkNUSU9OX05PVF9GT1VORCwgcmVhc29uKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY05hbWVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNOYW1lRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllNTJjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY05hbWVFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBzdGF0aWMgbmFtZS4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY05hbWVFcnJvciBleHRlbmRzIFN0YXRpY0Vycm9yIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA0MzYzMzcwMDgyNTYzMTA2MDc0TDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX05PVF9GT1VORCA9ICJYUFNUMDAwOCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRklYX05PVF9GT1VORCA9ICJYUFNUMDA4MSI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3Igc3RhdGljIG5hbWUgZXJyb3IKLQkgKiAKLQkgKiBAcGFyYW0gY29kZQotCSAqICAgICAgICAgICAgaXMgdGhlIGNvZGUuCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBTdGF0aWNOYW1lRXJyb3IoU3RyaW5nIGNvZGUsIFN0cmluZyByZWFzb24pIHsKLQkJc3VwZXIoY29kZSwgcmVhc29uKTsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3Igc3RhdGljIG5hbWUgZXJyb3IKLQkgKiAKLQkgKiBAcGFyYW0gcmVhc29uCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIFN0YXRpY05hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXRoaXMoTkFNRV9OT1RfRk9VTkQsIHJlYXNvbik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY05zTmFtZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY05zTmFtZUVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYTQzNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNOc05hbWVFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIFN0YXRpYyBuYW1lc3BhY2UgbmFtZSBlcnJvciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY05zTmFtZUVycm9yIGV4dGVuZHMgU3RhdGljTmFtZUVycm9yIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC02ODczOTgwMzc3OTY2MjkwMDYyTDsKLQotCXB1YmxpYyBTdGF0aWNOc05hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKFBSRUZJWF9OT1RfRk9VTkQsIHJlYXNvbik7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIHByZWYKLQkgKiAgICAgICAgICAgIGlzIHRoZSB1bmtub3duIHByZWZpeC4KLQkgKiBAcmV0dXJuIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0YXRpY05zTmFtZUVycm9yIHVua25vd25fcHJlZml4KFN0cmluZyBwcmVmKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJVbmtub3duIHByZWZpeCI7Ci0KLQkJaWYgKHByZWYgIT0gbnVsbCkKLQkJCWVycm9yICs9ICI6ICIgKyBwcmVmOwotCQllcnJvciArPSAiLiI7Ci0KLQkJcmV0dXJuIG5ldyBTdGF0aWNOc05hbWVFcnJvcihlcnJvcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNUeXBlTmFtZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY1R5cGVOYW1lRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3MDE5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY1R5cGVOYW1lRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjczNzYzIC0gY29ycmVjdCBlcnJvciBjb2RlcyAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKgotICogU3RhdGljIHR5cGUgbmFtZSBlcnJvciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY1R5cGVOYW1lRXJyb3IgZXh0ZW5kcyBTdGF0aWNOYW1lRXJyb3IgewotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDczMjg2NzE1NzEwODg1NzQ5NDdMOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTk9UX0ZPVU5EID0gIlhQU1QwMDUxIjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgU3RhdGljVHlwZU5hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKFRZUEVfTk9UX0ZPVU5ELCByZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljVmFyTmFtZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY1Zhck5hbWVFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDc1Y2I4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljVmFyTmFtZUVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKgotICogU3RhdGljIHZhcmlhYmxlIG5hbWUgZXJyb3IgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNWYXJOYW1lRXJyb3IgZXh0ZW5kcyBTdGF0aWNOYW1lRXJyb3IgewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTIzMDg0MDI5NTQ4OTI4MjE0NzZMOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBTdGF0aWNWYXJOYW1lRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihyZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvVHlwZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1R5cGVFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTliMjEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvVHlwZUVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNzM3NjMgLSBjb3JyZWN0IGVycm9yIGNvZGVzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBiYWQgdHlwZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBUeXBlRXJyb3IgZXh0ZW5kcyBYUGF0aEV4Y2VwdGlvbiB7Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gOTMyMjc1MDM1NzA2OTM2ODgzTDsKLQkvLyBlcnJvcmNvZGUgc3BlY2lmaWVkIGluIGh0dHA6Ly93d3cudzMub3JnLzIwMDQvMTAveHF0LWVycm9ycyBpIGZpbmsKLQlwcml2YXRlIFN0cmluZyBfY29kZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciB0eXBlIGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSBjb2RlCi0JICogICAgICAgICAgICBpcyB0aGUgZXJyb3IgY29kZS4KLQkgKiBAcGFyYW0gZXJyCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIFR5cGVFcnJvcihTdHJpbmcgY29kZSwgU3RyaW5nIGVycikgewotCQlzdXBlcihlcnIpOwotCQlfY29kZSA9IGNvZGU7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBlcnJvciBjb2RlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGVycm9yIGNvZGUuCi0JICovCi0JcHVibGljIFN0cmluZyBjb2RlKCkgewotCQlyZXR1cm4gX2NvZGU7Ci0JfQotCi0JLyoqCi0JICogIkZhY3RvcnkiIGZvciBidWlsZGluZyBlcnJvcnMKLQkgKiAKLQkgKiBAcGFyYW0gZXJyCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICogQHJldHVybiB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBUeXBlRXJyb3IgY2lfbm90X25vZGUoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiQ29udGV4dCBpdGVtIGlzIG5vdCBhIG5vZGUuIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBUeXBlRXJyb3IoIlhQVFkwMDIwIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqIEByZXR1cm4gdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVHlwZUVycm9yIG1peGVkX3ZhbHMoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBzdGVwIGluIGEgcGF0aCBleHByZXNzaW9uIGNvbnRhaW5zIGJvdGggbm9kZXMgYW5kIGF0b21pYyB2YWx1ZXMuIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBUeXBlRXJyb3IoIlhQVFkwMDE4IiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqIEByZXR1cm4gdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVHlwZUVycm9yIHN0ZXBfY29uYXRpbnNfYXRvbXMoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVGhlIHJlc3VsdCBvZiBhbiBzdGVwIChvdGhlciB0aGFuIHRoZSBsYXN0IHN0ZXApIGluIGEgcGF0aCBleHByZXNzaW9uIGNvbnRhaW5zIGFuIGF0b21pYyB2YWx1ZS4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IFR5cGVFcnJvcigiWFBUWTAwMTkiLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogIkZhY3RvcnkiIGZvciBidWlsZGluZyBlcnJvcnMKLQkgKiAKLQkgKiBAcGFyYW0gZXJyCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICogQHJldHVybiB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBUeXBlRXJyb3IgaW52YWxpZF90eXBlKFN0cmluZyBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIlZhbHVlIGRvZXMgbm90IG1hdGNoIGEgcmVxdWlyZWQgdHlwZS4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IFR5cGVFcnJvcigiWFBUWTAwMDQiLCBlcnJvcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aDJQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGgyUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMDY1YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aDJQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIGFwaSBhbmQgaW1wbGVtZW50YXRpb24gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgWFBhdGgyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCXB1YmxpYyBYUGF0aDJQbHVnaW4oKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEN1cC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEN1cC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWVkMzFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhDdXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0NDMgKzAsMCBAQAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IENVUCB2MC4xMGsKLS8vIE1vbiBEZWMgMTQgMDI6MDI6MjIgQ0VUIDIwMDkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKiogQ1VQIHYwLjEwayBnZW5lcmF0ZWQgcGFyc2VyLgotICAqIEB2ZXJzaW9uIE1vbiBEZWMgMTQgMDI6MDI6MjIgQ0VUIDIwMDkKLSAgKi8KLXB1YmxpYyBjbGFzcyBYUGF0aEN1cCBleHRlbmRzIGphdmFfY3VwLnJ1bnRpbWUubHJfcGFyc2VyIHsKLQotICAvKiogRGVmYXVsdCBjb25zdHJ1Y3Rvci4gKi8KLSAgcHVibGljIFhQYXRoQ3VwKCkge3N1cGVyKCk7fQotCi0gIC8qKiBDb25zdHJ1Y3RvciB3aGljaCBzZXRzIHRoZSBkZWZhdWx0IHNjYW5uZXIuICovCi0gIHB1YmxpYyBYUGF0aEN1cChqYXZhX2N1cC5ydW50aW1lLlNjYW5uZXIgcykge3N1cGVyKHMpO30KLQotICAvKiogUHJvZHVjdGlvbiB0YWJsZS4gKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBzaG9ydCBfcHJvZHVjdGlvbl90YWJsZVtdW10gPSAKLSAgICB1bnBhY2tGcm9tU3RyaW5ncyhuZXcgU3RyaW5nW10gewotICAgICJcMDAwXHUwMTBmXDAwMFwwMDJcMTE0XDAwM1wwMDBcMDAyXDAwMlwwMDRcMDAwXDAwMlwwMzMiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAzM1wwMDVcMDAwXDAwMlwwNjFcMDAzXDAwMFwwMDJcMDYxXDAwMyIgKwotICAgICJcMDAwXDAwMlwwNjFcMDAzXDAwMFwwMDJcMDYxXDAwM1wwMDBcMDAyXDExNVwwMDVcMDAwIiArCi0gICAgIlwwMDJcMDM2XDAwN1wwMDBcMDAyXDAzNlwwMTBcMDAwXDAwMlwxMTZcMDA3XDAwMFwwMDIiICsKLSAgICAiXDExNlwwMDdcMDAwXDAwMlwwMzVcMDA1XDAwMFwwMDJcMDM1XDAxMFwwMDBcMDAyXDExNyIgKwotICAgICJcMDEyXDAwMFwwMDJcMDY2XDAwM1wwMDBcMDAyXDA2NlwwMDVcMDAwXDAwMlwwNjVcMDAzIiArCi0gICAgIlwwMDBcMDAyXDA2NVwwMDVcMDAwXDAwMlwwNzBcMDAzXDAwMFwwMDJcMDcwXDAwNVwwMDAiICsKLSAgICAiXDAwMlwwNzBcMDA1XDAwMFwwMDJcMDcwXDAwNVwwMDBcMDAyXDA2N1wwMDNcMDAwXDAwMiIgKwotICAgICJcMDY3XDAwNVwwMDBcMDAyXDA2MlwwMDNcMDAwXDAwMlwwNjJcMDA1XDAwMFwwMDJcMDYyIiArCi0gICAgIlwwMDVcMDAwXDAwMlwwNTdcMDAzXDAwMFwwMDJcMDU3XDAwNVwwMDBcMDAyXDA1N1wwMDUiICsKLSAgICAiXDAwMFwwMDJcMDU3XDAwNVwwMDBcMDAyXDA1N1wwMDVcMDAwXDAwMlwwNTZcMDAzXDAwMCIgKwotICAgICJcMDAyXDA1NlwwMDVcMDAwXDAwMlwwNTZcMDA1XDAwMFwwMDJcMDYwXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwNjBcMDA1XDAwMFwwMDJcMDYwXDAwNVwwMDBcMDAyXDA1NFwwMDNcMDAwXDAwMlwwNTQiICsKLSAgICAiXDAwNlwwMDBcMDAyXDA1MlwwMDNcMDAwXDAwMlwwNTJcMDA2XDAwMFwwMDJcMDUzXDAwMyIgKwotICAgICJcMDAwXDAwMlwwNTNcMDA2XDAwMFwwMDJcMDU1XDAwM1wwMDBcMDAyXDA1NVwwMDZcMDAwIiArCi0gICAgIlwwMDJcMDQ3XDAwM1wwMDBcMDAyXDA0N1wwMDRcMDAwXDAwMlwwNDdcMDA0XDAwMFwwMDIiICsKLSAgICAiXDEyMVwwMDNcMDAwXDAwMlwwNjNcMDAzXDAwMFwwMDJcMDYzXDAwM1wwMDBcMDAyXDA2MyIgKwotICAgICJcMDAzXDAwMFwwMDJcMDYzXDAwM1wwMDBcMDAyXDA2M1wwMDNcMDAwXDAwMlwwNjNcMDAzIiArCi0gICAgIlwwMDBcMDAyXDA2NFwwMDNcMDAwXDAwMlwwNjRcMDAzXDAwMFwwMDJcMDY0XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwNjRcMDAzXDAwMFwwMDJcMDY0XDAwM1wwMDBcMDAyXDA2NFwwMDNcMDAwXDAwMiIgKwotICAgICJcMDI3XDAwM1wwMDBcMDAyXDAyN1wwMDNcMDAwXDAwMlwwMjdcMDAzXDAwMFwwMDJcMTIwIiArCi0gICAgIlwwMDNcMDAwXDAwMlwxMjBcMDA0XDAwMFwwMDJcMTIwXDAwNFwwMDBcMDAyXDEyMFwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDQ2XDAwM1wwMDBcMDAyXDA0NlwwMDVcMDAwXDAwMlwwNDZcMDA1XDAwMCIgKwotICAgICJcMDAyXDA0NVwwMDNcMDAwXDAwMlwwNDVcMDAzXDAwMFwwMDJcMTIyXDAwNFwwMDBcMDAyIiArCi0gICAgIlwxMjJcMDA0XDAwMFwwMDJcMDQzXDAwNFwwMDBcMDAyXDA0M1wwMDNcMDAwXDAwMlwwMjYiICsKLSAgICAiXDAwNFwwMDBcMDAyXDAyNlwwMDRcMDAwXDAwMlwwMjZcMDA0XDAwMFwwMDJcMDI2XDAwNCIgKwotICAgICJcMDAwXDAwMlwwMjZcMDA0XDAwMFwwMDJcMDI2XDAwNFwwMDBcMDAyXDAyNlwwMDRcMDAwIiArCi0gICAgIlwwMDJcMDI2XDAwNFwwMDBcMDAyXDA0NFwwMDRcMDAwXDAwMlwwNDRcMDAzXDAwMFwwMDIiICsKLSAgICAiXDA0MVwwMDRcMDAwXDAwMlwwNDFcMDAzXDAwMFwwMDJcMDI1XDAwNFwwMDBcMDAyXDAyNSIgKwotICAgICJcMDA0XDAwMFwwMDJcMDI1XDAwNFwwMDBcMDAyXDAyNVwwMDRcMDAwXDAwMlwwMjVcMDA0IiArCi0gICAgIlwwMDBcMDAyXDA0MlwwMDNcMDAwXDAwMlwwNDBcMDAzXDAwMFwwMDJcMDQwXDAwM1wwMDAiICsKLSAgICAiXDAwMlwwNzFcMDAzXDAwMFwwMDJcMDcxXDAwM1wwMDBcMDAyXDAyM1wwMDNcMDAwXDAwMiIgKwotICAgICJcMDIzXDAwNVwwMDBcMDAyXDEyM1wwMDRcMDAwXDAwMlwwMzRcMDA0XDAwMFwwMDJcMDM0IiArCi0gICAgIlwwMDJcMDAwXDAwMlwxMjRcMDA1XDAwMFwwMDJcMDM3XDAwM1wwMDBcMDAyXDAzN1wwMDMiICsKLSAgICAiXDAwMFwwMDJcMDM3XDAwM1wwMDBcMDAyXDAzN1wwMDNcMDAwXDAwMlwwMzdcMDAzXDAwMCIgKwotICAgICJcMDAyXDA3M1wwMDNcMDAwXDAwMlwwNzNcMDAzXDAwMFwwMDJcMDc3XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwNzdcMDAzXDAwMFwwMDJcMDc3XDAwM1wwMDBcMDAyXDA3NFwwMDRcMDAwXDAwMlwwMzIiICsKLSAgICAiXDAwNFwwMDBcMDAyXDAzMlwwMDVcMDAwXDAwMlwwNzVcMDAzXDAwMFwwMDJcMDc2XDAwNSIgKwotICAgICJcMDAwXDAwMlwwNzZcMDA2XDAwMFwwMDJcMDMxXDAwM1wwMDBcMDAyXDAzMVwwMDVcMDAwIiArCi0gICAgIlwwMDJcMDUwXDAwM1wwMDBcMDAyXDA1MFwwMDRcMDAwXDAwMlwwNTFcMDAzXDAwMFwwMDIiICsKLSAgICAiXDA1MVwwMDRcMDAwXDAwMlwwNTFcMDA1XDAwMFwwMDJcMDI0XDAwM1wwMDBcMDAyXDAyNCIgKwotICAgICJcMDAzXDAwMFwwMDJcMDI0XDAwM1wwMDBcMDAyXDAzMFwwMDNcMDAwXDAwMlwwMzBcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAzMFwwMDVcMDAwXDAwMlwwMjBcMDAzXDAwMFwwMDJcMDcyXDAwM1wwMDAiICsKLSAgICAiXDAwMlwwNzJcMDAzXDAwMFwwMDJcMDcyXDAwM1wwMDBcMDAyXDA3MlwwMDNcMDAwXDAwMiIgKwotICAgICJcMDcyXDAwM1wwMDBcMDAyXDA3MlwwMDNcMDAwXDAwMlwwNzJcMDAzXDAwMFwwMDJcMDcyIiArCi0gICAgIlwwMDNcMDAwXDAwMlwwNzJcMDAzXDAwMFwwMDJcMTEwXDAwNVwwMDBcMDAyXDEwM1wwMDUiICsKLSAgICAiXDAwMFwwMDJcMTAzXDAwNlwwMDBcMDAyXDEwM1wwMDZcMDAwXDAwMlwxMDRcMDA1XDAwMCIgKwotICAgICJcMDAyXDEwNVwwMDVcMDAwXDAwMlwxMDZcMDA1XDAwMFwwMDJcMTA2XDAwNlwwMDBcMDAyIiArCi0gICAgIlwxMDZcMDA2XDAwMFwwMDJcMTA3XDAwNVwwMDBcMDAyXDEwN1wwMDZcMDAwXDAwMlwxMDciICsKLSAgICAiXDAxMFwwMDBcMDAyXDAxNlwwMDNcMDAwXDAwMlwwMTZcMDAzXDAwMFwwMDJcMTEyXDAwNiIgKwotICAgICJcMDAwXDAwMlwwMTVcMDAzXDAwMFwwMDJcMTExXDAwNVwwMDBcMDAyXDExMVwwMDZcMDAwIiArCi0gICAgIlwwMDJcMTExXDAxMFwwMDBcMDAyXDExMVwwMTFcMDAwXDAwMlwwMTJcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAxMlwwMDNcMDAwXDAwMlwxMTNcMDA2XDAwMFwwMDJcMDExXDAwM1wwMDBcMDAyXDAxNyIgKwotICAgICJcMDAzXDAwMFwwMDJcMDE0XDAwM1wwMDBcMDAyXDAxM1wwMDNcMDAwXDAwMlwxMDFcMDAzIiArCi0gICAgIlwwMDBcMDAyXDEwMFwwMDNcMDAwXDAwMlwxMDJcMDAzXDAwMFwwMDJcMDEwXDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMjJcMDAzXDAwMFwwMDJcMDIxXDAwM1wwMDBcMDAyXDAyMVwwMDVcMDAwXDAwMiIgKwotICAgICJcMDAzXDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDdcMDAzXDAwMFwwMDJcMDA1IiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDUiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNSIgKwotICAgICJcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMiIgKwotICAgICJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1IiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDVcMDAzXDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMDVcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDYiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNiIgKwotICAgICJcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMiIgKwotICAgICJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2IiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDA2XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMCIgKwotICAgICJcMDAyXDEyNVwwMDJcMDAwXDAwMlwwMDZcMDA1IiB9KTsKLQotICAvKiogQWNjZXNzIHRvIHByb2R1Y3Rpb24gdGFibGUuICovCi0gIHB1YmxpYyBzaG9ydFtdW10gcHJvZHVjdGlvbl90YWJsZSgpIHtyZXR1cm4gX3Byb2R1Y3Rpb25fdGFibGU7fQotCi0gIC8qKiBQYXJzZS1hY3Rpb24gdGFibGUuICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgc2hvcnRbXVtdIF9hY3Rpb25fdGFibGUgPSAKLSAgICB1bnBhY2tGcm9tU3RyaW5ncyhuZXcgU3RyaW5nW10gewotICAgICJcMDAwXHUwMTkyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjQiICsKLSAgICAiXDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MCIgKwotICAgICJcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1IiArCi0gICAgIlwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTEiICsKLSAgICAiXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MCIgKwotICAgICJcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDEwNlwwNzdcMTQyIiArCi0gICAgIlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMTU3XDEwNFwwNDZcMTA1XDE0N1wxMDYiICsKLSAgICAiXDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNCIgKwotICAgICJcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzIiArCi0gICAgIlwwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjMiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMTJcMDA0XHVmZjEyXDAwNVx1ZmYxMlwwMDZcdWZmMTJcMDA3IiArCi0gICAgIlx1ZmYxMlwwMTBcdWZmMTJcMDExXHVmZjEyXDAxMlx1ZmYxMlwwMTNcdWZmMTJcMDE0XHVmZjEyXDAxNVx1ZmYxMiIgKwotICAgICJcMDE2XHVmZjEyXDAxN1x1ZmYxMlwwMjBcdWZmMTJcMDIxXHVmZjEyXDAyMlx1ZmYxMlwwMjNcdWZmMTJcMDI0IiArCi0gICAgIlx1ZmYxMlwwMjVcdWZmMTJcMDI2XHUwMTk0XDAzMVx1ZmY0M1wwMzJcdWZmMTJcMDUzXHVmZjEyXDA1NFx1ZmYxMiIgKwotICAgICJcMDU1XHVmZjEyXDA1Nlx1ZmYxMlwwNTdcdWZmMTJcMDYwXHVmZjEyXDA2MVx1ZmYxMlwwNjJcdWZmMTJcMDYzIiArCi0gICAgIlx1ZmYxMlwwNjRcdWZmMTJcMDY1XHVmZjEyXDA2Nlx1ZmYxMlwwNjdcdWZmMTJcMDcxXHVmZjEyXDA3M1x1ZmYxMiIgKwotICAgICJcMDc0XHVmZjEyXDA3NVx1ZmYxMlwxMDBcdWZmMTJcMTAxXHVmZjEyXDEwMlx1ZmYxMlwxMDdcdWZmMTJcMTEwIiArCi0gICAgIlx1ZmYxMlwxMTFcdWZmMTJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY4ZFwwMDRcdWZmOGRcMDA1XHVmZjhkIiArCi0gICAgIlwwMDdcdWZmOGRcMDEwXHVmZjhkXDAxMVx1ZmY4ZFwwMTJcdWZmOGRcMDEzXHVmZjhkXDAxNFx1ZmY4ZFwwMTUiICsKLSAgICAiXHVmZjhkXDAxNlx1ZmY4ZFwwMTdcdWZmOGRcMDIwXHVmZjhkXDAyMVx1ZmY4ZFwwMjJcdWZmOGRcMDIzXHVmZjhkIiArCi0gICAgIlwwMjRcdWZmOGRcMDI1XHVmZjhkXDAzMlx1ZmY4ZFwwNTNcdWZmOGRcMDU0XHVmZjhkXDA1NVx1ZmY4ZFwwNTYiICsKLSAgICAiXHVmZjhkXDA1N1x1ZmY4ZFwwNjBcdWZmOGRcMDYxXHVmZjhkXDA2Mlx1ZmY4ZFwwNjNcdWZmOGRcMDY0XHVmZjhkIiArCi0gICAgIlwwNjVcdWZmOGRcMDY2XHVmZjhkXDA2N1x1ZmY4ZFwwNzFcdWZmOGRcMDczXHVmZjhkXDA3NFx1ZmY4ZFwwNzUiICsKLSAgICAiXHVmZjhkXDEwMFx1ZmY4ZFwxMDFcdWZmOGRcMTAyXHVmZjhkXDEwN1x1ZmY4ZFwxMTBcdWZmOGRcMTExXHVmZjhkIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxNzBcMDA2XDEwMVwwMTJcMTA3XDAyN1wwNzBcMDMwXDExN1wwMzMiICsKLSAgICAiXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNCIgKwotICAgICJcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxIiArCi0gICAgIlwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjUiICsKLSAgICAiXDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NSIgKwotICAgICJcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1IiArCi0gICAgIlwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTIiICsKLSAgICAiXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MSIgKwotICAgICJcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3IiArCi0gICAgIlwxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAyMlwwMDJcdWZmZmFcMDA1XHVmZmZhIiArCi0gICAgIlwwMDdcdWZmZmFcMDMyXHVmZmZhXDEwMFx1ZmZmYVwxMDFcdWZmZmFcMTA3XHVmZmZhXDExMVx1MDE5MVwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM0XDAwMlx1ZmYxMFwwMDRcdWZmMTBcMDA1XHVmZjEwXDAwNlx1ZmYxMFwwMDdcdWZmMTAiICsKLSAgICAiXDAxMFx1ZmYxMFwwMTFcdWZmMTBcMDEyXHVmZjEwXDAxM1x1ZmYxMFwwMTRcdWZmMTBcMDE1XHVmZjEwXDAxNiIgKwotICAgICJcdWZmMTBcMDE3XHVmZjEwXDAyMFx1ZmYxMFwwMjFcdWZmMTBcMDIyXHVmZjEwXDAyM1x1ZmYxMFwwMjRcdWZmMTAiICsKLSAgICAiXDAyNVx1ZmYxMFwwMjZcdTAxOTBcMDMxXHVmZjQxXDAzMlx1ZmYxMFwwNTNcdWZmMTBcMDU0XHVmZjEwXDA1NSIgKwotICAgICJcdWZmMTBcMDU2XHVmZjEwXDA1N1x1ZmYxMFwwNjBcdWZmMTBcMDYxXHVmZjEwXDA2Mlx1ZmYxMFwwNjNcdWZmMTAiICsKLSAgICAiXDA2NFx1ZmYxMFwwNjVcdWZmMTBcMDY2XHVmZjEwXDA2N1x1ZmYxMFwwNzFcdWZmMTBcMDczXHVmZjEwXDA3NCIgKwotICAgICJcdWZmMTBcMDc1XHVmZjEwXDEwMFx1ZmYxMFwxMDFcdWZmMTBcMTAyXHVmZjEwXDEwN1x1ZmYxMFwxMTBcdWZmMTAiICsKLSAgICAiXDExMVx1ZmYxMFwwMDFcMDAyXDAwMFwxNDZcMDEyXDEwN1wwMzZcMjMyXDAzN1wyNDBcMDQwIiArCi0gICAgIlx1MDEyNFwwNDFcMjQxXDA0MlwyMzdcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NiIgKwotICAgICJcMDQ3XDI0NFwwNTBcMjI1XDA1MVwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzIiArCi0gICAgIlwwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjMiICsKLSAgICAiXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMSIgKwotICAgICJcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0IiArCi0gICAgIlwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTYiICsKLSAgICAiXDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1MyIgKwotICAgICJcMTMxXDEyM1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjBlXDAwNFx1ZmYwZVwwMDVcdWZmMGVcMDA2IiArCi0gICAgIlx1ZmYwZVwwMDdcdWZmMGVcMDEwXHVmZjBlXDAxMVx1ZmYwZVwwMTJcdWZmMGVcMDEzXHVmZjBlXDAxNFx1ZmYwZSIgKwotICAgICJcMDE1XHVmZjBlXDAxNlx1ZmYwZVwwMTdcdWZmMGVcMDIwXHVmZjBlXDAyMVx1ZmYwZVwwMjJcdWZmMGVcMDIzIiArCi0gICAgIlx1ZmYwZVwwMjRcdWZmMGVcMDI1XHVmZjBlXDAyNlx1MDE4ZVwwMzFcdWZmM2ZcMDMyXHVmZjBlXDA1M1x1ZmYwZSIgKwotICAgICJcMDU0XHVmZjBlXDA1NVx1ZmYwZVwwNTZcdWZmMGVcMDU3XHVmZjBlXDA2MFx1ZmYwZVwwNjFcdWZmMGVcMDYyIiArCi0gICAgIlx1ZmYwZVwwNjNcdWZmMGVcMDY0XHVmZjBlXDA2NVx1ZmYwZVwwNjZcdWZmMGVcMDY3XHVmZjBlXDA3MVx1ZmYwZSIgKwotICAgICJcMDczXHVmZjBlXDA3NFx1ZmYwZVwwNzVcdWZmMGVcMTAwXHVmZjBlXDEwMVx1ZmYwZVwxMDJcdWZmMGVcMTA3IiArCi0gICAgIlx1ZmYwZVwxMTBcdWZmMGVcMTExXHVmZjBlXDAwMVwwMDJcMDAwXDAwNFwwMDJcdTAxOGRcMDAxXDAwMiIgKwotICAgICJcMDAwXDEyMFwwMDJcdWZmZDNcMDA1XHVmZmQzXDAwN1x1ZmZkM1wwMTBcdWZmZDNcMDExXHVmZmQzXDAxMiIgKwotICAgICJcdWZmZDNcMDEzXHVmZmQzXDAxNFx1ZmZkM1wwMTVcdWZmZDNcMDE2XHVmZmQzXDAxN1x1ZmZkM1wwMjBcdWZmZDMiICsKLSAgICAiXDAyMVx1ZmZkM1wwMjJcdWZmZDNcMDIzXHVmZmQzXDAzMlx1ZmZkM1wwNTNcdWZmZDNcMDU0XHVmZmQzXDA1NSIgKwotICAgICJcdWZmZDNcMDU2XHVmZmQzXDA1N1x1ZmZkM1wwNjBcdWZmZDNcMDYxXHVmZmQzXDA2Mlx1ZmZkM1wwNjNcdWZmZDMiICsKLSAgICAiXDA2NFx1ZmZkM1wwNjVcdWZmZDNcMDY2XHVmZmQzXDA2N1x1ZmZkM1wwNzFcdWZmZDNcMDczXHVmZmQzXDA3NCIgKwotICAgICJcdTAxOGFcMDc1XHVmZmQzXDEwMFx1ZmZkM1wxMDFcdWZmZDNcMTAyXHVmZmQzXDEwN1x1ZmZkM1wxMTBcdWZmZDMiICsKLSAgICAiXDExMVx1ZmZkM1wwMDFcMDAyXDAwMFwxMTJcMDAyXHVmZmQ5XDAwNVx1ZmZkOVwwMDdcdWZmZDlcMDEwIiArCi0gICAgIlx1ZmZkOVwwMTFcdWZmZDlcMDEyXHVmZmQ5XDAxM1x1ZmZkOVwwMTRcdWZmZDlcMDE1XHVmZmQ5XDAxNlx1ZmZkOSIgKwotICAgICJcMDE3XHVmZmQ5XDAyMFx1ZmZkOVwwMjFcdWZmZDlcMDIyXHVmZmQ5XDAyM1x1ZmZkOVwwMzJcdWZmZDlcMDUzIiArCi0gICAgIlx1ZmZkOVwwNTRcdWZmZDlcMDU1XHVmZmQ5XDA1Nlx1ZmZkOVwwNTdcdWZmZDlcMDYwXHVmZmQ5XDA2MVx1ZmZkOSIgKwotICAgICJcMDYyXHVmZmQ5XDA2M1x1ZmZkOVwwNjRcdWZmZDlcMDY1XHVmZmQ5XDA2Nlx1ZmZkOVwwNjdcdTAxODdcMDc1IiArCi0gICAgIlx1ZmZkOVwxMDBcdWZmZDlcMTAxXHVmZmQ5XDEwMlx1ZmZkOVwxMDdcdWZmZDlcMTEwXHVmZmQ5XDExMVx1ZmZkOSIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA2XDAwNlx1MDE3ZlwwMzFcdWZmMjNcMDAxXDAwMlwwMDBcMTI2XDAwMiIgKwotICAgICJcdWZmOGNcMDA0XHVmZjhjXDAwNVx1ZmY4Y1wwMDdcdWZmOGNcMDEwXHVmZjhjXDAxMVx1ZmY4Y1wwMTJcdWZmOGMiICsKLSAgICAiXDAxM1x1ZmY4Y1wwMTRcdWZmOGNcMDE1XHVmZjhjXDAxNlx1ZmY4Y1wwMTdcdWZmOGNcMDIwXHVmZjhjXDAyMSIgKwotICAgICJcdWZmOGNcMDIyXHVmZjhjXDAyM1x1ZmY4Y1wwMjRcdWZmOGNcMDI1XHVmZjhjXDAzMlx1ZmY4Y1wwNTNcdWZmOGMiICsKLSAgICAiXDA1NFx1ZmY4Y1wwNTVcdWZmOGNcMDU2XHVmZjhjXDA1N1x1ZmY4Y1wwNjBcdWZmOGNcMDYxXHVmZjhjXDA2MiIgKwotICAgICJcdWZmOGNcMDYzXHVmZjhjXDA2NFx1ZmY4Y1wwNjVcdWZmOGNcMDY2XHVmZjhjXDA2N1x1ZmY4Y1wwNzFcdWZmOGMiICsKLSAgICAiXDA3M1x1ZmY4Y1wwNzRcdWZmOGNcMDc1XHVmZjhjXDEwMFx1ZmY4Y1wxMDFcdWZmOGNcMTAyXHVmZjhjXDEwNyIgKwotICAgICJcdWZmOGNcMTEwXHVmZjhjXDExMVx1ZmY4Y1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjBmXDAwNFx1ZmYwZiIgKwotICAgICJcMDA1XHVmZjBmXDAwNlx1ZmYwZlwwMDdcdWZmMGZcMDEwXHVmZjBmXDAxMVx1ZmYwZlwwMTJcdWZmMGZcMDEzIiArCi0gICAgIlx1ZmYwZlwwMTRcdWZmMGZcMDE1XHVmZjBmXDAxNlx1ZmYwZlwwMTdcdWZmMGZcMDIwXHVmZjBmXDAyMVx1ZmYwZiIgKwotICAgICJcMDIyXHVmZjBmXDAyM1x1ZmYwZlwwMjRcdWZmMGZcMDI1XHVmZjBmXDAyNlx1MDE3ZVwwMzFcdWZmNDBcMDMyIiArCi0gICAgIlx1ZmYwZlwwNTNcdWZmMGZcMDU0XHVmZjBmXDA1NVx1ZmYwZlwwNTZcdWZmMGZcMDU3XHVmZjBmXDA2MFx1ZmYwZiIgKwotICAgICJcMDYxXHVmZjBmXDA2Mlx1ZmYwZlwwNjNcdWZmMGZcMDY0XHVmZjBmXDA2NVx1ZmYwZlwwNjZcdWZmMGZcMDY3IiArCi0gICAgIlx1ZmYwZlwwNzFcdWZmMGZcMDczXHVmZjBmXDA3NFx1ZmYwZlwwNzVcdWZmMGZcMTAwXHVmZjBmXDEwMVx1ZmYwZiIgKwotICAgICJcMTAyXHVmZjBmXDEwN1x1ZmYwZlwxMTBcdWZmMGZcMTExXHVmZjBmXDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZjkxXDAwNFx1ZmY5MVwwMDVcdWZmOTFcMDA3XHVmZjkxXDAxMFx1ZmY5MVwwMTFcdWZmOTFcMDEyXHVmZjkxIiArCi0gICAgIlwwMTNcdWZmOTFcMDE0XHVmZjkxXDAxNVx1ZmY5MVwwMTZcdWZmOTFcMDE3XHVmZjkxXDAyMFx1ZmY5MVwwMjEiICsKLSAgICAiXHVmZjkxXDAyMlx1ZmY5MVwwMjNcdWZmOTFcMDI0XHVmZjkxXDAyNVx1ZmY5MVwwMzJcdWZmOTFcMDUzXHVmZjkxIiArCi0gICAgIlwwNTRcdWZmOTFcMDU1XHVmZjkxXDA1Nlx1ZmY5MVwwNTdcdWZmOTFcMDYwXHVmZjkxXDA2MVx1ZmY5MVwwNjIiICsKLSAgICAiXHVmZjkxXDA2M1x1ZmY5MVwwNjRcdWZmOTFcMDY1XHVmZjkxXDA2Nlx1ZmY5MVwwNjdcdWZmOTFcMDcxXHVmZjkxIiArCi0gICAgIlwwNzNcdWZmOTFcMDc0XHVmZjkxXDA3NVx1ZmY5MVwxMDBcdWZmOTFcMTAxXHVmZjkxXDEwMlx1ZmY5MVwxMDciICsKLSAgICAiXHVmZjkxXDExMFx1ZmY5MVwxMTFcdWZmOTFcMDAxXDAwMlwwMDBcMjQyXDAwMlx1ZmZiZVwwMDVcdWZmYmUiICsKLSAgICAiXDAwNlwxMDFcMDA3XHVmZmJlXDAxMFx1ZmZiZVwwMTFcdWZmYmVcMDEyXDEwN1wwMTNcdWZmYmVcMDE0IiArCi0gICAgIlx1ZmZiZVwwMTVcdWZmYmVcMDE2XHVmZmJlXDAxN1x1ZmZiZVwwMjBcdWZmYmVcMDIxXHVmZmJlXDAyMlx1ZmZiZSIgKwotICAgICJcMDIzXHVmZmJlXDAyN1wwNzBcMDMwXDExN1wwMzJcdWZmYmVcMDMzXDA3MVwwMzRcMTIwXDAzNiIgKwotICAgICJcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwIiArCi0gICAgIlwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNTMiICsKLSAgICAiXHVmZmJlXDA1NFx1ZmZiZVwwNTVcdWZmYmVcMDU2XHVmZmJlXDA1N1x1ZmZiZVwwNjBcdWZmYmVcMDYxXDExMSIgKwotICAgICJcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwIiArCi0gICAgIlwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDIiICsKLSAgICAiXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNiIgKwotICAgICJcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0IiArCi0gICAgIlwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjMiICsKLSAgICAiXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyMyIgKwotICAgICJcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYwNFwwMDRcdWZmMDRcMDA1XHVmZjA0XDAwNlx1ZmYwNFwwMDciICsKLSAgICAiXHVmZjA0XDAxMFx1ZmYwNFwwMTFcdWZmMDRcMDEyXHVmZjA0XDAxM1x1ZmYwNFwwMTRcdWZmMDRcMDE1XHVmZjA0IiArCi0gICAgIlwwMTZcdWZmMDRcMDE3XHVmZjA0XDAyMFx1ZmYwNFwwMjFcdWZmMDRcMDIyXHVmZjA0XDAyM1x1ZmYwNFwwMjQiICsKLSAgICAiXHVmZjA0XDAyNVx1ZmYwNFwwMzFcdWZmMzVcMDMyXHVmZjA0XDAzNVx1ZmYwNFwwNTNcdWZmMDRcMDU0XHVmZjA0IiArCi0gICAgIlwwNTVcdWZmMDRcMDU2XHVmZjA0XDA1N1x1ZmYwNFwwNjBcdWZmMDRcMDYxXHVmZjA0XDA2Mlx1ZmYwNFwwNjMiICsKLSAgICAiXHVmZjA0XDA2NFx1ZmYwNFwwNjVcdWZmMDRcMDY2XHVmZjA0XDA2N1x1ZmYwNFwwNzFcdWZmMDRcMDczXHVmZjA0IiArCi0gICAgIlwwNzRcdWZmMDRcMDc1XHVmZjA0XDA3N1x1ZmYwNFwxMDBcdWZmMDRcMTAxXHVmZjA0XDEwMlx1ZmYwNFwxMDciICsKLSAgICAiXHVmZjA0XDExMFx1ZmYwNFwxMTFcdWZmMDRcMDAxXDAwMlwwMDBcMDA2XDAwNlx1MDE3YlwwMzFcdWZmMWYiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNzdcMDA0XHVmZjc3XDAwNVx1ZmY3N1wwMDdcdWZmNzdcMDEwIiArCi0gICAgIlx1ZmY3N1wwMTFcdWZmNzdcMDEyXHVmZjc3XDAxM1x1ZmY3N1wwMTRcdWZmNzdcMDE1XHVmZjc3XDAxNlx1ZmY3NyIgKwotICAgICJcMDE3XHVmZjc3XDAyMFx1ZmY3N1wwMjFcdWZmNzdcMDIyXHVmZjc3XDAyM1x1ZmY3N1wwMjRcdWZmNzdcMDI1IiArCi0gICAgIlx1ZmY3N1wwMzJcdWZmNzdcMDM1XHVmZjc3XDA1M1x1ZmY3N1wwNTRcdWZmNzdcMDU1XHVmZjc3XDA1Nlx1ZmY3NyIgKwotICAgICJcMDU3XHVmZjc3XDA2MFx1ZmY3N1wwNjFcdWZmNzdcMDYyXHVmZjc3XDA2M1x1ZmY3N1wwNjRcdWZmNzdcMDY1IiArCi0gICAgIlx1ZmY3N1wwNjZcdWZmNzdcMDY3XHVmZjc3XDA3MVx1ZmY3N1wwNzNcdWZmNzdcMDc0XHVmZjc3XDA3NVx1ZmY3NyIgKwotICAgICJcMTAwXHVmZjc3XDEwMVx1ZmY3N1wxMDJcdWZmNzdcMTA3XHVmZjc3XDExMFx1ZmY3N1wxMTFcdWZmNzdcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzMFwwMDJcdWZmNzFcMDA0XHVmZjcxXDAwNVx1ZmY3MVwwMDdcdWZmNzFcMDEwXHVmZjcxIiArCi0gICAgIlwwMTFcdWZmNzFcMDEyXHVmZjcxXDAxM1x1ZmY3MVwwMTRcdWZmNzFcMDE1XHVmZjcxXDAxNlx1ZmY3MVwwMTciICsKLSAgICAiXHVmZjcxXDAyMFx1ZmY3MVwwMjFcdWZmNzFcMDIyXHVmZjcxXDAyM1x1ZmY3MVwwMjRcdWZmNzFcMDI1XHVmZjcxIiArCi0gICAgIlwwMzJcdWZmNzFcMDM1XHVmZjcxXDA1M1x1ZmY3MVwwNTRcdWZmNzFcMDU1XHVmZjcxXDA1Nlx1ZmY3MVwwNTciICsKLSAgICAiXHVmZjcxXDA2MFx1ZmY3MVwwNjFcdWZmNzFcMDYyXHVmZjcxXDA2M1x1ZmY3MVwwNjRcdWZmNzFcMDY1XHVmZjcxIiArCi0gICAgIlwwNjZcdWZmNzFcMDY3XHVmZjcxXDA3MVx1ZmY3MVwwNzNcdWZmNzFcMDc0XHVmZjcxXDA3NVx1ZmY3MVwxMDAiICsKLSAgICAiXHVmZjcxXDEwMVx1ZmY3MVwxMDJcdWZmNzFcMTA3XHVmZjcxXDExMFx1ZmY3MVwxMTFcdWZmNzFcMDAxXDAwMiIgKwotICAgICJcMDAwXDA3MFwwMDJcdWZmZTlcMDA1XHVmZmU5XDAwN1x1ZmZlOVwwMTBcdTAxNzZcMDExXHUwMTc3XDAxNCIgKwotICAgICJcdWZmZTlcMDE1XHVmZmU5XDAxNlx1ZmZlOVwwMTdcdWZmZTlcMDIwXHVmZmU5XDAyMVx1ZmZlOVwwMjJcdWZmZTkiICsKLSAgICAiXDAyM1x1ZmZlOVwwMzJcdWZmZTlcMDUzXHVmZmU5XDA1NFx1ZmZlOVwwNTVcdWZmZTlcMDU2XHVmZmU5XDA1NyIgKwotICAgICJcdWZmZTlcMDYwXHVmZmU5XDA3NVx1ZmZlOVwxMDBcdWZmZTlcMTAxXHVmZmU5XDEwMlx1MDE3NVwxMDdcdWZmZTkiICsKLSAgICAiXDExMFx1ZmZlOVwxMTFcdWZmZTlcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiN1wwMDVcdWZmYjdcMDA3IiArCi0gICAgIlx1ZmZiN1wwMTBcdWZmYjdcMDExXHVmZmI3XDAxMlx1ZmZiN1wwMTNcdWZmYjdcMDE0XHVmZmI3XDAxNVx1ZmZiNyIgKwotICAgICJcMDE2XHVmZmI3XDAxN1x1ZmZiN1wwMjBcdWZmYjdcMDIxXHVmZmI3XDAyMlx1ZmZiN1wwMjNcdWZmYjdcMDI0IiArCi0gICAgIlx1ZmZiN1wwMjVcdWZmYjdcMDMyXHVmZmI3XDA1M1x1ZmZiN1wwNTRcdWZmYjdcMDU1XHVmZmI3XDA1Nlx1ZmZiNyIgKwotICAgICJcMDU3XHVmZmI3XDA2MFx1ZmZiN1wwNjFcdWZmYjdcMDYyXHVmZmI3XDA2M1x1ZmZiN1wwNjRcdWZmYjdcMDY1IiArCi0gICAgIlx1ZmZiN1wwNjZcdWZmYjdcMDY3XHVmZmI3XDA3MVx1ZmZiN1wwNzNcdWZmYjdcMDc0XHVmZmI3XDA3NVx1ZmZiNyIgKwotICAgICJcMTAwXHVmZmI3XDEwMVx1ZmZiN1wxMDJcdWZmYjdcMTA3XHVmZmI3XDExMFx1ZmZiN1wxMTFcdWZmYjdcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNFwwMDJcdWZmMGRcMDA0XHVmZjBkXDAwNVx1ZmYwZFwwMDZcdWZmMGRcMDA3XHVmZjBkIiArCi0gICAgIlwwMTBcdWZmMGRcMDExXHVmZjBkXDAxMlx1ZmYwZFwwMTNcdWZmMGRcMDE0XHVmZjBkXDAxNVx1ZmYwZFwwMTYiICsKLSAgICAiXHVmZjBkXDAxN1x1ZmYwZFwwMjBcdWZmMGRcMDIxXHVmZjBkXDAyMlx1ZmYwZFwwMjNcdWZmMGRcMDI0XHVmZjBkIiArCi0gICAgIlwwMjVcdWZmMGRcMDI2XHUwMTc0XDAzMVx1ZmYzZVwwMzJcdWZmMGRcMDUzXHVmZjBkXDA1NFx1ZmYwZFwwNTUiICsKLSAgICAiXHVmZjBkXDA1Nlx1ZmYwZFwwNTdcdWZmMGRcMDYwXHVmZjBkXDA2MVx1ZmYwZFwwNjJcdWZmMGRcMDYzXHVmZjBkIiArCi0gICAgIlwwNjRcdWZmMGRcMDY1XHVmZjBkXDA2Nlx1ZmYwZFwwNjdcdWZmMGRcMDcxXHVmZjBkXDA3M1x1ZmYwZFwwNzQiICsKLSAgICAiXHVmZjBkXDA3NVx1ZmYwZFwxMDBcdWZmMGRcMTAxXHVmZjBkXDEwMlx1ZmYwZFwxMDdcdWZmMGRcMTEwXHVmZjBkIiArCi0gICAgIlwxMTFcdWZmMGRcMDAxXDAwMlwwMDBcMTQ2XDAxMlwxMDdcMDM2XDIzMlwwMzdcMjQwXDA0MCIgKwotICAgICJcdTAxMjRcMDQxXDI0MVwwNDJcMjM3XDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDYiICsKLSAgICAiXDA0N1wyNDRcMDUwXDIyNVwwNTFcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2MyIgKwotICAgICJcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzIiArCi0gICAgIlwwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDEiICsKLSAgICAiXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNCIgKwotICAgICJcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2IiArCi0gICAgIlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTMiICsKLSAgICAiXDEzMVwxMjNcMDAxXDAwMlwwMDBcMTE2XDAwMlx1ZmZkNVwwMDVcdWZmZDVcMDA3XHVmZmQ1XDAxMCIgKwotICAgICJcdWZmZDVcMDExXHVmZmQ1XDAxMlx1ZmZkNVwwMTNcdWZmZDVcMDE0XHVmZmQ1XDAxNVx1ZmZkNVwwMTZcdWZmZDUiICsKLSAgICAiXDAxN1x1ZmZkNVwwMjBcdWZmZDVcMDIxXHVmZmQ1XDAyMlx1ZmZkNVwwMjNcdWZmZDVcMDMyXHVmZmQ1XDA1MyIgKwotICAgICJcdWZmZDVcMDU0XHVmZmQ1XDA1NVx1ZmZkNVwwNTZcdWZmZDVcMDU3XHVmZmQ1XDA2MFx1ZmZkNVwwNjFcdWZmZDUiICsKLSAgICAiXDA2Mlx1ZmZkNVwwNjNcdWZmZDVcMDY0XHVmZmQ1XDA2NVx1ZmZkNVwwNjZcdWZmZDVcMDY3XHVmZmQ1XDA3MSIgKwotICAgICJcdWZmZDVcMDczXHUwMTZlXDA3NVx1ZmZkNVwxMDBcdWZmZDVcMTAxXHVmZmQ1XDEwMlx1ZmZkNVwxMDdcdWZmZDUiICsKLSAgICAiXDExMFx1ZmZkNVwxMTFcdWZmZDVcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY1M1wwMDRcdWZmNTNcMDA1IiArCi0gICAgIlx1ZmY1M1wwMDdcdWZmNTNcMDEwXHVmZjUzXDAxMVx1ZmY1M1wwMTJcdWZmNTNcMDEzXHVmZjUzXDAxNFx1ZmY1MyIgKwotICAgICJcMDE1XHVmZjUzXDAxNlx1ZmY1M1wwMTdcdWZmNTNcMDIwXHVmZjUzXDAyMVx1ZmY1M1wwMjJcdWZmNTNcMDIzIiArCi0gICAgIlx1ZmY1M1wwMjRcdWZmNTNcMDI1XHVmZjUzXDAzMlx1ZmY1M1wwNTNcdWZmNTNcMDU0XHVmZjUzXDA1NVx1ZmY1MyIgKwotICAgICJcMDU2XHVmZjUzXDA1N1x1ZmY1M1wwNjBcdWZmNTNcMDYxXHVmZjUzXDA2Mlx1ZmY1M1wwNjNcdWZmNTNcMDY0IiArCi0gICAgIlx1ZmY1M1wwNjVcdWZmNTNcMDY2XHVmZjUzXDA2N1x1ZmY1M1wwNzFcdWZmNTNcMDczXHVmZjUzXDA3NFx1ZmY1MyIgKwotICAgICJcMDc1XHVmZjUzXDEwMFx1ZmY1M1wxMDFcdWZmNTNcMTAyXHVmZjUzXDEwN1x1ZmY1M1wxMTBcdWZmNTNcMTExIiArCi0gICAgIlx1ZmY1M1wwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjUxXDAwNFx1ZmY1MVwwMDVcdWZmNTFcMDA3XHVmZjUxIiArCi0gICAgIlwwMTBcdWZmNTFcMDExXHVmZjUxXDAxMlx1ZmY1MVwwMTNcdWZmNTFcMDE0XHVmZjUxXDAxNVx1ZmY1MVwwMTYiICsKLSAgICAiXHVmZjUxXDAxN1x1ZmY1MVwwMjBcdWZmNTFcMDIxXHVmZjUxXDAyMlx1ZmY1MVwwMjNcdWZmNTFcMDI0XHVmZjUxIiArCi0gICAgIlwwMjVcdWZmNTFcMDMyXHVmZjUxXDA1M1x1ZmY1MVwwNTRcdWZmNTFcMDU1XHVmZjUxXDA1Nlx1ZmY1MVwwNTciICsKLSAgICAiXHVmZjUxXDA2MFx1ZmY1MVwwNjFcdWZmNTFcMDYyXHVmZjUxXDA2M1x1ZmY1MVwwNjRcdWZmNTFcMDY1XHVmZjUxIiArCi0gICAgIlwwNjZcdWZmNTFcMDY3XHVmZjUxXDA3MVx1ZmY1MVwwNzNcdWZmNTFcMDc0XHVmZjUxXDA3NVx1ZmY1MVwxMDAiICsKLSAgICAiXHVmZjUxXDEwMVx1ZmY1MVwxMDJcdWZmNTFcMTA3XHVmZjUxXDExMFx1ZmY1MVwxMTFcdWZmNTFcMDAxXDAwMiIgKwotICAgICJcMDAwXDAyMFwwMDJcdWZmZmNcMDA1XHVmZmZjXDAwN1x1ZmZmY1wwMzJcdWZmZmNcMTAwXHVmZmZjXDEwMSIgKwotICAgICJcdWZmZmNcMTA3XHVmZmZjXDAwMVwwMDJcMDAwXDAwNlwwMDJcMDAxXDAzMlwyMTZcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzNFwwMDJcdWZmMTVcMDA0XHVmZjE1XDAwNVx1ZmYxNVwwMDZcdWZmMTVcMDA3XHVmZjE1XDAxMCIgKwotICAgICJcdWZmMTVcMDExXHVmZjE1XDAxMlx1ZmYxNVwwMTNcdWZmMTVcMDE0XHVmZjE1XDAxNVx1ZmYxNVwwMTZcdWZmMTUiICsKLSAgICAiXDAxN1x1ZmYxNVwwMjBcdWZmMTVcMDIxXHVmZjE1XDAyMlx1ZmYxNVwwMjNcdWZmMTVcMDI0XHVmZjE1XDAyNSIgKwotICAgICJcdWZmMTVcMDI2XHUwMTZkXDAzMVx1ZmY0N1wwMzJcdWZmMTVcMDUzXHVmZjE1XDA1NFx1ZmYxNVwwNTVcdWZmMTUiICsKLSAgICAiXDA1Nlx1ZmYxNVwwNTdcdWZmMTVcMDYwXHVmZjE1XDA2MVx1ZmYxNVwwNjJcdWZmMTVcMDYzXHVmZjE1XDA2NCIgKwotICAgICJcdWZmMTVcMDY1XHVmZjE1XDA2Nlx1ZmYxNVwwNjdcdWZmMTVcMDcxXHVmZjE1XDA3M1x1ZmYxNVwwNzRcdWZmMTUiICsKLSAgICAiXDA3NVx1ZmYxNVwxMDBcdWZmMTVcMTAxXHVmZjE1XDEwMlx1ZmYxNVwxMDdcdWZmMTVcMTEwXHVmZjE1XDExMSIgKwotICAgICJcdWZmMTVcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxMVwwMDRcdWZmMTFcMDA1XHVmZjExXDAwNlx1ZmYxMSIgKwotICAgICJcMDA3XHVmZjExXDAxMFx1ZmYxMVwwMTFcdWZmMTFcMDEyXHVmZjExXDAxM1x1ZmYxMVwwMTRcdWZmMTFcMDE1IiArCi0gICAgIlx1ZmYxMVwwMTZcdWZmMTFcMDE3XHVmZjExXDAyMFx1ZmYxMVwwMjFcdWZmMTFcMDIyXHVmZjExXDAyM1x1ZmYxMSIgKwotICAgICJcMDI0XHVmZjExXDAyNVx1ZmYxMVwwMjZcdTAxNmNcMDMxXHVmZjQyXDAzMlx1ZmYxMVwwNTNcdWZmMTFcMDU0IiArCi0gICAgIlx1ZmYxMVwwNTVcdWZmMTFcMDU2XHVmZjExXDA1N1x1ZmYxMVwwNjBcdWZmMTFcMDYxXHVmZjExXDA2Mlx1ZmYxMSIgKwotICAgICJcMDYzXHVmZjExXDA2NFx1ZmYxMVwwNjVcdWZmMTFcMDY2XHVmZjExXDA2N1x1ZmYxMVwwNzFcdWZmMTFcMDczIiArCi0gICAgIlx1ZmYxMVwwNzRcdWZmMTFcMDc1XHVmZjExXDEwMFx1ZmYxMVwxMDFcdWZmMTFcMTAyXHVmZjExXDEwN1x1ZmYxMSIgKwotICAgICJcMTEwXHVmZjExXDExMVx1ZmYxMVwwMDFcMDAyXDAwMFwwMDRcMDMxXHVmZjRjXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTBcMDAyXHVmZmRjXDAwNVx1ZmZkY1wwMDdcdWZmZGNcMDEwXHVmZmRjXDAxMVx1ZmZkY1wwMTJcdWZmZGMiICsKLSAgICAiXDAxM1x1ZmZkY1wwMTRcdWZmZGNcMDE1XHVmZmRjXDAxNlx1ZmZkY1wwMTdcdWZmZGNcMDIwXHVmZmRjXDAyMSIgKwotICAgICJcdWZmZGNcMDIyXHVmZmRjXDAyM1x1ZmZkY1wwMzJcdWZmZGNcMDUzXHVmZmRjXDA1NFx1ZmZkY1wwNTVcdWZmZGMiICsKLSAgICAiXDA1Nlx1ZmZkY1wwNTdcdWZmZGNcMDYwXHVmZmRjXDA2MVx1ZmZkY1wwNjJcdWZmZGNcMDYzXHVmZmRjXDA2NCIgKwotICAgICJcdWZmZGNcMDY1XHVmZmRjXDA2Nlx1ZmZkY1wwNzVcdWZmZGNcMTAwXHVmZmRjXDEwMVx1ZmZkY1wxMDJcdWZmZGMiICsKLSAgICAiXDEwN1x1ZmZkY1wxMTBcdWZmZGNcMTExXHVmZmRjXDAwMVwwMDJcMDAwXDEwNFwwMDJcdWZmZTRcMDA1IiArCi0gICAgIlx1ZmZlNFwwMDdcdWZmZTRcMDEwXHVmZmU0XDAxMVx1ZmZlNFwwMTJcdWZmZTRcMDEzXHUwMTA3XDAxNFx1ZmZlNCIgKwotICAgICJcMDE1XHVmZmU0XDAxNlx1ZmZlNFwwMTdcdWZmZTRcMDIwXHVmZmU0XDAyMVx1ZmZlNFwwMjJcdWZmZTRcMDIzIiArCi0gICAgIlx1ZmZlNFwwMzJcdWZmZTRcMDUzXHVmZmU0XDA1NFx1ZmZlNFwwNTVcdWZmZTRcMDU2XHVmZmU0XDA1N1x1ZmZlNCIgKwotICAgICJcMDYwXHVmZmU0XDA2MVx1ZmZlNFwwNjJcdWZmZTRcMDYzXHVmZmU0XDA2NFx1MDEwNlwwNzVcdWZmZTRcMTAwIiArCi0gICAgIlx1ZmZlNFwxMDFcdWZmZTRcMTAyXHVmZmU0XDEwN1x1ZmZlNFwxMTBcdWZmZTRcMTExXHVmZmU0XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzRcMDAyXHVmZjEzXDAwNFx1ZmYxM1wwMDVcdWZmMTNcMDA2XHVmZjEzXDAwN1x1ZmYxM1wwMTAiICsKLSAgICAiXHVmZjEzXDAxMVx1ZmYxM1wwMTJcdWZmMTNcMDEzXHVmZjEzXDAxNFx1ZmYxM1wwMTVcdWZmMTNcMDE2XHVmZjEzIiArCi0gICAgIlwwMTdcdWZmMTNcMDIwXHVmZjEzXDAyMVx1ZmYxM1wwMjJcdWZmMTNcMDIzXHVmZjEzXDAyNFx1ZmYxM1wwMjUiICsKLSAgICAiXHVmZjEzXDAyNlx1MDE2YlwwMzFcdWZmNDRcMDMyXHVmZjEzXDA1M1x1ZmYxM1wwNTRcdWZmMTNcMDU1XHVmZjEzIiArCi0gICAgIlwwNTZcdWZmMTNcMDU3XHVmZjEzXDA2MFx1ZmYxM1wwNjFcdWZmMTNcMDYyXHVmZjEzXDA2M1x1ZmYxM1wwNjQiICsKLSAgICAiXHVmZjEzXDA2NVx1ZmYxM1wwNjZcdWZmMTNcMDY3XHVmZjEzXDA3MVx1ZmYxM1wwNzNcdWZmMTNcMDc0XHVmZjEzIiArCi0gICAgIlwwNzVcdWZmMTNcMTAwXHVmZjEzXDEwMVx1ZmYxM1wxMDJcdWZmMTNcMTA3XHVmZjEzXDExMFx1ZmYxM1wxMTEiICsKLSAgICAiXHVmZjEzXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZlZmJcMDA0XHVmZWZiXDAwNVx1ZmVmYlwwMDZcdWZlZmIiICsKLSAgICAiXDAwN1x1ZmVmYlwwMTBcdWZlZmJcMDExXHVmZWZiXDAxMlx1ZmVmYlwwMTNcdWZlZmJcMDE0XHVmZWZiXDAxNSIgKwotICAgICJcdWZlZmJcMDE2XHVmZWZiXDAxN1x1ZmVmYlwwMjBcdWZlZmJcMDIxXHVmZWZiXDAyMlx1ZmVmYlwwMjNcdWZlZmIiICsKLSAgICAiXDAyNFx1ZmVmYlwwMjVcdWZlZmJcMDMxXHVmZjJjXDAzMlx1ZmVmYlwwMzNcdTAxNjdcMDUzXHVmZWZiXDA1NCIgKwotICAgICJcdWZlZmJcMDU1XHVmZWZiXDA1Nlx1ZmVmYlwwNTdcdWZlZmJcMDYwXHVmZWZiXDA2MVx1ZmVmYlwwNjJcdWZlZmIiICsKLSAgICAiXDA2M1x1ZmVmYlwwNjRcdWZlZmJcMDY1XHVmZWZiXDA2Nlx1ZmVmYlwwNjdcdWZlZmJcMDcxXHVmZWZiXDA3MyIgKwotICAgICJcdWZlZmJcMDc0XHVmZWZiXDA3NVx1ZmVmYlwxMDBcdWZlZmJcMTAxXHVmZWZiXDEwMlx1ZmVmYlwxMDdcdWZlZmIiICsKLSAgICAiXDExMFx1ZmVmYlwxMTFcdWZlZmJcMDAxXDAwMlwwMDBcMDA2XDAwNlx1MDE2NVwwMzFcdWZmMWJcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNlwwMDJcdWZmMDZcMDA0XHVmZjA2XDAwNVx1ZmYwNlwwMDZcdWZmMDZcMDA3XHVmZjA2IiArCi0gICAgIlwwMTBcdWZmMDZcMDExXHVmZjA2XDAxMlx1ZmYwNlwwMTNcdWZmMDZcMDE0XHVmZjA2XDAxNVx1ZmYwNlwwMTYiICsKLSAgICAiXHVmZjA2XDAxN1x1ZmYwNlwwMjBcdWZmMDZcMDIxXHVmZjA2XDAyMlx1ZmYwNlwwMjNcdWZmMDZcMDI0XHVmZjA2IiArCi0gICAgIlwwMjVcdWZmMDZcMDMxXHVmZjM3XDAzMlx1ZmYwNlwwMzVcdWZmMDZcMDUzXHVmZjA2XDA1NFx1ZmYwNlwwNTUiICsKLSAgICAiXHVmZjA2XDA1Nlx1ZmYwNlwwNTdcdWZmMDZcMDYwXHVmZjA2XDA2MVx1ZmYwNlwwNjJcdWZmMDZcMDYzXHVmZjA2IiArCi0gICAgIlwwNjRcdWZmMDZcMDY1XHVmZjA2XDA2Nlx1ZmYwNlwwNjdcdWZmMDZcMDcxXHVmZjA2XDA3M1x1ZmYwNlwwNzQiICsKLSAgICAiXHVmZjA2XDA3NVx1ZmYwNlwwNzdcdWZmMDZcMTAwXHVmZjA2XDEwMVx1ZmYwNlwxMDJcdWZmMDZcMTA3XHVmZjA2IiArCi0gICAgIlwxMTBcdWZmMDZcMTExXHVmZjA2XDAwMVwwMDJcMDAwXDAwNlwwMDZcdTAxNWFcMDMxXHVmZjIyXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzZcMDAyXHVmZWZhXDAwNFx1ZmVmYVwwMDVcdWZlZmFcMDA2XHVmZWZhXDAwN1x1ZmVmYSIgKwotICAgICJcMDEwXHVmZWZhXDAxMVx1ZmVmYVwwMTJcdWZlZmFcMDEzXHVmZWZhXDAxNFx1ZmVmYVwwMTVcdWZlZmFcMDE2IiArCi0gICAgIlx1ZmVmYVwwMTdcdWZlZmFcMDIwXHVmZWZhXDAyMVx1ZmVmYVwwMjJcdWZlZmFcMDIzXHVmZWZhXDAyNFx1ZmVmYSIgKwotICAgICJcMDI1XHVmZWZhXDAzMVx1ZmYyYVwwMzJcdWZlZmFcMDM1XHVmZWZhXDA1M1x1ZmVmYVwwNTRcdWZlZmFcMDU1IiArCi0gICAgIlx1ZmVmYVwwNTZcdWZlZmFcMDU3XHVmZWZhXDA2MFx1ZmVmYVwwNjFcdWZlZmFcMDYyXHVmZWZhXDA2M1x1ZmVmYSIgKwotICAgICJcMDY0XHVmZWZhXDA2NVx1ZmVmYVwwNjZcdWZlZmFcMDY3XHVmZWZhXDA3MVx1ZmVmYVwwNzNcdWZlZmFcMDc0IiArCi0gICAgIlx1ZmVmYVwwNzVcdWZlZmFcMDc3XHVmZWZhXDEwMFx1ZmVmYVwxMDFcdWZlZmFcMTAyXHVmZWZhXDEwN1x1ZmVmYSIgKwotICAgICJcMTEwXHVmZWZhXDExMVx1ZmVmYVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjkyXDAwNFx1ZmY5MlwwMDUiICsKLSAgICAiXHVmZjkyXDAwN1x1ZmY5MlwwMTBcdWZmOTJcMDExXHVmZjkyXDAxMlx1ZmY5MlwwMTNcdWZmOTJcMDE0XHVmZjkyIiArCi0gICAgIlwwMTVcdWZmOTJcMDE2XHVmZjkyXDAxN1x1ZmY5MlwwMjBcdWZmOTJcMDIxXHVmZjkyXDAyMlx1ZmY5MlwwMjMiICsKLSAgICAiXHVmZjkyXDAyNFx1ZmY5MlwwMjVcdWZmOTJcMDMyXHVmZjkyXDA1M1x1ZmY5MlwwNTRcdWZmOTJcMDU1XHVmZjkyIiArCi0gICAgIlwwNTZcdWZmOTJcMDU3XHVmZjkyXDA2MFx1ZmY5MlwwNjFcdWZmOTJcMDYyXHVmZjkyXDA2M1x1ZmY5MlwwNjQiICsKLSAgICAiXHVmZjkyXDA2NVx1ZmY5MlwwNjZcdWZmOTJcMDY3XHVmZjkyXDA3MVx1ZmY5MlwwNzNcdWZmOTJcMDc0XHVmZjkyIiArCi0gICAgIlwwNzVcdWZmOTJcMTAwXHVmZjkyXDEwMVx1ZmY5MlwxMDJcdWZmOTJcMTA3XHVmZjkyXDExMFx1ZmY5MlwxMTEiICsKLSAgICAiXHVmZjkyXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOTdcMDA0XHVmZjk3XDAwNVx1ZmY5N1wwMDdcdWZmOTciICsKLSAgICAiXDAxMFx1ZmY5N1wwMTFcdWZmOTdcMDEyXHVmZjk3XDAxM1x1ZmY5N1wwMTRcdWZmOTdcMDE1XHVmZjk3XDAxNiIgKwotICAgICJcdWZmOTdcMDE3XHVmZjk3XDAyMFx1ZmY5N1wwMjFcdWZmOTdcMDIyXHVmZjk3XDAyM1x1ZmY5N1wwMjRcdWZmOTciICsKLSAgICAiXDAyNVx1ZmY5N1wwMzJcdWZmOTdcMDUzXHVmZjk3XDA1NFx1ZmY5N1wwNTVcdWZmOTdcMDU2XHVmZjk3XDA1NyIgKwotICAgICJcdWZmOTdcMDYwXHVmZjk3XDA2MVx1ZmY5N1wwNjJcdWZmOTdcMDYzXHVmZjk3XDA2NFx1ZmY5N1wwNjVcdWZmOTciICsKLSAgICAiXDA2Nlx1ZmY5N1wwNjdcdWZmOTdcMDcxXHVmZjk3XDA3M1x1ZmY5N1wwNzRcdWZmOTdcMDc1XHVmZjk3XDEwMCIgKwotICAgICJcdWZmOTdcMTAxXHVmZjk3XDEwMlx1ZmY5N1wxMDdcdWZmOTdcMTEwXHVmZjk3XDExMVx1ZmY5N1wwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA2XDAwNlx1MDE1NFwwMzFcdWZmMWNcMDAxXDAwMlwwMDBcMDA2XDAwNlx1MDE1MFwwMzEiICsKLSAgICAiXHVmZjFkXDAwMVwwMDJcMDAwXDExNFwwMDJcdWZmZDdcMDA1XHVmZmQ3XDAwN1x1ZmZkN1wwMTBcdWZmZDciICsKLSAgICAiXDAxMVx1ZmZkN1wwMTJcdWZmZDdcMDEzXHVmZmQ3XDAxNFx1ZmZkN1wwMTVcdWZmZDdcMDE2XHVmZmQ3XDAxNyIgKwotICAgICJcdWZmZDdcMDIwXHVmZmQ3XDAyMVx1ZmZkN1wwMjJcdWZmZDdcMDIzXHVmZmQ3XDAzMlx1ZmZkN1wwNTNcdWZmZDciICsKLSAgICAiXDA1NFx1ZmZkN1wwNTVcdWZmZDdcMDU2XHVmZmQ3XDA1N1x1ZmZkN1wwNjBcdWZmZDdcMDYxXHVmZmQ3XDA2MiIgKwotICAgICJcdWZmZDdcMDYzXHVmZmQ3XDA2NFx1ZmZkN1wwNjVcdWZmZDdcMDY2XHVmZmQ3XDA2N1x1ZmZkN1wwNzFcdTAxM2YiICsKLSAgICAiXDA3NVx1ZmZkN1wxMDBcdWZmZDdcMTAxXHVmZmQ3XDEwMlx1ZmZkN1wxMDdcdWZmZDdcMTEwXHVmZmQ3XDExMSIgKwotICAgICJcdWZmZDdcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5ZlwwMDRcdWZmOWZcMDA1XHVmZjlmXDAwN1x1ZmY5ZiIgKwotICAgICJcMDEwXHVmZjlmXDAxMVx1ZmY5ZlwwMTJcdWZmOWZcMDEzXHVmZjlmXDAxNFx1ZmY5ZlwwMTVcdWZmOWZcMDE2IiArCi0gICAgIlx1ZmY5ZlwwMTdcdWZmOWZcMDIwXHVmZjlmXDAyMVx1ZmY5ZlwwMjJcdWZmOWZcMDIzXHVmZjlmXDAyNFx1ZmY5ZiIgKwotICAgICJcMDI1XHVmZjlmXDAzMlx1ZmY5ZlwwNTNcdWZmOWZcMDU0XHVmZjlmXDA1NVx1ZmY5ZlwwNTZcdWZmOWZcMDU3IiArCi0gICAgIlx1ZmY5ZlwwNjBcdWZmOWZcMDYxXHVmZjlmXDA2Mlx1ZmY5ZlwwNjNcdWZmOWZcMDY0XHVmZjlmXDA2NVx1ZmY5ZiIgKwotICAgICJcMDY2XHVmZjlmXDA2N1x1ZmY5ZlwwNzFcdWZmOWZcMDczXHVmZjlmXDA3NFx1ZmY5ZlwwNzVcdWZmOWZcMTAwIiArCi0gICAgIlx1ZmY5ZlwxMDFcdWZmOWZcMTAyXHVmZjlmXDEwN1x1ZmY5ZlwxMTBcdWZmOWZcMTExXHVmZjlmXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzRcMDAyXHVmZjBhXDAwNFx1ZmYwYVwwMDVcdWZmMGFcMDA2XHVmZjBhXDAwN1x1ZmYwYVwwMTAiICsKLSAgICAiXHVmZjBhXDAxMVx1ZmYwYVwwMTJcdWZmMGFcMDEzXHVmZjBhXDAxNFx1ZmYwYVwwMTVcdWZmMGFcMDE2XHVmZjBhIiArCi0gICAgIlwwMTdcdWZmMGFcMDIwXHVmZjBhXDAyMVx1ZmYwYVwwMjJcdWZmMGFcMDIzXHVmZjBhXDAyNFx1ZmYwYVwwMjUiICsKLSAgICAiXHVmZjBhXDAyNlx1MDEzZVwwMzFcdWZmM2JcMDMyXHVmZjBhXDA1M1x1ZmYwYVwwNTRcdWZmMGFcMDU1XHVmZjBhIiArCi0gICAgIlwwNTZcdWZmMGFcMDU3XHVmZjBhXDA2MFx1ZmYwYVwwNjFcdWZmMGFcMDYyXHVmZjBhXDA2M1x1ZmYwYVwwNjQiICsKLSAgICAiXHVmZjBhXDA2NVx1ZmYwYVwwNjZcdWZmMGFcMDY3XHVmZjBhXDA3MVx1ZmYwYVwwNzNcdWZmMGFcMDc0XHVmZjBhIiArCi0gICAgIlwwNzVcdWZmMGFcMTAwXHVmZjBhXDEwMVx1ZmYwYVwxMDJcdWZmMGFcMTA3XHVmZjBhXDExMFx1ZmYwYVwxMTEiICsKLSAgICAiXHVmZjBhXDAwMVwwMDJcMDAwXDAyNFwwMDJcdWZmZWZcMDA1XHVmZmVmXDAwN1x1ZmZlZlwwMzJcdWZmZWYiICsKLSAgICAiXDEwMFx1ZmZlZlwxMDFcdWZmZWZcMTA3XHVmZmVmXDExMFx1ZmZlZlwxMTFcdWZmZWZcMDAxXDAwMlwwMDAiICsKLSAgICAiXDA2MlwwMDJcdWZmZWRcMDA1XHVmZmVkXDAwN1x1ZmZlZFwwMTRcdTAxMzFcMDE1XHUwMTMyXDAxNlx1MDEzMyIgKwotICAgICJcMDE3XHUwMTJmXDAyMFx1MDEyZFwwMjFcdTAxM2FcMDIyXHUwMTM3XDAyM1x1MDEyY1wwMzJcdWZmZWRcMDUzIiArCi0gICAgIlx1MDEzNlwwNTRcdTAxMmJcMDU1XHUwMTJhXDA1Nlx1MDEzMFwwNTdcdTAxMmVcMDYwXHUwMTM1XDA3NVx1MDEyOSIgKwotICAgICJcMTAwXHVmZmVkXDEwMVx1ZmZlZFwxMDdcdWZmZWRcMTEwXHVmZmVkXDExMVx1ZmZlZFwwMDFcMDAyXDAwMCIgKwotICAgICJcMTI2XDAwMlx1ZmY5Y1wwMDRcdWZmOWNcMDA1XHVmZjljXDAwN1x1ZmY5Y1wwMTBcdWZmOWNcMDExXHVmZjljIiArCi0gICAgIlwwMTJcdWZmOWNcMDEzXHVmZjljXDAxNFx1ZmY5Y1wwMTVcdWZmOWNcMDE2XHVmZjljXDAxN1x1ZmY5Y1wwMjAiICsKLSAgICAiXHVmZjljXDAyMVx1ZmY5Y1wwMjJcdWZmOWNcMDIzXHVmZjljXDAyNFx1ZmY5Y1wwMjVcdWZmOWNcMDMyXHVmZjljIiArCi0gICAgIlwwNTNcdWZmOWNcMDU0XHVmZjljXDA1NVx1ZmY5Y1wwNTZcdWZmOWNcMDU3XHVmZjljXDA2MFx1ZmY5Y1wwNjEiICsKLSAgICAiXHVmZjljXDA2Mlx1ZmY5Y1wwNjNcdWZmOWNcMDY0XHVmZjljXDA2NVx1ZmY5Y1wwNjZcdWZmOWNcMDY3XHVmZjljIiArCi0gICAgIlwwNzFcdWZmOWNcMDczXHVmZjljXDA3NFx1ZmY5Y1wwNzVcdWZmOWNcMTAwXHVmZjljXDEwMVx1ZmY5Y1wxMDIiICsKLSAgICAiXHVmZjljXDEwN1x1ZmY5Y1wxMTBcdWZmOWNcMTExXHVmZjljXDAwMVwwMDJcMDAwXDAyMFwwMDJcdWZmZmIiICsKLSAgICAiXDAwNVx1ZmZmYlwwMDdcdWZmZmJcMDMyXHVmZmZiXDEwMFx1ZmZmYlwxMDFcdWZmZmJcMTA3XHVmZmZiXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzRcMDAyXHVmZjBiXDAwNFx1ZmYwYlwwMDVcdWZmMGJcMDA2XHVmZjBiXDAwN1x1ZmYwYiIgKwotICAgICJcMDEwXHVmZjBiXDAxMVx1ZmYwYlwwMTJcdWZmMGJcMDEzXHVmZjBiXDAxNFx1ZmYwYlwwMTVcdWZmMGJcMDE2IiArCi0gICAgIlx1ZmYwYlwwMTdcdWZmMGJcMDIwXHVmZjBiXDAyMVx1ZmYwYlwwMjJcdWZmMGJcMDIzXHVmZjBiXDAyNFx1ZmYwYiIgKwotICAgICJcMDI1XHVmZjBiXDAyNlx1MDEyOFwwMzFcdWZmM2NcMDMyXHVmZjBiXDA1M1x1ZmYwYlwwNTRcdWZmMGJcMDU1IiArCi0gICAgIlx1ZmYwYlwwNTZcdWZmMGJcMDU3XHVmZjBiXDA2MFx1ZmYwYlwwNjFcdWZmMGJcMDYyXHVmZjBiXDA2M1x1ZmYwYiIgKwotICAgICJcMDY0XHVmZjBiXDA2NVx1ZmYwYlwwNjZcdWZmMGJcMDY3XHVmZjBiXDA3MVx1ZmYwYlwwNzNcdWZmMGJcMDc0IiArCi0gICAgIlx1ZmYwYlwwNzVcdWZmMGJcMTAwXHVmZjBiXDEwMVx1ZmYwYlwxMDJcdWZmMGJcMTA3XHVmZjBiXDExMFx1ZmYwYiIgKwotICAgICJcMTExXHVmZjBiXDAwMVwwMDJcMDAwXDAwNlwwMTJcdWZlZjRcMDMxXHVmZjE5XDAwMVwwMDJcMDAwIiArCi0gICAgIlwxNDZcMDEyXDEwN1wwMzZcMjMyXDAzN1wyNDBcMDQwXHUwMTI0XDA0MVwyNDFcMDQyXDIzNyIgKwotICAgICJcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0XDA1MFwyMjVcMDUxIiArCi0gICAgIlwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjUiICsKLSAgICAiXDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NSIgKwotICAgICJcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1IiArCi0gICAgIlwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTIiICsKLSAgICAiXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MSIgKwotICAgICJcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMzFcMTIzXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxNDZcMDEyXDIzM1wwMzZcMjMyXDAzN1wyNDBcMDQwXDI1MlwwNDFcMjQxXDA0MlwyMzciICsKLSAgICAiXDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDZcMDQ3XDI0NFwwNTBcMjI1XDA1MSIgKwotICAgICJcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1IiArCi0gICAgIlwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzUiICsKLSAgICAiXDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNSIgKwotICAgICJcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyIiArCi0gICAgIlwxMzJcMTEzXDEyNlwxMTRcMjUzXDExNVwyNDdcMTE2XDI1MVwxMTdcMjI3XDEyMFwyMzQiICsKLSAgICAiXDEyMVwyMzBcMTIyXDI0NVwxMjNcMjM1XDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyXDAwMCIgKwotICAgICJcMTM2XDAwMlx1ZmYwN1wwMDRcdWZmMDdcMDA1XHVmZjA3XDAwNlx1ZmYwN1wwMDdcdWZmMDdcMDEwXHVmZjA3IiArCi0gICAgIlwwMTFcdWZmMDdcMDEyXHVmZjA3XDAxM1x1ZmYwN1wwMTRcdWZmMDdcMDE1XHVmZjA3XDAxNlx1ZmYwN1wwMTciICsKLSAgICAiXHVmZjA3XDAyMFx1ZmYwN1wwMjFcdWZmMDdcMDIyXHVmZjA3XDAyM1x1ZmYwN1wwMjRcdWZmMDdcMDI1XHVmZjA3IiArCi0gICAgIlwwMzFcdWZmMzhcMDMyXHVmZjA3XDAzNVx1ZmYwN1wwNTNcdWZmMDdcMDU0XHVmZjA3XDA1NVx1ZmYwN1wwNTYiICsKLSAgICAiXHVmZjA3XDA1N1x1ZmYwN1wwNjBcdWZmMDdcMDYxXHVmZjA3XDA2Mlx1ZmYwN1wwNjNcdWZmMDdcMDY0XHVmZjA3IiArCi0gICAgIlwwNjVcdWZmMDdcMDY2XHVmZjA3XDA2N1x1ZmYwN1wwNzFcdWZmMDdcMDczXHVmZjA3XDA3NFx1ZmYwN1wwNzUiICsKLSAgICAiXHVmZjA3XDA3N1x1ZmYwN1wxMDBcdWZmMDdcMTAxXHVmZjA3XDEwMlx1ZmYwN1wxMDdcdWZmMDdcMTEwXHVmZjA3IiArCi0gICAgIlwxMTFcdWZmMDdcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiNlwwMDVcdWZmYjZcMDA3XHVmZmI2XDAxMCIgKwotICAgICJcdWZmYjZcMDExXHVmZmI2XDAxMlx1ZmZiNlwwMTNcdWZmYjZcMDE0XHVmZmI2XDAxNVx1ZmZiNlwwMTZcdWZmYjYiICsKLSAgICAiXDAxN1x1ZmZiNlwwMjBcdWZmYjZcMDIxXHVmZmI2XDAyMlx1ZmZiNlwwMjNcdWZmYjZcMDI0XHVmZmI2XDAyNSIgKwotICAgICJcdWZmYjZcMDMyXHVmZmI2XDA1M1x1ZmZiNlwwNTRcdWZmYjZcMDU1XHVmZmI2XDA1Nlx1ZmZiNlwwNTdcdWZmYjYiICsKLSAgICAiXDA2MFx1ZmZiNlwwNjFcdWZmYjZcMDYyXHVmZmI2XDA2M1x1ZmZiNlwwNjRcdWZmYjZcMDY1XHVmZmI2XDA2NiIgKwotICAgICJcdWZmYjZcMDY3XHVmZmI2XDA3MVx1ZmZiNlwwNzNcdWZmYjZcMDc0XHVmZmI2XDA3NVx1ZmZiNlwxMDBcdWZmYjYiICsKLSAgICAiXDEwMVx1ZmZiNlwxMDJcdWZmYjZcMTA3XHVmZmI2XDExMFx1ZmZiNlwxMTFcdWZmYjZcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzMFwwMDJcdWZmNzJcMDA0XHVmZjcyXDAwNVx1ZmY3MlwwMDdcdWZmNzJcMDEwXHVmZjcyXDAxMVx1ZmY3MiIgKwotICAgICJcMDEyXHVmZjcyXDAxM1x1ZmY3MlwwMTRcdWZmNzJcMDE1XHVmZjcyXDAxNlx1ZmY3MlwwMTdcdWZmNzJcMDIwIiArCi0gICAgIlx1ZmY3MlwwMjFcdWZmNzJcMDIyXHVmZjcyXDAyM1x1ZmY3MlwwMjRcdWZmNzJcMDI1XHVmZjcyXDAzMlx1ZmY3MiIgKwotICAgICJcMDM1XHVmZjcyXDA1M1x1ZmY3MlwwNTRcdWZmNzJcMDU1XHVmZjcyXDA1Nlx1ZmY3MlwwNTdcdWZmNzJcMDYwIiArCi0gICAgIlx1ZmY3MlwwNjFcdWZmNzJcMDYyXHVmZjcyXDA2M1x1ZmY3MlwwNjRcdWZmNzJcMDY1XHVmZjcyXDA2Nlx1ZmY3MiIgKwotICAgICJcMDY3XHVmZjcyXDA3MVx1ZmY3MlwwNzNcdWZmNzJcMDc0XHVmZjcyXDA3NVx1ZmY3MlwxMDBcdWZmNzJcMTAxIiArCi0gICAgIlx1ZmY3MlwxMDJcdWZmNzJcMTA3XHVmZjcyXDExMFx1ZmY3MlwxMTFcdWZmNzJcMDAxXDAwMlwwMDBcMDEyIiArCi0gICAgIlwwMDJcdWZmZmZcMDA1XHVmZmZmXDAwN1x1ZmZmZlwwMzJcdWZmZmZcMDAxXDAwMlwwMDBcMjAwXDAwNiIgKwotICAgICJcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwIiArCi0gICAgIlwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDEiICsKLSAgICAiXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMSIgKwotICAgICJcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0IiArCi0gICAgIlwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzMiICsKLSAgICAiXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMiIgKwotICAgICJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczIiArCi0gICAgIlwxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTciICsKLSAgICAiXDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNCIgKwotICAgICJcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwxMzZcMDAyIiArCi0gICAgIlx1ZmVmNVwwMDRcdWZlZjVcMDA1XHVmZWY1XDAwNlx1ZmVmNVwwMDdcdWZlZjVcMDEwXHVmZWY1XDAxMVx1ZmVmNSIgKwotICAgICJcMDEyXHVmZWY1XDAxM1x1ZmVmNVwwMTRcdWZlZjVcMDE1XHVmZWY1XDAxNlx1ZmVmNVwwMTdcdWZlZjVcMDIwIiArCi0gICAgIlx1ZmVmNVwwMjFcdWZlZjVcMDIyXHVmZWY1XDAyM1x1ZmVmNVwwMjRcdWZlZjVcMDI1XHVmZWY1XDAzMVx1ZmYyNSIgKwotICAgICJcMDMyXHVmZWY1XDAzNVx1ZmVmNVwwNTNcdWZlZjVcMDU0XHVmZWY1XDA1NVx1ZmVmNVwwNTZcdWZlZjVcMDU3IiArCi0gICAgIlx1ZmVmNVwwNjBcdWZlZjVcMDYxXHVmZWY1XDA2Mlx1ZmVmNVwwNjNcdWZlZjVcMDY0XHVmZWY1XDA2NVx1ZmVmNSIgKwotICAgICJcMDY2XHVmZWY1XDA2N1x1ZmVmNVwwNzFcdWZlZjVcMDczXHVmZWY1XDA3NFx1ZmVmNVwwNzVcdWZlZjVcMDc3IiArCi0gICAgIlx1ZmVmNVwxMDBcdWZlZjVcMTAxXHVmZWY1XDEwMlx1ZmVmNVwxMDdcdWZlZjVcMTEwXHVmZWY1XDExMVx1ZmVmNSIgKwotICAgICJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5N1wwMDRcdWZmOTdcMDA1XHVmZjk3XDAwN1x1ZmY5N1wwMTAiICsKLSAgICAiXHVmZjk3XDAxMVx1ZmY5N1wwMTJcdWZmOTdcMDEzXHVmZjk3XDAxNFx1ZmY5N1wwMTVcdWZmOTdcMDE2XHVmZjk3IiArCi0gICAgIlwwMTdcdWZmOTdcMDIwXHVmZjk3XDAyMVx1ZmY5N1wwMjJcdWZmOTdcMDIzXHVmZjk3XDAyNFx1ZmY5N1wwMjUiICsKLSAgICAiXHVmZjk3XDAzMlx1ZmY5N1wwNTNcdWZmOTdcMDU0XHVmZjk3XDA1NVx1ZmY5N1wwNTZcdWZmOTdcMDU3XHVmZjk3IiArCi0gICAgIlwwNjBcdWZmOTdcMDYxXHVmZjk3XDA2Mlx1ZmY5N1wwNjNcdWZmOTdcMDY0XHVmZjk3XDA2NVx1ZmY5N1wwNjYiICsKLSAgICAiXHVmZjk3XDA2N1x1ZmY5N1wwNzFcdWZmOTdcMDczXHVmZjk3XDA3NFx1ZmY5N1wwNzVcdWZmOTdcMTAwXHVmZjk3IiArCi0gICAgIlwxMDFcdWZmOTdcMTAyXHVmZjk3XDEwN1x1ZmY5N1wxMTBcdWZmOTdcMTExXHVmZjk3XDAwMVwwMDJcMDAwIiArCi0gICAgIlwyMDJcMDA2XDEwMVwwMDdcdTAxMWVcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMiIgKwotICAgICJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3IiArCi0gICAgIlwxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjAiICsKLSAgICAiXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MiIgKwotICAgICJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1IiArCi0gICAgIlwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwxMDZcMDc3XDE0MlwxMDAiICsKLSAgICAiXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDE1N1wxMDRcMDQ2XDEwNVwxNDdcMTA2XDA1MiIgKwotICAgICJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1IiArCi0gICAgIlwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTUiICsKLSAgICAiXDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzZcMDAyXHVmZjA5XDAwNFx1ZmYwOVwwMDVcdWZmMDlcMDA2XHVmZjA5XDAwN1x1ZmYwOSIgKwotICAgICJcMDEwXHVmZjA5XDAxMVx1ZmYwOVwwMTJcdWZmMDlcMDEzXHVmZjA5XDAxNFx1ZmYwOVwwMTVcdWZmMDlcMDE2IiArCi0gICAgIlx1ZmYwOVwwMTdcdWZmMDlcMDIwXHVmZjA5XDAyMVx1ZmYwOVwwMjJcdWZmMDlcMDIzXHVmZjA5XDAyNFx1ZmYwOSIgKwotICAgICJcMDI1XHVmZjA5XDAzMVx1ZmYzYVwwMzJcdWZmMDlcMDM1XHVmZjA5XDA1M1x1ZmYwOVwwNTRcdWZmMDlcMDU1IiArCi0gICAgIlx1ZmYwOVwwNTZcdWZmMDlcMDU3XHVmZjA5XDA2MFx1ZmYwOVwwNjFcdWZmMDlcMDYyXHVmZjA5XDA2M1x1ZmYwOSIgKwotICAgICJcMDY0XHVmZjA5XDA2NVx1ZmYwOVwwNjZcdWZmMDlcMDY3XHVmZjA5XDA3MVx1ZmYwOVwwNzNcdWZmMDlcMDc0IiArCi0gICAgIlx1ZmYwOVwwNzVcdWZmMDlcMDc3XHVmZjA5XDEwMFx1ZmYwOVwxMDFcdWZmMDlcMTAyXHVmZjA5XDEwN1x1ZmYwOSIgKwotICAgICJcMTEwXHVmZjA5XDExMVx1ZmYwOVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjlkXDAwNFx1ZmY5ZFwwMDUiICsKLSAgICAiXHVmZjlkXDAwNlx1MDExNlwwMDdcdWZmOWRcMDEwXHVmZjlkXDAxMVx1ZmY5ZFwwMTJcdWZmOWRcMDEzXHVmZjlkIiArCi0gICAgIlwwMTRcdWZmOWRcMDE1XHVmZjlkXDAxNlx1ZmY5ZFwwMTdcdWZmOWRcMDIwXHVmZjlkXDAyMVx1ZmY5ZFwwMjIiICsKLSAgICAiXHVmZjlkXDAyM1x1ZmY5ZFwwMjRcdWZmOWRcMDI1XHVmZjlkXDAzMlx1ZmY5ZFwwNTNcdWZmOWRcMDU0XHVmZjlkIiArCi0gICAgIlwwNTVcdWZmOWRcMDU2XHVmZjlkXDA1N1x1ZmY5ZFwwNjBcdWZmOWRcMDYxXHVmZjlkXDA2Mlx1ZmY5ZFwwNjMiICsKLSAgICAiXHVmZjlkXDA2NFx1ZmY5ZFwwNjVcdWZmOWRcMDY2XHVmZjlkXDA2N1x1ZmY5ZFwwNzFcdWZmOWRcMDczXHVmZjlkIiArCi0gICAgIlwwNzRcdWZmOWRcMDc1XHVmZjlkXDEwMFx1ZmY5ZFwxMDFcdWZmOWRcMTAyXHVmZjlkXDEwN1x1ZmY5ZFwxMTAiICsKLSAgICAiXHVmZjlkXDExMVx1ZmY5ZFwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjUyXDAwNFx1ZmY1MlwwMDVcdWZmNTIiICsKLSAgICAiXDAwN1x1ZmY1MlwwMTBcdWZmNTJcMDExXHVmZjUyXDAxMlx1ZmY1MlwwMTNcdWZmNTJcMDE0XHVmZjUyXDAxNSIgKwotICAgICJcdWZmNTJcMDE2XHVmZjUyXDAxN1x1ZmY1MlwwMjBcdWZmNTJcMDIxXHVmZjUyXDAyMlx1ZmY1MlwwMjNcdWZmNTIiICsKLSAgICAiXDAyNFx1ZmY1MlwwMjVcdWZmNTJcMDMyXHVmZjUyXDA1M1x1ZmY1MlwwNTRcdWZmNTJcMDU1XHVmZjUyXDA1NiIgKwotICAgICJcdWZmNTJcMDU3XHVmZjUyXDA2MFx1ZmY1MlwwNjFcdWZmNTJcMDYyXHVmZjUyXDA2M1x1ZmY1MlwwNjRcdWZmNTIiICsKLSAgICAiXDA2NVx1ZmY1MlwwNjZcdWZmNTJcMDY3XHVmZjUyXDA3MVx1ZmY1MlwwNzNcdWZmNTJcMDc0XHVmZjUyXDA3NSIgKwotICAgICJcdWZmNTJcMTAwXHVmZjUyXDEwMVx1ZmY1MlwxMDJcdWZmNTJcMTA3XHVmZjUyXDExMFx1ZmY1MlwxMTFcdWZmNTIiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNzZcMDA0XHVmZjc2XDAwNVx1ZmY3NlwwMDdcdWZmNzZcMDEwIiArCi0gICAgIlx1ZmY3NlwwMTFcdWZmNzZcMDEyXHVmZjc2XDAxM1x1ZmY3NlwwMTRcdWZmNzZcMDE1XHVmZjc2XDAxNlx1ZmY3NiIgKwotICAgICJcMDE3XHVmZjc2XDAyMFx1ZmY3NlwwMjFcdWZmNzZcMDIyXHVmZjc2XDAyM1x1ZmY3NlwwMjRcdWZmNzZcMDI1IiArCi0gICAgIlx1ZmY3NlwwMzJcdWZmNzZcMDM1XHVmZjc2XDA1M1x1ZmY3NlwwNTRcdWZmNzZcMDU1XHVmZjc2XDA1Nlx1ZmY3NiIgKwotICAgICJcMDU3XHVmZjc2XDA2MFx1ZmY3NlwwNjFcdWZmNzZcMDYyXHVmZjc2XDA2M1x1ZmY3NlwwNjRcdWZmNzZcMDY1IiArCi0gICAgIlx1ZmY3NlwwNjZcdWZmNzZcMDY3XHVmZjc2XDA3MVx1ZmY3NlwwNzNcdWZmNzZcMDc0XHVmZjc2XDA3NVx1ZmY3NiIgKwotICAgICJcMTAwXHVmZjc2XDEwMVx1ZmY3NlwxMDJcdWZmNzZcMTA3XHVmZjc2XDExMFx1ZmY3NlwxMTFcdWZmNzZcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNFwwMDJcdWZmMDBcMDA0XHVmZjAwXDAwNVx1ZmYwMFwwMDZcdWZmMDBcMDA3XHVmZjAwIiArCi0gICAgIlwwMTBcdWZmMDBcMDExXHVmZjAwXDAxMlx1ZmYwMFwwMTNcdWZmMDBcMDE0XHVmZjAwXDAxNVx1ZmYwMFwwMTYiICsKLSAgICAiXHVmZjAwXDAxN1x1ZmYwMFwwMjBcdWZmMDBcMDIxXHVmZjAwXDAyMlx1ZmYwMFwwMjNcdWZmMDBcMDI0XHVmZjAwIiArCi0gICAgIlwwMjVcdWZmMDBcMDMxXHVmZjMxXDAzMlx1ZmYwMFwwMzNcdTAxMTJcMDUzXHVmZjAwXDA1NFx1ZmYwMFwwNTUiICsKLSAgICAiXHVmZjAwXDA1Nlx1ZmYwMFwwNTdcdWZmMDBcMDYwXHVmZjAwXDA2MVx1ZmYwMFwwNjJcdWZmMDBcMDYzXHVmZjAwIiArCi0gICAgIlwwNjRcdWZmMDBcMDY1XHVmZjAwXDA2Nlx1ZmYwMFwwNjdcdWZmMDBcMDcxXHVmZjAwXDA3M1x1ZmYwMFwwNzQiICsKLSAgICAiXHVmZjAwXDA3NVx1ZmYwMFwxMDBcdWZmMDBcMTAxXHVmZjAwXDEwMlx1ZmYwMFwxMDdcdWZmMDBcMTEwXHVmZjAwIiArCi0gICAgIlwxMTFcdWZmMDBcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY5YlwwMDRcdWZmOWJcMDA1XHVmZjliXDAwNyIgKwotICAgICJcdWZmOWJcMDEwXHVmZjliXDAxMVx1ZmY5YlwwMTJcdWZmOWJcMDEzXHVmZjliXDAxNFx1ZmY5YlwwMTVcdWZmOWIiICsKLSAgICAiXDAxNlx1ZmY5YlwwMTdcdWZmOWJcMDIwXHVmZjliXDAyMVx1ZmY5YlwwMjJcdWZmOWJcMDIzXHVmZjliXDAyNCIgKwotICAgICJcdWZmOWJcMDI1XHVmZjliXDAzMVx1MDExMFwwMzJcdWZmOWJcMDUzXHVmZjliXDA1NFx1ZmY5YlwwNTVcdWZmOWIiICsKLSAgICAiXDA1Nlx1ZmY5YlwwNTdcdWZmOWJcMDYwXHVmZjliXDA2MVx1ZmY5YlwwNjJcdWZmOWJcMDYzXHVmZjliXDA2NCIgKwotICAgICJcdWZmOWJcMDY1XHVmZjliXDA2Nlx1ZmY5YlwwNjdcdWZmOWJcMDcxXHVmZjliXDA3M1x1ZmY5YlwwNzRcdWZmOWIiICsKLSAgICAiXDA3NVx1ZmY5YlwxMDBcdWZmOWJcMTAxXHVmZjliXDEwMlx1ZmY5YlwxMDdcdWZmOWJcMTEwXHVmZjliXDExMSIgKwotICAgICJcdWZmOWJcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYwY1wwMDRcdWZmMGNcMDA1XHVmZjBjXDAwNlx1ZmYwYyIgKwotICAgICJcMDA3XHVmZjBjXDAxMFx1ZmYwY1wwMTFcdWZmMGNcMDEyXHVmZjBjXDAxM1x1ZmYwY1wwMTRcdWZmMGNcMDE1IiArCi0gICAgIlx1ZmYwY1wwMTZcdWZmMGNcMDE3XHVmZjBjXDAyMFx1ZmYwY1wwMjFcdWZmMGNcMDIyXHVmZjBjXDAyM1x1ZmYwYyIgKwotICAgICJcMDI0XHVmZjBjXDAyNVx1ZmYwY1wwMjZcdTAxMGZcMDMxXHVmZjNkXDAzMlx1ZmYwY1wwNTNcdWZmMGNcMDU0IiArCi0gICAgIlx1ZmYwY1wwNTVcdWZmMGNcMDU2XHVmZjBjXDA1N1x1ZmYwY1wwNjBcdWZmMGNcMDYxXHVmZjBjXDA2Mlx1ZmYwYyIgKwotICAgICJcMDYzXHVmZjBjXDA2NFx1ZmYwY1wwNjVcdWZmMGNcMDY2XHVmZjBjXDA2N1x1ZmYwY1wwNzFcdWZmMGNcMDczIiArCi0gICAgIlx1ZmYwY1wwNzRcdWZmMGNcMDc1XHVmZjBjXDEwMFx1ZmYwY1wxMDFcdWZmMGNcMTAyXHVmZjBjXDEwN1x1ZmYwYyIgKwotICAgICJcMTEwXHVmZjBjXDExMVx1ZmYwY1wwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZWY2XDAwNFx1ZmVmNlwwMDUiICsKLSAgICAiXHVmZWY2XDAwNlx1ZmVmNlwwMDdcdWZlZjZcMDEwXHVmZWY2XDAxMVx1ZmVmNlwwMTJcdWZlZjZcMDEzXHVmZWY2IiArCi0gICAgIlwwMTRcdWZlZjZcMDE1XHVmZWY2XDAxNlx1ZmVmNlwwMTdcdWZlZjZcMDIwXHVmZWY2XDAyMVx1ZmVmNlwwMjIiICsKLSAgICAiXHVmZWY2XDAyM1x1ZmVmNlwwMjRcdWZlZjZcMDI1XHVmZWY2XDAzMVx1ZmYyNlwwMzJcdWZlZjZcMDM1XHVmZWY2IiArCi0gICAgIlwwNTNcdWZlZjZcMDU0XHVmZWY2XDA1NVx1ZmVmNlwwNTZcdWZlZjZcMDU3XHVmZWY2XDA2MFx1ZmVmNlwwNjEiICsKLSAgICAiXHVmZWY2XDA2Mlx1ZmVmNlwwNjNcdWZlZjZcMDY0XHVmZWY2XDA2NVx1ZmVmNlwwNjZcdWZlZjZcMDY3XHVmZWY2IiArCi0gICAgIlwwNzFcdWZlZjZcMDczXHVmZWY2XDA3NFx1ZmVmNlwwNzVcdWZlZjZcMDc3XHVmZWY2XDEwMFx1ZmVmNlwxMDEiICsKLSAgICAiXHVmZWY2XDEwMlx1ZmVmNlwxMDdcdWZlZjZcMTEwXHVmZWY2XDExMVx1ZmVmNlwwMDFcMDAyXDAwMFwxMzQiICsKLSAgICAiXDAwMlx1ZmY0YVwwMDRcdWZmNGFcMDA1XHVmZjRhXDAwNlx1ZmY0YVwwMDdcdWZmNGFcMDEwXHVmZjRhXDAxMSIgKwotICAgICJcdWZmNGFcMDEyXHVmZjRhXDAxM1x1ZmY0YVwwMTRcdWZmNGFcMDE1XHVmZjRhXDAxNlx1ZmY0YVwwMTdcdWZmNGEiICsKLSAgICAiXDAyMFx1ZmY0YVwwMjFcdWZmNGFcMDIyXHVmZjRhXDAyM1x1ZmY0YVwwMjRcdWZmNGFcMDI1XHVmZjRhXDAzMiIgKwotICAgICJcdWZmNGFcMDM1XHVmZjRhXDA1M1x1ZmY0YVwwNTRcdWZmNGFcMDU1XHVmZjRhXDA1Nlx1ZmY0YVwwNTdcdWZmNGEiICsKLSAgICAiXDA2MFx1ZmY0YVwwNjFcdWZmNGFcMDYyXHVmZjRhXDA2M1x1ZmY0YVwwNjRcdWZmNGFcMDY1XHVmZjRhXDA2NiIgKwotICAgICJcdWZmNGFcMDY3XHVmZjRhXDA3MVx1ZmY0YVwwNzNcdWZmNGFcMDc0XHVmZjRhXDA3NVx1ZmY0YVwwNzdcdWZmNGEiICsKLSAgICAiXDEwMFx1ZmY0YVwxMDFcdWZmNGFcMTAyXHVmZjRhXDEwN1x1ZmY0YVwxMTBcdWZmNGFcMTExXHVmZjRhXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzZcMDAyXHVmZWZlXDAwNFx1ZmVmZVwwMDVcdWZlZmVcMDA2XHVmZWZlXDAwN1x1ZmVmZSIgKwotICAgICJcMDEwXHVmZWZlXDAxMVx1ZmVmZVwwMTJcdWZlZmVcMDEzXHVmZWZlXDAxNFx1ZmVmZVwwMTVcdWZlZmVcMDE2IiArCi0gICAgIlx1ZmVmZVwwMTdcdWZlZmVcMDIwXHVmZWZlXDAyMVx1ZmVmZVwwMjJcdWZlZmVcMDIzXHVmZWZlXDAyNFx1ZmVmZSIgKwotICAgICJcMDI1XHVmZWZlXDAzMVx1ZmYyZlwwMzJcdWZlZmVcMDM1XHVmZWZlXDA1M1x1ZmVmZVwwNTRcdWZlZmVcMDU1IiArCi0gICAgIlx1ZmVmZVwwNTZcdWZlZmVcMDU3XHVmZWZlXDA2MFx1ZmVmZVwwNjFcdWZlZmVcMDYyXHVmZWZlXDA2M1x1ZmVmZSIgKwotICAgICJcMDY0XHVmZWZlXDA2NVx1ZmVmZVwwNjZcdWZlZmVcMDY3XHVmZWZlXDA3MVx1ZmVmZVwwNzNcdWZlZmVcMDc0IiArCi0gICAgIlx1ZmVmZVwwNzVcdWZlZmVcMDc3XHVmZWZlXDEwMFx1ZmVmZVwxMDFcdWZlZmVcMTAyXHVmZWZlXDEwN1x1ZmVmZSIgKwotICAgICJcMTEwXHVmZWZlXDExMVx1ZmVmZVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZWY5XDAwNFx1ZmVmOVwwMDUiICsKLSAgICAiXHVmZWY5XDAwNlx1ZmVmOVwwMDdcdWZlZjlcMDEwXHVmZWY5XDAxMVx1ZmVmOVwwMTJcdWZlZjlcMDEzXHVmZWY5IiArCi0gICAgIlwwMTRcdWZlZjlcMDE1XHVmZWY5XDAxNlx1ZmVmOVwwMTdcdWZlZjlcMDIwXHVmZWY5XDAyMVx1ZmVmOVwwMjIiICsKLSAgICAiXHVmZWY5XDAyM1x1ZmVmOVwwMjRcdWZlZjlcMDI1XHVmZWY5XDAzMVx1ZmYyOVwwMzJcdWZlZjlcMDM1XHVmZWY5IiArCi0gICAgIlwwNTNcdWZlZjlcMDU0XHVmZWY5XDA1NVx1ZmVmOVwwNTZcdWZlZjlcMDU3XHVmZWY5XDA2MFx1ZmVmOVwwNjEiICsKLSAgICAiXHVmZWY5XDA2Mlx1ZmVmOVwwNjNcdWZlZjlcMDY0XHVmZWY5XDA2NVx1ZmVmOVwwNjZcdWZlZjlcMDY3XHVmZWY5IiArCi0gICAgIlwwNzFcdWZlZjlcMDczXHVmZWY5XDA3NFx1ZmVmOVwwNzVcdWZlZjlcMDc3XHVmZWY5XDEwMFx1ZmVmOVwxMDEiICsKLSAgICAiXHVmZWY5XDEwMlx1ZmVmOVwxMDdcdWZlZjlcMTEwXHVmZWY5XDExMVx1ZmVmOVwwMDFcMDAyXDAwMFwxMjYiICsKLSAgICAiXDAwMlx1ZmY5NFwwMDRcdWZmOTRcMDA1XHVmZjk0XDAwN1x1ZmY5NFwwMTBcdWZmOTRcMDExXHVmZjk0XDAxMiIgKwotICAgICJcdWZmOTRcMDEzXHVmZjk0XDAxNFx1ZmY5NFwwMTVcdWZmOTRcMDE2XHVmZjk0XDAxN1x1ZmY5NFwwMjBcdWZmOTQiICsKLSAgICAiXDAyMVx1ZmY5NFwwMjJcdWZmOTRcMDIzXHVmZjk0XDAyNFx1ZmY5NFwwMjVcdWZmOTRcMDMyXHVmZjk0XDA1MyIgKwotICAgICJcdWZmOTRcMDU0XHVmZjk0XDA1NVx1ZmY5NFwwNTZcdWZmOTRcMDU3XHVmZjk0XDA2MFx1ZmY5NFwwNjFcdWZmOTQiICsKLSAgICAiXDA2Mlx1ZmY5NFwwNjNcdWZmOTRcMDY0XHVmZjk0XDA2NVx1ZmY5NFwwNjZcdWZmOTRcMDY3XHVmZjk0XDA3MSIgKwotICAgICJcdWZmOTRcMDczXHVmZjk0XDA3NFx1ZmY5NFwwNzVcdWZmOTRcMTAwXHVmZjk0XDEwMVx1ZmY5NFwxMDJcdWZmOTQiICsKLSAgICAiXDEwN1x1ZmY5NFwxMTBcdWZmOTRcMTExXHVmZjk0XDAwMVwwMDJcMDAwXDAyMFwwMDJcdWZmZmRcMDA1IiArCi0gICAgIlx1ZmZmZFwwMDdcdWZmZmRcMDMyXHVmZmZkXDEwMFx1ZmZmZFwxMDFcdWZmZmRcMTA3XHVmZmZkXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMjZcMDAyXHVmZmEwXDAwNFx1ZmZhMFwwMDVcdWZmYTBcMDA3XHVmZmEwXDAxMFx1ZmZhMFwwMTEiICsKLSAgICAiXHVmZmEwXDAxMlx1ZmZhMFwwMTNcdWZmYTBcMDE0XHVmZmEwXDAxNVx1ZmZhMFwwMTZcdWZmYTBcMDE3XHVmZmEwIiArCi0gICAgIlwwMjBcdWZmYTBcMDIxXHVmZmEwXDAyMlx1ZmZhMFwwMjNcdWZmYTBcMDI0XHVmZmEwXDAyNVx1ZmZhMFwwMzIiICsKLSAgICAiXHVmZmEwXDA1M1x1ZmZhMFwwNTRcdWZmYTBcMDU1XHVmZmEwXDA1Nlx1ZmZhMFwwNTdcdWZmYTBcMDYwXHVmZmEwIiArCi0gICAgIlwwNjFcdWZmYTBcMDYyXHVmZmEwXDA2M1x1ZmZhMFwwNjRcdWZmYTBcMDY1XHVmZmEwXDA2Nlx1ZmZhMFwwNjciICsKLSAgICAiXHVmZmEwXDA3MVx1ZmZhMFwwNzNcdWZmYTBcMDc0XHVmZmEwXDA3NVx1ZmZhMFwxMDBcdWZmYTBcMTAxXHVmZmEwIiArCi0gICAgIlwxMDJcdWZmYTBcMTA3XHVmZmEwXDExMFx1ZmZhMFwxMTFcdWZmYTBcMDAxXDAwMlwwMDBcMTI2XDAwMiIgKwotICAgICJcdWZmODhcMDA0XHVmZjg4XDAwNVx1ZmY4OFwwMDdcdWZmODhcMDEwXHVmZjg4XDAxMVx1ZmY4OFwwMTJcdWZmODgiICsKLSAgICAiXDAxM1x1ZmY4OFwwMTRcdWZmODhcMDE1XHVmZjg4XDAxNlx1ZmY4OFwwMTdcdWZmODhcMDIwXHVmZjg4XDAyMSIgKwotICAgICJcdWZmODhcMDIyXHVmZjg4XDAyM1x1ZmY4OFwwMjRcdWZmODhcMDI1XHVmZjg4XDAzMlx1ZmY4OFwwNTNcdWZmODgiICsKLSAgICAiXDA1NFx1ZmY4OFwwNTVcdWZmODhcMDU2XHVmZjg4XDA1N1x1ZmY4OFwwNjBcdWZmODhcMDYxXHVmZjg4XDA2MiIgKwotICAgICJcdWZmODhcMDYzXHVmZjg4XDA2NFx1ZmY4OFwwNjVcdWZmODhcMDY2XHVmZjg4XDA2N1x1ZmY4OFwwNzFcdWZmODgiICsKLSAgICAiXDA3M1x1ZmY4OFwwNzRcdWZmODhcMDc1XHVmZjg4XDEwMFx1ZmY4OFwxMDFcdWZmODhcMTAyXHVmZjg4XDEwNyIgKwotICAgICJcdWZmODhcMTEwXHVmZjg4XDExMVx1ZmY4OFwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjc0XDAwNFx1ZmY3NCIgKwotICAgICJcMDA1XHVmZjc0XDAwN1x1ZmY3NFwwMTBcdWZmNzRcMDExXHVmZjc0XDAxMlx1ZmY3NFwwMTNcdWZmNzRcMDE0IiArCi0gICAgIlx1ZmY3NFwwMTVcdWZmNzRcMDE2XHVmZjc0XDAxN1x1ZmY3NFwwMjBcdWZmNzRcMDIxXHVmZjc0XDAyMlx1ZmY3NCIgKwotICAgICJcMDIzXHVmZjc0XDAyNFx1ZmY3NFwwMjVcdWZmNzRcMDMyXHVmZjc0XDAzNVx1ZmY3NFwwNTNcdWZmNzRcMDU0IiArCi0gICAgIlx1ZmY3NFwwNTVcdWZmNzRcMDU2XHVmZjc0XDA1N1x1ZmY3NFwwNjBcdWZmNzRcMDYxXHVmZjc0XDA2Mlx1ZmY3NCIgKwotICAgICJcMDYzXHVmZjc0XDA2NFx1ZmY3NFwwNjVcdWZmNzRcMDY2XHVmZjc0XDA2N1x1ZmY3NFwwNzFcdWZmNzRcMDczIiArCi0gICAgIlx1ZmY3NFwwNzRcdWZmNzRcMDc1XHVmZjc0XDEwMFx1ZmY3NFwxMDFcdWZmNzRcMTAyXHVmZjc0XDEwN1x1ZmY3NCIgKwotICAgICJcMTEwXHVmZjc0XDExMVx1ZmY3NFwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjc1XDAwNFx1ZmY3NVwwMDUiICsKLSAgICAiXHVmZjc1XDAwN1x1ZmY3NVwwMTBcdWZmNzVcMDExXHVmZjc1XDAxMlx1ZmY3NVwwMTNcdWZmNzVcMDE0XHVmZjc1IiArCi0gICAgIlwwMTVcdWZmNzVcMDE2XHVmZjc1XDAxN1x1ZmY3NVwwMjBcdWZmNzVcMDIxXHVmZjc1XDAyMlx1ZmY3NVwwMjMiICsKLSAgICAiXHVmZjc1XDAyNFx1ZmY3NVwwMjVcdWZmNzVcMDMyXHVmZjc1XDAzNVx1ZmY3NVwwNTNcdWZmNzVcMDU0XHVmZjc1IiArCi0gICAgIlwwNTVcdWZmNzVcMDU2XHVmZjc1XDA1N1x1ZmY3NVwwNjBcdWZmNzVcMDYxXHVmZjc1XDA2Mlx1ZmY3NVwwNjMiICsKLSAgICAiXHVmZjc1XDA2NFx1ZmY3NVwwNjVcdWZmNzVcMDY2XHVmZjc1XDA2N1x1ZmY3NVwwNzFcdWZmNzVcMDczXHVmZjc1IiArCi0gICAgIlwwNzRcdWZmNzVcMDc1XHVmZjc1XDEwMFx1ZmY3NVwxMDFcdWZmNzVcMTAyXHVmZjc1XDEwN1x1ZmY3NVwxMTAiICsKLSAgICAiXHVmZjc1XDExMVx1ZmY3NVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjE3XDAwNFx1ZmYxN1wwMDVcdWZmMTciICsKLSAgICAiXDAwNlx1ZmYxN1wwMDdcdWZmMTdcMDEwXHVmZjE3XDAxMVx1ZmYxN1wwMTJcdWZmMTdcMDEzXHVmZjE3XDAxNCIgKwotICAgICJcdWZmMTdcMDE1XHVmZjE3XDAxNlx1ZmYxN1wwMTdcdWZmMTdcMDIwXHVmZjE3XDAyMVx1ZmYxN1wwMjJcdWZmMTciICsKLSAgICAiXDAyM1x1ZmYxN1wwMjRcdWZmMTdcMDI1XHVmZjE3XDAzMVx1ZmY0OVwwMzJcdWZmMTdcMDM1XHVmZjE3XDA1MyIgKwotICAgICJcdWZmMTdcMDU0XHVmZjE3XDA1NVx1ZmYxN1wwNTZcdWZmMTdcMDU3XHVmZjE3XDA2MFx1ZmYxN1wwNjFcdWZmMTciICsKLSAgICAiXDA2Mlx1ZmYxN1wwNjNcdWZmMTdcMDY0XHVmZjE3XDA2NVx1ZmYxN1wwNjZcdWZmMTdcMDY3XHVmZjE3XDA3MSIgKwotICAgICJcdWZmMTdcMDczXHVmZjE3XDA3NFx1ZmYxN1wwNzVcdWZmMTdcMDc3XHVmZjE3XDEwMFx1ZmYxN1wxMDFcdWZmMTciICsKLSAgICAiXDEwMlx1ZmYxN1wxMDdcdWZmMTdcMTEwXHVmZjE3XDExMVx1ZmYxN1wwMDFcMDAyXDAwMFwwMDZcMDA2IiArCi0gICAgIlx1MDEwZFwwMzFcdWZmMjRcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYwOFwwMDRcdWZmMDhcMDA1XHVmZjA4IiArCi0gICAgIlwwMDZcdWZmMDhcMDA3XHVmZjA4XDAxMFx1ZmYwOFwwMTFcdWZmMDhcMDEyXHVmZjA4XDAxM1x1ZmYwOFwwMTQiICsKLSAgICAiXHVmZjA4XDAxNVx1ZmYwOFwwMTZcdWZmMDhcMDE3XHVmZjA4XDAyMFx1ZmYwOFwwMjFcdWZmMDhcMDIyXHVmZjA4IiArCi0gICAgIlwwMjNcdWZmMDhcMDI0XHVmZjA4XDAyNVx1ZmYwOFwwMzFcdWZmMzlcMDMyXHVmZjA4XDAzNVx1ZmYwOFwwNTMiICsKLSAgICAiXHVmZjA4XDA1NFx1ZmYwOFwwNTVcdWZmMDhcMDU2XHVmZjA4XDA1N1x1ZmYwOFwwNjBcdWZmMDhcMDYxXHVmZjA4IiArCi0gICAgIlwwNjJcdWZmMDhcMDYzXHVmZjA4XDA2NFx1ZmYwOFwwNjVcdWZmMDhcMDY2XHVmZjA4XDA2N1x1ZmYwOFwwNzEiICsKLSAgICAiXHVmZjA4XDA3M1x1ZmYwOFwwNzRcdWZmMDhcMDc1XHVmZjA4XDA3N1x1ZmYwOFwxMDBcdWZmMDhcMTAxXHVmZjA4IiArCi0gICAgIlwxMDJcdWZmMDhcMTA3XHVmZjA4XDExMFx1ZmYwOFwxMTFcdWZmMDhcMDAxXDAwMlwwMDBcMTM2XDAwMiIgKwotICAgICJcdWZmMjBcMDA0XHVmZjIwXDAwNVx1ZmYyMFwwMDZcdWZmMjBcMDA3XHVmZjIwXDAxMFx1ZmYyMFwwMTFcdWZmMjAiICsKLSAgICAiXDAxMlx1ZmYyMFwwMTNcdWZmMjBcMDE0XHVmZjIwXDAxNVx1ZmYyMFwwMTZcdWZmMjBcMDE3XHVmZjIwXDAyMCIgKwotICAgICJcdWZmMjBcMDIxXHVmZjIwXDAyMlx1ZmYyMFwwMjNcdWZmMjBcMDI0XHVmZjIwXDAyNVx1ZmYyMFwwMzFcdWZmMjAiICsKLSAgICAiXDAzMlx1ZmYyMFwwMzVcdWZmMjBcMDUzXHVmZjIwXDA1NFx1ZmYyMFwwNTVcdWZmMjBcMDU2XHVmZjIwXDA1NyIgKwotICAgICJcdWZmMjBcMDYwXHVmZjIwXDA2MVx1ZmYyMFwwNjJcdWZmMjBcMDYzXHVmZjIwXDA2NFx1ZmYyMFwwNjVcdWZmMjAiICsKLSAgICAiXDA2Nlx1ZmYyMFwwNjdcdWZmMjBcMDcxXHVmZjIwXDA3M1x1ZmYyMFwwNzRcdWZmMjBcMDc1XHVmZjIwXDA3NyIgKwotICAgICJcdWZmMjBcMTAwXHVmZjIwXDEwMVx1ZmYyMFwxMDJcdWZmMjBcMTA3XHVmZjIwXDExMFx1ZmYyMFwxMTFcdWZmMjAiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEwMFwwMDJcdWZmZTdcMDA1XHVmZmU3XDAwN1x1ZmZlN1wwMTBcdWZmZTdcMDExIiArCi0gICAgIlx1ZmZlN1wwMTJcdTAxMDFcMDE0XHVmZmU3XDAxNVx1ZmZlN1wwMTZcdWZmZTdcMDE3XHVmZmU3XDAyMFx1ZmZlNyIgKwotICAgICJcMDIxXHVmZmU3XDAyMlx1ZmZlN1wwMjNcdWZmZTdcMDMyXHVmZmU3XDA1M1x1ZmZlN1wwNTRcdWZmZTdcMDU1IiArCi0gICAgIlx1ZmZlN1wwNTZcdWZmZTdcMDU3XHVmZmU3XDA2MFx1ZmZlN1wwNjFcdTAxMDNcMDYyXHUwMTA0XDA2M1x1MDEwMiIgKwotICAgICJcMDc1XHVmZmU3XDEwMFx1ZmZlN1wxMDFcdWZmZTdcMTAyXHVmZmU3XDEwN1x1ZmZlN1wxMTBcdWZmZTdcMTExIiArCi0gICAgIlx1ZmZlN1wwMDFcMDAyXDAwMFwxMjRcMDAyXHVmZmJiXDAwNVx1ZmZiYlwwMDdcdWZmYmJcMDEwXHVmZmJiIiArCi0gICAgIlwwMTFcdWZmYmJcMDEyXHVmZmJiXDAxM1x1ZmZiYlwwMTRcdWZmYmJcMDE1XHVmZmJiXDAxNlx1ZmZiYlwwMTciICsKLSAgICAiXHVmZmJiXDAyMFx1ZmZiYlwwMjFcdWZmYmJcMDIyXHVmZmJiXDAyM1x1ZmZiYlwwMjRcMzc1XDAyNVwzNzYiICsKLSAgICAiXDAzMlx1ZmZiYlwwNTNcdWZmYmJcMDU0XHVmZmJiXDA1NVx1ZmZiYlwwNTZcdWZmYmJcMDU3XHVmZmJiXDA2MCIgKwotICAgICJcdWZmYmJcMDYxXHVmZmJiXDA2Mlx1ZmZiYlwwNjNcdWZmYmJcMDY0XHVmZmJiXDA2NVx1ZmZiYlwwNjZcdWZmYmIiICsKLSAgICAiXDA2N1x1ZmZiYlwwNzFcdWZmYmJcMDczXHVmZmJiXDA3NFx1ZmZiYlwwNzVcdWZmYmJcMTAwXHVmZmJiXDEwMSIgKwotICAgICJcdWZmYmJcMTAyXHVmZmJiXDEwN1x1ZmZiYlwxMTBcdWZmYmJcMTExXHVmZmJiXDAwMVwwMDJcMDAwXDEzMCIgKwotICAgICJcMDAyXHVmZjczXDAwNFx1ZmY3M1wwMDVcdWZmNzNcMDA3XHVmZjczXDAxMFx1ZmY3M1wwMTFcdWZmNzNcMDEyIiArCi0gICAgIlx1ZmY3M1wwMTNcdWZmNzNcMDE0XHVmZjczXDAxNVx1ZmY3M1wwMTZcdWZmNzNcMDE3XHVmZjczXDAyMFx1ZmY3MyIgKwotICAgICJcMDIxXHVmZjczXDAyMlx1ZmY3M1wwMjNcdWZmNzNcMDI0XHVmZjczXDAyNVx1ZmY3M1wwMzJcdWZmNzNcMDM1IiArCi0gICAgIlx1ZmY3M1wwNTNcdWZmNzNcMDU0XHVmZjczXDA1NVx1ZmY3M1wwNTZcdWZmNzNcMDU3XHVmZjczXDA2MFx1ZmY3MyIgKwotICAgICJcMDYxXHVmZjczXDA2Mlx1ZmY3M1wwNjNcdWZmNzNcMDY0XHVmZjczXDA2NVx1ZmY3M1wwNjZcdWZmNzNcMDY3IiArCi0gICAgIlx1ZmY3M1wwNzFcdWZmNzNcMDczXHVmZjczXDA3NFx1ZmY3M1wwNzVcdWZmNzNcMTAwXHVmZjczXDEwMVx1ZmY3MyIgKwotICAgICJcMTAyXHVmZjczXDEwN1x1ZmY3M1wxMTBcdWZmNzNcMTExXHVmZjczXDAwMVwwMDJcMDAwXDEzNlwwMDIiICsKLSAgICAiXHVmZjIxXDAwNFx1ZmYyMVwwMDVcdWZmMjFcMDA2XHVmZjIxXDAwN1x1ZmYyMVwwMTBcdWZmMjFcMDExXHVmZjIxIiArCi0gICAgIlwwMTJcdWZmMjFcMDEzXHVmZjIxXDAxNFx1ZmYyMVwwMTVcdWZmMjFcMDE2XHVmZjIxXDAxN1x1ZmYyMVwwMjAiICsKLSAgICAiXHVmZjIxXDAyMVx1ZmYyMVwwMjJcdWZmMjFcMDIzXHVmZjIxXDAyNFx1ZmYyMVwwMjVcdWZmMjFcMDMxXHVmZjIxIiArCi0gICAgIlwwMzJcdWZmMjFcMDM1XHVmZjIxXDA1M1x1ZmYyMVwwNTRcdWZmMjFcMDU1XHVmZjIxXDA1Nlx1ZmYyMVwwNTciICsKLSAgICAiXHVmZjIxXDA2MFx1ZmYyMVwwNjFcdWZmMjFcMDYyXHVmZjIxXDA2M1x1ZmYyMVwwNjRcdWZmMjFcMDY1XHVmZjIxIiArCi0gICAgIlwwNjZcdWZmMjFcMDY3XHVmZjIxXDA3MVx1ZmYyMVwwNzNcdWZmMjFcMDc0XHVmZjIxXDA3NVx1ZmYyMVwwNzciICsKLSAgICAiXHVmZjIxXDEwMFx1ZmYyMVwxMDFcdWZmMjFcMTAyXHVmZjIxXDEwN1x1ZmYyMVwxMTBcdWZmMjFcMTExXHVmZjIxIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjAzXDAwNFx1ZmYwM1wwMDVcdWZmMDNcMDA2XHVmZjAzXDAwNyIgKwotICAgICJcdWZmMDNcMDEwXHVmZjAzXDAxMVx1ZmYwM1wwMTJcdWZmMDNcMDEzXHVmZjAzXDAxNFx1ZmYwM1wwMTVcdWZmMDMiICsKLSAgICAiXDAxNlx1ZmYwM1wwMTdcdWZmMDNcMDIwXHVmZjAzXDAyMVx1ZmYwM1wwMjJcdWZmMDNcMDIzXHVmZjAzXDAyNCIgKwotICAgICJcdWZmMDNcMDI1XHVmZjAzXDAzMVx1ZmYzNFwwMzJcdWZmMDNcMDM1XHVmZjAzXDA1M1x1ZmYwM1wwNTRcdWZmMDMiICsKLSAgICAiXDA1NVx1ZmYwM1wwNTZcdWZmMDNcMDU3XHVmZjAzXDA2MFx1ZmYwM1wwNjFcdWZmMDNcMDYyXHVmZjAzXDA2MyIgKwotICAgICJcdWZmMDNcMDY0XHVmZjAzXDA2NVx1ZmYwM1wwNjZcdWZmMDNcMDY3XHVmZjAzXDA3MVx1ZmYwM1wwNzNcdWZmMDMiICsKLSAgICAiXDA3NFx1ZmYwM1wwNzVcdWZmMDNcMDc3XHVmZjAzXDEwMFx1ZmYwM1wxMDFcdWZmMDNcMTAyXHVmZjAzXDEwNyIgKwotICAgICJcdWZmMDNcMTEwXHVmZjAzXDExMVx1ZmYwM1wwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2IiArCi0gICAgIlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzMiICsKLSAgICAiXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNCIgKwotICAgICJcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxIiArCi0gICAgIlwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjUiICsKLSAgICAiXDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NSIgKwotICAgICJcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1IiArCi0gICAgIlwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTIiICsKLSAgICAiXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MSIgKwotICAgICJcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3IiArCi0gICAgIlwxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMDFcMDA0XHVmZjAxIiArCi0gICAgIlwwMDVcdWZmMDFcMDA2XHVmZjAxXDAwN1x1ZmYwMVwwMTBcdWZmMDFcMDExXHVmZjAxXDAxMlx1ZmYwMVwwMTMiICsKLSAgICAiXHVmZjAxXDAxNFx1ZmYwMVwwMTVcdWZmMDFcMDE2XHVmZjAxXDAxN1x1ZmYwMVwwMjBcdWZmMDFcMDIxXHVmZjAxIiArCi0gICAgIlwwMjJcdWZmMDFcMDIzXHVmZjAxXDAyNFx1ZmYwMVwwMjVcdWZmMDFcMDMxXHVmZjMyXDAzMlx1ZmYwMVwwMzUiICsKLSAgICAiXHVmZjAxXDA1M1x1ZmYwMVwwNTRcdWZmMDFcMDU1XHVmZjAxXDA1Nlx1ZmYwMVwwNTdcdWZmMDFcMDYwXHVmZjAxIiArCi0gICAgIlwwNjFcdWZmMDFcMDYyXHVmZjAxXDA2M1x1ZmYwMVwwNjRcdWZmMDFcMDY1XHVmZjAxXDA2Nlx1ZmYwMVwwNjciICsKLSAgICAiXHVmZjAxXDA3MVx1ZmYwMVwwNzNcdWZmMDFcMDc0XHVmZjAxXDA3NVx1ZmYwMVwwNzdcdWZmMDFcMTAwXHVmZjAxIiArCi0gICAgIlwxMDFcdWZmMDFcMTAyXHVmZjAxXDEwN1x1ZmYwMVwxMTBcdWZmMDFcMTExXHVmZjAxXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMjZcMDAyXHVmZjkzXDAwNFx1ZmY5M1wwMDVcdWZmOTNcMDA3XHVmZjkzXDAxMFx1ZmY5M1wwMTFcdWZmOTMiICsKLSAgICAiXDAxMlx1ZmY5M1wwMTNcdWZmOTNcMDE0XHVmZjkzXDAxNVx1ZmY5M1wwMTZcdWZmOTNcMDE3XHVmZjkzXDAyMCIgKwotICAgICJcdWZmOTNcMDIxXHVmZjkzXDAyMlx1ZmY5M1wwMjNcdWZmOTNcMDI0XHVmZjkzXDAyNVx1ZmY5M1wwMzJcdWZmOTMiICsKLSAgICAiXDA1M1x1ZmY5M1wwNTRcdWZmOTNcMDU1XHVmZjkzXDA1Nlx1ZmY5M1wwNTdcdWZmOTNcMDYwXHVmZjkzXDA2MSIgKwotICAgICJcdWZmOTNcMDYyXHVmZjkzXDA2M1x1ZmY5M1wwNjRcdWZmOTNcMDY1XHVmZjkzXDA2Nlx1ZmY5M1wwNjdcdWZmOTMiICsKLSAgICAiXDA3MVx1ZmY5M1wwNzNcdWZmOTNcMDc0XHVmZjkzXDA3NVx1ZmY5M1wxMDBcdWZmOTNcMTAxXHVmZjkzXDEwMiIgKwotICAgICJcdWZmOTNcMTA3XHVmZjkzXDExMFx1ZmY5M1wxMTFcdWZmOTNcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmZhNiIgKwotICAgICJcMDA0XHVmZmE2XDAwNVx1ZmZhNlwwMDdcdWZmYTZcMDEwXHVmZmE2XDAxMVx1ZmZhNlwwMTJcdWZmYTZcMDEzIiArCi0gICAgIlx1ZmZhNlwwMTRcdWZmYTZcMDE1XHVmZmE2XDAxNlx1ZmZhNlwwMTdcdWZmYTZcMDIwXHVmZmE2XDAyMVx1ZmZhNiIgKwotICAgICJcMDIyXHVmZmE2XDAyM1x1ZmZhNlwwMjRcdWZmYTZcMDI1XHVmZmE2XDAzMlx1ZmZhNlwwNTNcdWZmYTZcMDU0IiArCi0gICAgIlx1ZmZhNlwwNTVcdWZmYTZcMDU2XHVmZmE2XDA1N1x1ZmZhNlwwNjBcdWZmYTZcMDYxXHVmZmE2XDA2Mlx1ZmZhNiIgKwotICAgICJcMDYzXHVmZmE2XDA2NFx1ZmZhNlwwNjVcdWZmYTZcMDY2XHVmZmE2XDA2N1x1ZmZhNlwwNzFcdWZmYTZcMDczIiArCi0gICAgIlx1ZmZhNlwwNzRcdWZmYTZcMDc1XHVmZmE2XDEwMFx1ZmZhNlwxMDFcdWZmYTZcMTAyXHVmZmE2XDEwN1x1ZmZhNiIgKwotICAgICJcMTEwXHVmZmE2XDExMVx1ZmZhNlwwMDFcMDAyXDAwMFwwMDRcMDMxXDM3MVwwMDFcMDAyXDAwMCIgKwotICAgICJcMDA2XDAwNlwzMTdcMDMxXHVmZjFlXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZlZmZcMDA0XHVmZWZmIiArCi0gICAgIlwwMDVcdWZlZmZcMDA2XHVmZWZmXDAwN1x1ZmVmZlwwMTBcdWZlZmZcMDExXHVmZWZmXDAxMlx1ZmVmZlwwMTMiICsKLSAgICAiXHVmZWZmXDAxNFx1ZmVmZlwwMTVcdWZlZmZcMDE2XHVmZWZmXDAxN1x1ZmVmZlwwMjBcdWZlZmZcMDIxXHVmZWZmIiArCi0gICAgIlwwMjJcdWZlZmZcMDIzXHVmZWZmXDAyNFx1ZmVmZlwwMjVcdWZlZmZcMDMxXHVmZjMwXDAzMlx1ZmVmZlwwMzUiICsKLSAgICAiXHVmZWZmXDA1M1x1ZmVmZlwwNTRcdWZlZmZcMDU1XHVmZWZmXDA1Nlx1ZmVmZlwwNTdcdWZlZmZcMDYwXHVmZWZmIiArCi0gICAgIlwwNjFcdWZlZmZcMDYyXHVmZWZmXDA2M1x1ZmVmZlwwNjRcdWZlZmZcMDY1XHVmZWZmXDA2Nlx1ZmVmZlwwNjciICsKLSAgICAiXHVmZWZmXDA3MVx1ZmVmZlwwNzNcdWZlZmZcMDc0XHVmZWZmXDA3NVx1ZmVmZlwwNzdcdWZlZmZcMTAwXHVmZWZmIiArCi0gICAgIlwxMDFcdWZlZmZcMTAyXHVmZWZmXDEwN1x1ZmVmZlwxMTBcdWZlZmZcMTExXHVmZWZmXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzZcMDAyXHVmZWY3XDAwNFx1ZmVmN1wwMDVcdWZlZjdcMDA2XHVmZWY3XDAwN1x1ZmVmN1wwMTBcdWZlZjciICsKLSAgICAiXDAxMVx1ZmVmN1wwMTJcdWZlZjdcMDEzXHVmZWY3XDAxNFx1ZmVmN1wwMTVcdWZlZjdcMDE2XHVmZWY3XDAxNyIgKwotICAgICJcdWZlZjdcMDIwXHVmZWY3XDAyMVx1ZmVmN1wwMjJcdWZlZjdcMDIzXHVmZWY3XDAyNFx1ZmVmN1wwMjVcdWZlZjciICsKLSAgICAiXDAzMVx1ZmYyN1wwMzJcdWZlZjdcMDM1XHVmZWY3XDA1M1x1ZmVmN1wwNTRcdWZlZjdcMDU1XHVmZWY3XDA1NiIgKwotICAgICJcdWZlZjdcMDU3XHVmZWY3XDA2MFx1ZmVmN1wwNjFcdWZlZjdcMDYyXHVmZWY3XDA2M1x1ZmVmN1wwNjRcdWZlZjciICsKLSAgICAiXDA2NVx1ZmVmN1wwNjZcdWZlZjdcMDY3XHVmZWY3XDA3MVx1ZmVmN1wwNzNcdWZlZjdcMDc0XHVmZWY3XDA3NSIgKwotICAgICJcdWZlZjdcMDc3XHVmZWY3XDEwMFx1ZmVmN1wxMDFcdWZlZjdcMTAyXHVmZWY3XDEwN1x1ZmVmN1wxMTBcdWZlZjciICsKLSAgICAiXDExMVx1ZmVmN1wwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjk1XDAwNFx1ZmY5NVwwMDVcdWZmOTVcMDA3IiArCi0gICAgIlx1ZmY5NVwwMTBcdWZmOTVcMDExXHVmZjk1XDAxMlx1ZmY5NVwwMTNcdWZmOTVcMDE0XHVmZjk1XDAxNVx1ZmY5NSIgKwotICAgICJcMDE2XHVmZjk1XDAxN1x1ZmY5NVwwMjBcdWZmOTVcMDIxXHVmZjk1XDAyMlx1ZmY5NVwwMjNcdWZmOTVcMDI0IiArCi0gICAgIlx1ZmY5NVwwMjVcdWZmOTVcMDMyXHVmZjk1XDA1M1x1ZmY5NVwwNTRcdWZmOTVcMDU1XHVmZjk1XDA1Nlx1ZmY5NSIgKwotICAgICJcMDU3XHVmZjk1XDA2MFx1ZmY5NVwwNjFcdWZmOTVcMDYyXHVmZjk1XDA2M1x1ZmY5NVwwNjRcdWZmOTVcMDY1IiArCi0gICAgIlx1ZmY5NVwwNjZcdWZmOTVcMDY3XHVmZjk1XDA3MVx1ZmY5NVwwNzNcdWZmOTVcMDc0XHVmZjk1XDA3NVx1ZmY5NSIgKwotICAgICJcMTAwXHVmZjk1XDEwMVx1ZmY5NVwxMDJcdWZmOTVcMTA3XHVmZjk1XDExMFx1ZmY5NVwxMTFcdWZmOTVcMDAxIiArCi0gICAgIlwwMDJcMDAwXDAxMFwwMDZcMzA0XDAyNlwzMDNcMDMxXHVmZjQ1XDAwMVwwMDJcMDAwXDEyMCIgKwotICAgICJcMDAyXHVmZmQxXDAwNVx1ZmZkMVwwMDdcdWZmZDFcMDEwXHVmZmQxXDAxMVx1ZmZkMVwwMTJcdWZmZDFcMDEzIiArCi0gICAgIlx1ZmZkMVwwMTRcdWZmZDFcMDE1XHVmZmQxXDAxNlx1ZmZkMVwwMTdcdWZmZDFcMDIwXHVmZmQxXDAyMVx1ZmZkMSIgKwotICAgICJcMDIyXHVmZmQxXDAyM1x1ZmZkMVwwMzJcdWZmZDFcMDUzXHVmZmQxXDA1NFx1ZmZkMVwwNTVcdWZmZDFcMDU2IiArCi0gICAgIlx1ZmZkMVwwNTdcdWZmZDFcMDYwXHVmZmQxXDA2MVx1ZmZkMVwwNjJcdWZmZDFcMDYzXHVmZmQxXDA2NFx1ZmZkMSIgKwotICAgICJcMDY1XHVmZmQxXDA2Nlx1ZmZkMVwwNjdcdWZmZDFcMDcxXHVmZmQxXDA3M1x1ZmZkMVwwNzRcdWZmZDFcMDc1IiArCi0gICAgIlx1ZmZkMVwxMDBcdWZmZDFcMTAxXHVmZmQxXDEwMlx1ZmZkMVwxMDdcdWZmZDFcMTEwXHVmZmQxXDExMVx1ZmZkMSIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA2XDAwNlwyNzRcMDMxXHVmZjJiXDAwMVwwMDJcMDAwXDEyMFwwMDIiICsKLSAgICAiXHVmZmNlXDAwNVx1ZmZjZVwwMDdcdWZmY2VcMDEwXHVmZmNlXDAxMVx1ZmZjZVwwMTJcdWZmY2VcMDEzXHVmZmNlIiArCi0gICAgIlwwMTRcdWZmY2VcMDE1XHVmZmNlXDAxNlx1ZmZjZVwwMTdcdWZmY2VcMDIwXHVmZmNlXDAyMVx1ZmZjZVwwMjIiICsKLSAgICAiXHVmZmNlXDAyM1x1ZmZjZVwwMzJcdWZmY2VcMDUzXHVmZmNlXDA1NFx1ZmZjZVwwNTVcdWZmY2VcMDU2XHVmZmNlIiArCi0gICAgIlwwNTdcdWZmY2VcMDYwXHVmZmNlXDA2MVx1ZmZjZVwwNjJcdWZmY2VcMDYzXHVmZmNlXDA2NFx1ZmZjZVwwNjUiICsKLSAgICAiXHVmZmNlXDA2Nlx1ZmZjZVwwNjdcdWZmY2VcMDcxXHVmZmNlXDA3M1x1ZmZjZVwwNzRcdWZmY2VcMDc1XHVmZmNlIiArCi0gICAgIlwxMDBcdWZmY2VcMTAxXHVmZmNlXDEwMlx1ZmZjZVwxMDdcdWZmY2VcMTEwXHVmZmNlXDExMVx1ZmZjZVwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM0XDAwMlx1ZmY0ZVwwMDRcdWZmNGVcMDA1XHVmZjRlXDAwNlx1ZmY0ZVwwMDdcdWZmNGUiICsKLSAgICAiXDAxMFx1ZmY0ZVwwMTFcdWZmNGVcMDEyXHVmZjRlXDAxM1x1ZmY0ZVwwMTRcdWZmNGVcMDE1XHVmZjRlXDAxNiIgKwotICAgICJcdWZmNGVcMDE3XHVmZjRlXDAyMFx1ZmY0ZVwwMjFcdWZmNGVcMDIyXHVmZjRlXDAyM1x1ZmY0ZVwwMjRcdWZmNGUiICsKLSAgICAiXDAyNVx1ZmY0ZVwwMzJcdWZmNGVcMDM1XHVmZjRlXDA1M1x1ZmY0ZVwwNTRcdWZmNGVcMDU1XHVmZjRlXDA1NiIgKwotICAgICJcdWZmNGVcMDU3XHVmZjRlXDA2MFx1ZmY0ZVwwNjFcdWZmNGVcMDYyXHVmZjRlXDA2M1x1ZmY0ZVwwNjRcdWZmNGUiICsKLSAgICAiXDA2NVx1ZmY0ZVwwNjZcdWZmNGVcMDY3XHVmZjRlXDA3MVx1ZmY0ZVwwNzNcdWZmNGVcMDc0XHVmZjRlXDA3NSIgKwotICAgICJcdWZmNGVcMDc3XHVmZjRlXDEwMFx1ZmY0ZVwxMDFcdWZmNGVcMTAyXHVmZjRlXDEwN1x1ZmY0ZVwxMTBcdWZmNGUiICsKLSAgICAiXDExMVx1ZmY0ZVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjcwXDAwNFx1ZmY3MFwwMDVcdWZmNzBcMDA3IiArCi0gICAgIlx1ZmY3MFwwMTBcdWZmNzBcMDExXHVmZjcwXDAxMlx1ZmY3MFwwMTNcdWZmNzBcMDE0XHVmZjcwXDAxNVx1ZmY3MCIgKwotICAgICJcMDE2XHVmZjcwXDAxN1x1ZmY3MFwwMjBcdWZmNzBcMDIxXHVmZjcwXDAyMlx1ZmY3MFwwMjNcdWZmNzBcMDI0IiArCi0gICAgIlx1ZmY3MFwwMjVcdWZmNzBcMDMyXHVmZjcwXDAzNVx1ZmY3MFwwNTNcdWZmNzBcMDU0XHVmZjcwXDA1NVx1ZmY3MCIgKwotICAgICJcMDU2XHVmZjcwXDA1N1x1ZmY3MFwwNjBcdWZmNzBcMDYxXHVmZjcwXDA2Mlx1ZmY3MFwwNjNcdWZmNzBcMDY0IiArCi0gICAgIlx1ZmY3MFwwNjVcdWZmNzBcMDY2XHVmZjcwXDA2N1x1ZmY3MFwwNzFcdWZmNzBcMDczXHVmZjcwXDA3NFx1ZmY3MCIgKwotICAgICJcMDc1XHVmZjcwXDEwMFx1ZmY3MFwxMDFcdWZmNzBcMTAyXHVmZjcwXDEwN1x1ZmY3MFwxMTBcdWZmNzBcMTExIiArCi0gICAgIlx1ZmY3MFwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjFhXDAwNFx1ZmYxYVwwMDVcdWZmMWFcMDA2XHVmZjFhIiArCi0gICAgIlwwMDdcdWZmMWFcMDEwXHVmZjFhXDAxMVx1ZmYxYVwwMTJcdWZmMWFcMDEzXHVmZjFhXDAxNFx1ZmYxYVwwMTUiICsKLSAgICAiXHVmZjFhXDAxNlx1ZmYxYVwwMTdcdWZmMWFcMDIwXHVmZjFhXDAyMVx1ZmYxYVwwMjJcdWZmMWFcMDIzXHVmZjFhIiArCi0gICAgIlwwMjRcdWZmMWFcMDI1XHVmZjFhXDAzMVx1ZmYxYVwwMzJcdWZmMWFcMDM1XHVmZjFhXDA1M1x1ZmYxYVwwNTQiICsKLSAgICAiXHVmZjFhXDA1NVx1ZmYxYVwwNTZcdWZmMWFcMDU3XHVmZjFhXDA2MFx1ZmYxYVwwNjFcdWZmMWFcMDYyXHVmZjFhIiArCi0gICAgIlwwNjNcdWZmMWFcMDY0XHVmZjFhXDA2NVx1ZmYxYVwwNjZcdWZmMWFcMDY3XHVmZjFhXDA3MVx1ZmYxYVwwNzMiICsKLSAgICAiXHVmZjFhXDA3NFx1ZmYxYVwwNzVcdWZmMWFcMDc3XHVmZjFhXDEwMFx1ZmYxYVwxMDFcdWZmMWFcMTAyXHVmZjFhIiArCi0gICAgIlwxMDdcdWZmMWFcMTEwXHVmZjFhXDExMVx1ZmYxYVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjAyXDAwNCIgKwotICAgICJcdWZmMDJcMDA1XHVmZjAyXDAwNlx1ZmYwMlwwMDdcdWZmMDJcMDEwXHVmZjAyXDAxMVx1ZmYwMlwwMTJcdWZmMDIiICsKLSAgICAiXDAxM1x1ZmYwMlwwMTRcdWZmMDJcMDE1XHVmZjAyXDAxNlx1ZmYwMlwwMTdcdWZmMDJcMDIwXHVmZjAyXDAyMSIgKwotICAgICJcdWZmMDJcMDIyXHVmZjAyXDAyM1x1ZmYwMlwwMjRcdWZmMDJcMDI1XHVmZjAyXDAzMVx1ZmYzM1wwMzJcdWZmMDIiICsKLSAgICAiXDAzNVx1ZmYwMlwwNTNcdWZmMDJcMDU0XHVmZjAyXDA1NVx1ZmYwMlwwNTZcdWZmMDJcMDU3XHVmZjAyXDA2MCIgKwotICAgICJcdWZmMDJcMDYxXHVmZjAyXDA2Mlx1ZmYwMlwwNjNcdWZmMDJcMDY0XHVmZjAyXDA2NVx1ZmYwMlwwNjZcdWZmMDIiICsKLSAgICAiXDA2N1x1ZmYwMlwwNzFcdWZmMDJcMDczXHVmZjAyXDA3NFx1ZmYwMlwwNzVcdWZmMDJcMDc3XHVmZjAyXDEwMCIgKwotICAgICJcdWZmMDJcMTAxXHVmZjAyXDEwMlx1ZmYwMlwxMDdcdWZmMDJcMTEwXHVmZjAyXDExMVx1ZmYwMlwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM2XDAwMlx1ZmYwNVwwMDRcdWZmMDVcMDA1XHVmZjA1XDAwNlx1ZmYwNVwwMDdcdWZmMDVcMDEwIiArCi0gICAgIlx1ZmYwNVwwMTFcdWZmMDVcMDEyXHVmZjA1XDAxM1x1ZmYwNVwwMTRcdWZmMDVcMDE1XHVmZjA1XDAxNlx1ZmYwNSIgKwotICAgICJcMDE3XHVmZjA1XDAyMFx1ZmYwNVwwMjFcdWZmMDVcMDIyXHVmZjA1XDAyM1x1ZmYwNVwwMjRcdWZmMDVcMDI1IiArCi0gICAgIlx1ZmYwNVwwMzFcdWZmMzZcMDMyXHVmZjA1XDAzNVx1ZmYwNVwwNTNcdWZmMDVcMDU0XHVmZjA1XDA1NVx1ZmYwNSIgKwotICAgICJcMDU2XHVmZjA1XDA1N1x1ZmYwNVwwNjBcdWZmMDVcMDYxXHVmZjA1XDA2Mlx1ZmYwNVwwNjNcdWZmMDVcMDY0IiArCi0gICAgIlx1ZmYwNVwwNjVcdWZmMDVcMDY2XHVmZjA1XDA2N1x1ZmYwNVwwNzFcdWZmMDVcMDczXHVmZjA1XDA3NFx1ZmYwNSIgKwotICAgICJcMDc1XHVmZjA1XDA3N1x1ZmYwNVwxMDBcdWZmMDVcMTAxXHVmZjA1XDEwMlx1ZmYwNVwxMDdcdWZmMDVcMTEwIiArCi0gICAgIlx1ZmYwNVwxMTFcdWZmMDVcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxNFwwMDRcdWZmMTRcMDA1XHVmZjE0IiArCi0gICAgIlwwMDZcdWZmMTRcMDA3XHVmZjE0XDAxMFx1ZmYxNFwwMTFcdWZmMTRcMDEyXHVmZjE0XDAxM1x1ZmYxNFwwMTQiICsKLSAgICAiXHVmZjE0XDAxNVx1ZmYxNFwwMTZcdWZmMTRcMDE3XHVmZjE0XDAyMFx1ZmYxNFwwMjFcdWZmMTRcMDIyXHVmZjE0IiArCi0gICAgIlwwMjNcdWZmMTRcMDI0XHVmZjE0XDAyNVx1ZmYxNFwwMjZcMjczXDAzMVx1ZmY0NlwwMzJcdWZmMTRcMDUzIiArCi0gICAgIlx1ZmYxNFwwNTRcdWZmMTRcMDU1XHVmZjE0XDA1Nlx1ZmYxNFwwNTdcdWZmMTRcMDYwXHVmZjE0XDA2MVx1ZmYxNCIgKwotICAgICJcMDYyXHVmZjE0XDA2M1x1ZmYxNFwwNjRcdWZmMTRcMDY1XHVmZjE0XDA2Nlx1ZmYxNFwwNjdcdWZmMTRcMDcxIiArCi0gICAgIlx1ZmYxNFwwNzNcdWZmMTRcMDc0XHVmZjE0XDA3NVx1ZmYxNFwxMDBcdWZmMTRcMTAxXHVmZjE0XDEwMlx1ZmYxNCIgKwotICAgICJcMTA3XHVmZjE0XDExMFx1ZmYxNFwxMTFcdWZmMTRcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmVmY1wwMDQiICsKLSAgICAiXHVmZWZjXDAwNVx1ZmVmY1wwMDZcdWZlZmNcMDA3XHVmZWZjXDAxMFx1ZmVmY1wwMTFcdWZlZmNcMDEyXHVmZWZjIiArCi0gICAgIlwwMTNcdWZlZmNcMDE0XHVmZWZjXDAxNVx1ZmVmY1wwMTZcdWZlZmNcMDE3XHVmZWZjXDAyMFx1ZmVmY1wwMjEiICsKLSAgICAiXHVmZWZjXDAyMlx1ZmVmY1wwMjNcdWZlZmNcMDI0XHVmZWZjXDAyNVx1ZmVmY1wwMzFcdWZmMmRcMDMyXHVmZWZjIiArCi0gICAgIlwwMzNcMjU3XDA1M1x1ZmVmY1wwNTRcdWZlZmNcMDU1XHVmZWZjXDA1Nlx1ZmVmY1wwNTdcdWZlZmNcMDYwIiArCi0gICAgIlx1ZmVmY1wwNjFcdWZlZmNcMDYyXHVmZWZjXDA2M1x1ZmVmY1wwNjRcdWZlZmNcMDY1XHVmZWZjXDA2Nlx1ZmVmYyIgKwotICAgICJcMDY3XHVmZWZjXDA3MVx1ZmVmY1wwNzNcdWZlZmNcMDc0XHVmZWZjXDA3NVx1ZmVmY1wxMDBcdWZlZmNcMTAxIiArCi0gICAgIlx1ZmVmY1wxMDJcdWZlZmNcMTA3XHVmZWZjXDExMFx1ZmVmY1wxMTFcdWZlZmNcMDAxXDAwMlwwMDBcMDA2IiArCi0gICAgIlwwMzJcMjIxXDEwMFwyMjJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5ZVwwMDRcdWZmOWVcMDA1IiArCi0gICAgIlx1ZmY5ZVwwMDdcdWZmOWVcMDEwXHVmZjllXDAxMVx1ZmY5ZVwwMTJcdWZmOWVcMDEzXHVmZjllXDAxNFx1ZmY5ZSIgKwotICAgICJcMDE1XHVmZjllXDAxNlx1ZmY5ZVwwMTdcdWZmOWVcMDIwXHVmZjllXDAyMVx1ZmY5ZVwwMjJcdWZmOWVcMDIzIiArCi0gICAgIlx1ZmY5ZVwwMjRcdWZmOWVcMDI1XHVmZjllXDAzMlx1ZmY5ZVwwNTNcdWZmOWVcMDU0XHVmZjllXDA1NVx1ZmY5ZSIgKwotICAgICJcMDU2XHVmZjllXDA1N1x1ZmY5ZVwwNjBcdWZmOWVcMDYxXHVmZjllXDA2Mlx1ZmY5ZVwwNjNcdWZmOWVcMDY0IiArCi0gICAgIlx1ZmY5ZVwwNjVcdWZmOWVcMDY2XHVmZjllXDA2N1x1ZmY5ZVwwNzFcdWZmOWVcMDczXHVmZjllXDA3NFx1ZmY5ZSIgKwotICAgICJcMDc1XHVmZjllXDEwMFx1ZmY5ZVwxMDFcdWZmOWVcMTAyXHVmZjllXDEwN1x1ZmY5ZVwxMTBcdWZmOWVcMTExIiArCi0gICAgIlx1ZmY5ZVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjk3XDAwNFx1ZmY5N1wwMDVcdWZmOTdcMDA3XHVmZjk3IiArCi0gICAgIlwwMTBcdWZmOTdcMDExXHVmZjk3XDAxMlx1ZmY5N1wwMTNcdWZmOTdcMDE0XHVmZjk3XDAxNVx1ZmY5N1wwMTYiICsKLSAgICAiXHVmZjk3XDAxN1x1ZmY5N1wwMjBcdWZmOTdcMDIxXHVmZjk3XDAyMlx1ZmY5N1wwMjNcdWZmOTdcMDI0XHVmZjk3IiArCi0gICAgIlwwMjVcdWZmOTdcMDMyXHVmZjk3XDA1M1x1ZmY5N1wwNTRcdWZmOTdcMDU1XHVmZjk3XDA1Nlx1ZmY5N1wwNTciICsKLSAgICAiXHVmZjk3XDA2MFx1ZmY5N1wwNjFcdWZmOTdcMDYyXHVmZjk3XDA2M1x1ZmY5N1wwNjRcdWZmOTdcMDY1XHVmZjk3IiArCi0gICAgIlwwNjZcdWZmOTdcMDY3XHVmZjk3XDA3MVx1ZmY5N1wwNzNcdWZmOTdcMDc0XHVmZjk3XDA3NVx1ZmY5N1wxMDAiICsKLSAgICAiXHVmZjk3XDEwMVx1ZmY5N1wxMDJcdWZmOTdcMTA3XHVmZjk3XDExMFx1ZmY5N1wxMTFcdWZmOTdcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzMFwwMDJcdWZmNmZcMDA0XHVmZjZmXDAwNVx1ZmY2ZlwwMDdcdWZmNmZcMDEwXHVmZjZmXDAxMSIgKwotICAgICJcdWZmNmZcMDEyXHVmZjZmXDAxM1x1ZmY2ZlwwMTRcdWZmNmZcMDE1XHVmZjZmXDAxNlx1ZmY2ZlwwMTdcdWZmNmYiICsKLSAgICAiXDAyMFx1ZmY2ZlwwMjFcdWZmNmZcMDIyXHVmZjZmXDAyM1x1ZmY2ZlwwMjRcdWZmNmZcMDI1XHVmZjZmXDAzMiIgKwotICAgICJcdWZmNmZcMDM1XHVmZjZmXDA1M1x1ZmY2ZlwwNTRcdWZmNmZcMDU1XHVmZjZmXDA1Nlx1ZmY2ZlwwNTdcdWZmNmYiICsKLSAgICAiXDA2MFx1ZmY2ZlwwNjFcdWZmNmZcMDYyXHVmZjZmXDA2M1x1ZmY2ZlwwNjRcdWZmNmZcMDY1XHVmZjZmXDA2NiIgKwotICAgICJcdWZmNmZcMDY3XHVmZjZmXDA3MVx1ZmY2ZlwwNzNcdWZmNmZcMDc0XHVmZjZmXDA3NVx1ZmY2ZlwxMDBcdWZmNmYiICsKLSAgICAiXDEwMVx1ZmY2ZlwxMDJcdWZmNmZcMTA3XHVmZjZmXDExMFx1ZmY2ZlwxMTFcdWZmNmZcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEyNlwwMDJcdWZmYjJcMDA0XHVmZmIyXDAwNVx1ZmZiMlwwMDdcdWZmYjJcMDEwXHVmZmIyXDAxMVx1ZmZiMiIgKwotICAgICJcMDEyXHVmZmIyXDAxM1x1ZmZiMlwwMTRcdWZmYjJcMDE1XHVmZmIyXDAxNlx1ZmZiMlwwMTdcdWZmYjJcMDIwIiArCi0gICAgIlx1ZmZiMlwwMjFcdWZmYjJcMDIyXHVmZmIyXDAyM1x1ZmZiMlwwMjRcdWZmYjJcMDI1XHVmZmIyXDAzMlx1ZmZiMiIgKwotICAgICJcMDUzXHVmZmIyXDA1NFx1ZmZiMlwwNTVcdWZmYjJcMDU2XHVmZmIyXDA1N1x1ZmZiMlwwNjBcdWZmYjJcMDYxIiArCi0gICAgIlx1ZmZiMlwwNjJcdWZmYjJcMDYzXHVmZmIyXDA2NFx1ZmZiMlwwNjVcdWZmYjJcMDY2XHVmZmIyXDA2N1x1ZmZiMiIgKwotICAgICJcMDcxXHVmZmIyXDA3M1x1ZmZiMlwwNzRcdWZmYjJcMDc1XHVmZmIyXDEwMFx1ZmZiMlwxMDFcdWZmYjJcMTAyIiArCi0gICAgIlx1ZmZiMlwxMDdcdWZmYjJcMTEwXHVmZmIyXDExMVx1ZmZiMlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjhlIiArCi0gICAgIlwwMDRcdWZmOGVcMDA1XHVmZjhlXDAwN1x1ZmY4ZVwwMTBcdWZmOGVcMDExXHVmZjhlXDAxMlx1ZmY4ZVwwMTMiICsKLSAgICAiXHVmZjhlXDAxNFx1ZmY4ZVwwMTVcdWZmOGVcMDE2XHVmZjhlXDAxN1x1ZmY4ZVwwMjBcdWZmOGVcMDIxXHVmZjhlIiArCi0gICAgIlwwMjJcdWZmOGVcMDIzXHVmZjhlXDAyNFx1ZmY4ZVwwMjVcdWZmOGVcMDMyXHVmZjhlXDA1M1x1ZmY4ZVwwNTQiICsKLSAgICAiXHVmZjhlXDA1NVx1ZmY4ZVwwNTZcdWZmOGVcMDU3XHVmZjhlXDA2MFx1ZmY4ZVwwNjFcdWZmOGVcMDYyXHVmZjhlIiArCi0gICAgIlwwNjNcdWZmOGVcMDY0XHVmZjhlXDA2NVx1ZmY4ZVwwNjZcdWZmOGVcMDY3XHVmZjhlXDA3MVx1ZmY4ZVwwNzMiICsKLSAgICAiXHVmZjhlXDA3NFx1ZmY4ZVwwNzVcdWZmOGVcMTAwXHVmZjhlXDEwMVx1ZmY4ZVwxMDJcdWZmOGVcMTA3XHVmZjhlIiArCi0gICAgIlwxMTBcdWZmOGVcMTExXHVmZjhlXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOTBcMDA0XHVmZjkwXDAwNSIgKwotICAgICJcdWZmOTBcMDA3XHVmZjkwXDAxMFx1ZmY5MFwwMTFcdWZmOTBcMDEyXHVmZjkwXDAxM1x1ZmY5MFwwMTRcdWZmOTAiICsKLSAgICAiXDAxNVx1ZmY5MFwwMTZcdWZmOTBcMDE3XHVmZjkwXDAyMFx1ZmY5MFwwMjFcdWZmOTBcMDIyXHVmZjkwXDAyMyIgKwotICAgICJcdWZmOTBcMDI0XHVmZjkwXDAyNVx1ZmY5MFwwMzJcdWZmOTBcMDUzXHVmZjkwXDA1NFx1ZmY5MFwwNTVcdWZmOTAiICsKLSAgICAiXDA1Nlx1ZmY5MFwwNTdcdWZmOTBcMDYwXHVmZjkwXDA2MVx1ZmY5MFwwNjJcdWZmOTBcMDYzXHVmZjkwXDA2NCIgKwotICAgICJcdWZmOTBcMDY1XHVmZjkwXDA2Nlx1ZmY5MFwwNjdcdWZmOTBcMDcxXHVmZjkwXDA3M1x1ZmY5MFwwNzRcdWZmOTAiICsKLSAgICAiXDA3NVx1ZmY5MFwxMDBcdWZmOTBcMTAxXHVmZjkwXDEwMlx1ZmY5MFwxMDdcdWZmOTBcMTEwXHVmZjkwXDExMSIgKwotICAgICJcdWZmOTBcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY1MFwwMDRcdWZmNTBcMDA1XHVmZjUwXDAwN1x1ZmY1MCIgKwotICAgICJcMDEwXHVmZjUwXDAxMVx1ZmY1MFwwMTJcdWZmNTBcMDEzXHVmZjUwXDAxNFx1ZmY1MFwwMTVcdWZmNTBcMDE2IiArCi0gICAgIlx1ZmY1MFwwMTdcdWZmNTBcMDIwXHVmZjUwXDAyMVx1ZmY1MFwwMjJcdWZmNTBcMDIzXHVmZjUwXDAyNFx1ZmY1MCIgKwotICAgICJcMDI1XHVmZjUwXDAzMlx1ZmY1MFwwNTNcdWZmNTBcMDU0XHVmZjUwXDA1NVx1ZmY1MFwwNTZcdWZmNTBcMDU3IiArCi0gICAgIlx1ZmY1MFwwNjBcdWZmNTBcMDYxXHVmZjUwXDA2Mlx1ZmY1MFwwNjNcdWZmNTBcMDY0XHVmZjUwXDA2NVx1ZmY1MCIgKwotICAgICJcMDY2XHVmZjUwXDA2N1x1ZmY1MFwwNzFcdWZmNTBcMDczXHVmZjUwXDA3NFx1ZmY1MFwwNzVcdWZmNTBcMTAwIiArCi0gICAgIlx1ZmY1MFwxMDFcdWZmNTBcMTAyXHVmZjUwXDEwN1x1ZmY1MFwxMTBcdWZmNTBcMTExXHVmZjUwXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMjZcMDAyXHVmZmE4XDAwNFx1ZmZhOFwwMDVcdWZmYThcMDA3XHVmZmE4XDAxMFx1ZmZhOFwwMTEiICsKLSAgICAiXHVmZmE4XDAxMlx1ZmZhOFwwMTNcdWZmYThcMDE0XHVmZmE4XDAxNVx1ZmZhOFwwMTZcdWZmYThcMDE3XHVmZmE4IiArCi0gICAgIlwwMjBcdWZmYThcMDIxXHVmZmE4XDAyMlx1ZmZhOFwwMjNcdWZmYThcMDI0XHVmZmE4XDAyNVx1ZmZhOFwwMzIiICsKLSAgICAiXHVmZmE4XDA1M1x1ZmZhOFwwNTRcdWZmYThcMDU1XHVmZmE4XDA1Nlx1ZmZhOFwwNTdcdWZmYThcMDYwXHVmZmE4IiArCi0gICAgIlwwNjFcdWZmYThcMDYyXHVmZmE4XDA2M1x1ZmZhOFwwNjRcdWZmYThcMDY1XHVmZmE4XDA2Nlx1ZmZhOFwwNjciICsKLSAgICAiXHVmZmE4XDA3MVx1ZmZhOFwwNzNcdWZmYThcMDc0XHVmZmE4XDA3NVx1ZmZhOFwxMDBcdWZmYThcMTAxXHVmZmE4IiArCi0gICAgIlwxMDJcdWZmYThcMTA3XHVmZmE4XDExMFx1ZmZhOFwxMTFcdWZmYThcMDAxXDAwMlwwMDBcMTM2XDAwMiIgKwotICAgICJcdWZlZmRcMDA0XHVmZWZkXDAwNVx1ZmVmZFwwMDZcdWZlZmRcMDA3XHVmZWZkXDAxMFx1ZmVmZFwwMTFcdWZlZmQiICsKLSAgICAiXDAxMlx1ZmVmZFwwMTNcdWZlZmRcMDE0XHVmZWZkXDAxNVx1ZmVmZFwwMTZcdWZlZmRcMDE3XHVmZWZkXDAyMCIgKwotICAgICJcdWZlZmRcMDIxXHVmZWZkXDAyMlx1ZmVmZFwwMjNcdWZlZmRcMDI0XHVmZWZkXDAyNVx1ZmVmZFwwMzFcdWZmMmUiICsKLSAgICAiXDAzMlx1ZmVmZFwwMzVcdWZlZmRcMDUzXHVmZWZkXDA1NFx1ZmVmZFwwNTVcdWZlZmRcMDU2XHVmZWZkXDA1NyIgKwotICAgICJcdWZlZmRcMDYwXHVmZWZkXDA2MVx1ZmVmZFwwNjJcdWZlZmRcMDYzXHVmZWZkXDA2NFx1ZmVmZFwwNjVcdWZlZmQiICsKLSAgICAiXDA2Nlx1ZmVmZFwwNjdcdWZlZmRcMDcxXHVmZWZkXDA3M1x1ZmVmZFwwNzRcdWZlZmRcMDc1XHVmZWZkXDA3NyIgKwotICAgICJcdWZlZmRcMTAwXHVmZWZkXDEwMVx1ZmVmZFwxMDJcdWZlZmRcMTA3XHVmZWZkXDExMFx1ZmVmZFwxMTFcdWZlZmQiICsKLSAgICAiXDAwMVwwMDJcMDAwXDExMFwwMDJcdWZmZGZcMDA1XHVmZmRmXDAwN1x1ZmZkZlwwMTBcdWZmZGZcMDExIiArCi0gICAgIlx1ZmZkZlwwMTJcdWZmZGZcMDEzXHVmZmRmXDAxNFx1ZmZkZlwwMTVcdWZmZGZcMDE2XHVmZmRmXDAxN1x1ZmZkZiIgKwotICAgICJcMDIwXHVmZmRmXDAyMVx1ZmZkZlwwMjJcdWZmZGZcMDIzXHVmZmRmXDAzMlx1ZmZkZlwwNTNcdWZmZGZcMDU0IiArCi0gICAgIlx1ZmZkZlwwNTVcdWZmZGZcMDU2XHVmZmRmXDA1N1x1ZmZkZlwwNjBcdWZmZGZcMDYxXHVmZmRmXDA2Mlx1ZmZkZiIgKwotICAgICJcMDYzXHVmZmRmXDA2NFx1ZmZkZlwwNjVcMjA3XDA2NlwyMDZcMDc1XHVmZmRmXDEwMFx1ZmZkZlwxMDEiICsKLSAgICAiXHVmZmRmXDEwMlx1ZmZkZlwxMDdcdWZmZGZcMTEwXHVmZmRmXDExMVx1ZmZkZlwwMDFcMDAyXDAwMFwxMzYiICsKLSAgICAiXDAwMlx1ZmVmOFwwMDRcdWZlZjhcMDA1XHVmZWY4XDAwNlx1ZmVmOFwwMDdcdWZlZjhcMDEwXHVmZWY4XDAxMSIgKwotICAgICJcdWZlZjhcMDEyXHVmZWY4XDAxM1x1ZmVmOFwwMTRcdWZlZjhcMDE1XHVmZWY4XDAxNlx1ZmVmOFwwMTdcdWZlZjgiICsKLSAgICAiXDAyMFx1ZmVmOFwwMjFcdWZlZjhcMDIyXHVmZWY4XDAyM1x1ZmVmOFwwMjRcdWZlZjhcMDI1XHVmZWY4XDAzMSIgKwotICAgICJcdWZmMjhcMDMyXHVmZWY4XDAzNVx1ZmVmOFwwNTNcdWZlZjhcMDU0XHVmZWY4XDA1NVx1ZmVmOFwwNTZcdWZlZjgiICsKLSAgICAiXDA1N1x1ZmVmOFwwNjBcdWZlZjhcMDYxXHVmZWY4XDA2Mlx1ZmVmOFwwNjNcdWZlZjhcMDY0XHVmZWY4XDA2NSIgKwotICAgICJcdWZlZjhcMDY2XHVmZWY4XDA2N1x1ZmVmOFwwNzFcdWZlZjhcMDczXHVmZWY4XDA3NFx1ZmVmOFwwNzVcdWZlZjgiICsKLSAgICAiXDA3N1x1ZmVmOFwxMDBcdWZlZjhcMTAxXHVmZWY4XDEwMlx1ZmVmOFwxMDdcdWZlZjhcMTEwXHVmZWY4XDExMSIgKwotICAgICJcdWZlZjhcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY4ZlwwMDRcdWZmOGZcMDA1XHVmZjhmXDAwN1x1ZmY4ZiIgKwotICAgICJcMDEwXHVmZjhmXDAxMVx1ZmY4ZlwwMTJcdWZmOGZcMDEzXHVmZjhmXDAxNFx1ZmY4ZlwwMTVcdWZmOGZcMDE2IiArCi0gICAgIlx1ZmY4ZlwwMTdcdWZmOGZcMDIwXHVmZjhmXDAyMVx1ZmY4ZlwwMjJcdWZmOGZcMDIzXHVmZjhmXDAyNFx1ZmY4ZiIgKwotICAgICJcMDI1XHVmZjhmXDAzMlx1ZmY4ZlwwNTNcdWZmOGZcMDU0XHVmZjhmXDA1NVx1ZmY4ZlwwNTZcdWZmOGZcMDU3IiArCi0gICAgIlx1ZmY4ZlwwNjBcdWZmOGZcMDYxXHVmZjhmXDA2Mlx1ZmY4ZlwwNjNcdWZmOGZcMDY0XHVmZjhmXDA2NVx1ZmY4ZiIgKwotICAgICJcMDY2XHVmZjhmXDA2N1x1ZmY4ZlwwNzFcdWZmOGZcMDczXHVmZjhmXDA3NFx1ZmY4ZlwwNzVcdWZmOGZcMTAwIiArCi0gICAgIlx1ZmY4ZlwxMDFcdWZmOGZcMTAyXHVmZjhmXDEwN1x1ZmY4ZlwxMTBcdWZmOGZcMTExXHVmZjhmXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzZcMDAyXHVmZjE2XDAwNFx1ZmYxNlwwMDVcdWZmMTZcMDA2XHVmZjE2XDAwN1x1ZmYxNlwwMTAiICsKLSAgICAiXHVmZjE2XDAxMVx1ZmYxNlwwMTJcdWZmMTZcMDEzXHVmZjE2XDAxNFx1ZmYxNlwwMTVcdWZmMTZcMDE2XHVmZjE2IiArCi0gICAgIlwwMTdcdWZmMTZcMDIwXHVmZjE2XDAyMVx1ZmYxNlwwMjJcdWZmMTZcMDIzXHVmZjE2XDAyNFx1ZmYxNlwwMjUiICsKLSAgICAiXHVmZjE2XDAzMVx1ZmY0OFwwMzJcdWZmMTZcMDM1XHVmZjE2XDA1M1x1ZmYxNlwwNTRcdWZmMTZcMDU1XHVmZjE2IiArCi0gICAgIlwwNTZcdWZmMTZcMDU3XHVmZjE2XDA2MFx1ZmYxNlwwNjFcdWZmMTZcMDYyXHVmZjE2XDA2M1x1ZmYxNlwwNjQiICsKLSAgICAiXHVmZjE2XDA2NVx1ZmYxNlwwNjZcdWZmMTZcMDY3XHVmZjE2XDA3MVx1ZmYxNlwwNzNcdWZmMTZcMDc0XHVmZjE2IiArCi0gICAgIlwwNzVcdWZmMTZcMDc3XHVmZjE2XDEwMFx1ZmYxNlwxMDFcdWZmMTZcMTAyXHVmZjE2XDEwN1x1ZmYxNlwxMTAiICsKLSAgICAiXHVmZjE2XDExMVx1ZmYxNlwwMDFcMDAyXDAwMFwwMjRcMDAyXHVmZmYxXDAwNVx1ZmZmMVwwMDdcdWZmZjEiICsKLSAgICAiXDAzMlx1ZmZmMVwxMDBcdWZmZjFcMTAxXHVmZmYxXDEwN1x1ZmZmMVwxMTBcMjAwXDExMVx1ZmZmMVwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTI0XDAwMlx1ZmZiYVwwMDVcdWZmYmFcMDA3XHVmZmJhXDAxMFx1ZmZiYVwwMTFcdWZmYmEiICsKLSAgICAiXDAxMlx1ZmZiYVwwMTNcdWZmYmFcMDE0XHVmZmJhXDAxNVx1ZmZiYVwwMTZcdWZmYmFcMDE3XHVmZmJhXDAyMCIgKwotICAgICJcdWZmYmFcMDIxXHVmZmJhXDAyMlx1ZmZiYVwwMjNcdWZmYmFcMDI0XHVmZmJhXDAyNVx1ZmZiYVwwMzJcdWZmYmEiICsKLSAgICAiXDA1M1x1ZmZiYVwwNTRcdWZmYmFcMDU1XHVmZmJhXDA1Nlx1ZmZiYVwwNTdcdWZmYmFcMDYwXHVmZmJhXDA2MSIgKwotICAgICJcdWZmYmFcMDYyXHVmZmJhXDA2M1x1ZmZiYVwwNjRcdWZmYmFcMDY1XHVmZmJhXDA2Nlx1ZmZiYVwwNjdcdWZmYmEiICsKLSAgICAiXDA3MVx1ZmZiYVwwNzNcdWZmYmFcMDc0XHVmZmJhXDA3NVx1ZmZiYVwxMDBcdWZmYmFcMTAxXHVmZmJhXDEwMiIgKwotICAgICJcdWZmYmFcMTA3XHVmZmJhXDExMFx1ZmZiYVwxMTFcdWZmYmFcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDEiICsKLSAgICAiXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMCIgKwotICAgICJcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1IiArCi0gICAgIlwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTAiICsKLSAgICAiXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMiIgKwotICAgICJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0IiArCi0gICAgIlwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzUiICsKLSAgICAiXDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMSIgKwotICAgICJcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0IiArCi0gICAgIlwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjYiICsKLSAgICAiXDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZWZiIiArCi0gICAgIlwwMDRcdWZlZmJcMDA1XHVmZWZiXDAwNlx1ZmVmYlwwMDdcdWZlZmJcMDEwXHVmZWZiXDAxMVx1ZmVmYlwwMTIiICsKLSAgICAiXHVmZWZiXDAxM1x1ZmVmYlwwMTRcdWZlZmJcMDE1XHVmZWZiXDAxNlx1ZmVmYlwwMTdcdWZlZmJcMDIwXHVmZWZiIiArCi0gICAgIlwwMjFcdWZlZmJcMDIyXHVmZWZiXDAyM1x1ZmVmYlwwMjRcdWZlZmJcMDI1XHVmZWZiXDAzMVx1ZmYyY1wwMzIiICsKLSAgICAiXHVmZWZiXDAzNVx1ZmVmYlwwNTNcdWZlZmJcMDU0XHVmZWZiXDA1NVx1ZmVmYlwwNTZcdWZlZmJcMDU3XHVmZWZiIiArCi0gICAgIlwwNjBcdWZlZmJcMDYxXHVmZWZiXDA2Mlx1ZmVmYlwwNjNcdWZlZmJcMDY0XHVmZWZiXDA2NVx1ZmVmYlwwNjYiICsKLSAgICAiXHVmZWZiXDA2N1x1ZmVmYlwwNzFcdWZlZmJcMDczXHVmZWZiXDA3NFx1ZmVmYlwwNzVcdWZlZmJcMDc3XHVmZWZiIiArCi0gICAgIlwxMDBcdWZlZmJcMTAxXHVmZWZiXDEwMlx1ZmVmYlwxMDdcdWZlZmJcMTEwXHVmZWZiXDExMVx1ZmVmYlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMDI0XDAwMlx1ZmZlZVwwMDVcdWZmZWVcMDA3XHVmZmVlXDAzMlx1ZmZlZVwxMDBcdWZmZWUiICsKLSAgICAiXDEwMVx1ZmZlZVwxMDdcdWZmZWVcMTEwXHVmZmVlXDExMVx1ZmZlZVwwMDFcMDAyXDAwMFwxMzZcMDAyIiArCi0gICAgIlx1ZmYwMFwwMDRcdWZmMDBcMDA1XHVmZjAwXDAwNlx1ZmYwMFwwMDdcdWZmMDBcMDEwXHVmZjAwXDAxMVx1ZmYwMCIgKwotICAgICJcMDEyXHVmZjAwXDAxM1x1ZmYwMFwwMTRcdWZmMDBcMDE1XHVmZjAwXDAxNlx1ZmYwMFwwMTdcdWZmMDBcMDIwIiArCi0gICAgIlx1ZmYwMFwwMjFcdWZmMDBcMDIyXHVmZjAwXDAyM1x1ZmYwMFwwMjRcdWZmMDBcMDI1XHVmZjAwXDAzMVx1ZmYzMSIgKwotICAgICJcMDMyXHVmZjAwXDAzNVx1ZmYwMFwwNTNcdWZmMDBcMDU0XHVmZjAwXDA1NVx1ZmYwMFwwNTZcdWZmMDBcMDU3IiArCi0gICAgIlx1ZmYwMFwwNjBcdWZmMDBcMDYxXHVmZjAwXDA2Mlx1ZmYwMFwwNjNcdWZmMDBcMDY0XHVmZjAwXDA2NVx1ZmYwMCIgKwotICAgICJcMDY2XHVmZjAwXDA2N1x1ZmYwMFwwNzFcdWZmMDBcMDczXHVmZjAwXDA3NFx1ZmYwMFwwNzVcdWZmMDBcMDc3IiArCi0gICAgIlx1ZmYwMFwxMDBcdWZmMDBcMTAxXHVmZjAwXDEwMlx1ZmYwMFwxMDdcdWZmMDBcMTEwXHVmZjAwXDExMVx1ZmYwMCIgKwotICAgICJcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyYlwwMDRcdWZmMmJcMDA1XHVmZjJiXDAwNlx1ZmYyYlwwMDciICsKLSAgICAiXHVmZjJiXDAxMFx1ZmYyYlwwMTFcdWZmMmJcMDEyXHVmZjJiXDAxM1x1ZmYyYlwwMTRcdWZmMmJcMDE1XHVmZjJiIiArCi0gICAgIlwwMTZcdWZmMmJcMDE3XHVmZjJiXDAyMFx1ZmYyYlwwMjFcdWZmMmJcMDIyXHVmZjJiXDAyM1x1ZmYyYlwwMjQiICsKLSAgICAiXHVmZjJiXDAyNVx1ZmYyYlwwMzFcdWZmMmJcMDMyXHVmZjJiXDAzNVx1ZmYyYlwwNTNcdWZmMmJcMDU0XHVmZjJiIiArCi0gICAgIlwwNTVcdWZmMmJcMDU2XHVmZjJiXDA1N1x1ZmYyYlwwNjBcdWZmMmJcMDYxXHVmZjJiXDA2Mlx1ZmYyYlwwNjMiICsKLSAgICAiXHVmZjJiXDA2NFx1ZmYyYlwwNjVcdWZmMmJcMDY2XHVmZjJiXDA2N1x1ZmYyYlwwNzFcdWZmMmJcMDczXHVmZjJiIiArCi0gICAgIlwwNzRcdWZmMmJcMDc1XHVmZjJiXDA3N1x1ZmYyYlwxMDBcdWZmMmJcMTAxXHVmZjJiXDEwMlx1ZmYyYlwxMDciICsKLSAgICAiXHVmZjJiXDExMFx1ZmYyYlwxMTFcdWZmMmJcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmVmY1wwMDRcdWZlZmMiICsKLSAgICAiXDAwNVx1ZmVmY1wwMDZcdWZlZmNcMDA3XHVmZWZjXDAxMFx1ZmVmY1wwMTFcdWZlZmNcMDEyXHVmZWZjXDAxMyIgKwotICAgICJcdWZlZmNcMDE0XHVmZWZjXDAxNVx1ZmVmY1wwMTZcdWZlZmNcMDE3XHVmZWZjXDAyMFx1ZmVmY1wwMjFcdWZlZmMiICsKLSAgICAiXDAyMlx1ZmVmY1wwMjNcdWZlZmNcMDI0XHVmZWZjXDAyNVx1ZmVmY1wwMzFcdWZmMmRcMDMyXHVmZWZjXDAzNSIgKwotICAgICJcdWZlZmNcMDUzXHVmZWZjXDA1NFx1ZmVmY1wwNTVcdWZlZmNcMDU2XHVmZWZjXDA1N1x1ZmVmY1wwNjBcdWZlZmMiICsKLSAgICAiXDA2MVx1ZmVmY1wwNjJcdWZlZmNcMDYzXHVmZWZjXDA2NFx1ZmVmY1wwNjVcdWZlZmNcMDY2XHVmZWZjXDA2NyIgKwotICAgICJcdWZlZmNcMDcxXHVmZWZjXDA3M1x1ZmVmY1wwNzRcdWZlZmNcMDc1XHVmZWZjXDA3N1x1ZmVmY1wxMDBcdWZlZmMiICsKLSAgICAiXDEwMVx1ZmVmY1wxMDJcdWZlZmNcMTA3XHVmZWZjXDExMFx1ZmVmY1wxMTFcdWZlZmNcMDAxXDAwMlwwMDAiICsKLSAgICAiXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNiIgKwotICAgICJcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwIiArCi0gICAgIlwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTIiICsKLSAgICAiXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2MyIgKwotICAgICJcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzIiArCi0gICAgIlwwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDEiICsKLSAgICAiXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNCIgKwotICAgICJcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2IiArCi0gICAgIlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTMiICsKLSAgICAiXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMCIgKwotICAgICJcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2IiArCi0gICAgIlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDAiICsKLSAgICAiXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMiIgKwotICAgICJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzIiArCi0gICAgIlwwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjMiICsKLSAgICAiXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMSIgKwotICAgICJcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0IiArCi0gICAgIlwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTYiICsKLSAgICAiXDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1MyIgKwotICAgICJcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTBcMDAyXHVmZmRiXDAwNVx1ZmZkYlwwMDdcdWZmZGJcMDEwXHVmZmRiXDAxMVx1ZmZkYlwwMTJcdWZmZGIiICsKLSAgICAiXDAxM1x1ZmZkYlwwMTRcdWZmZGJcMDE1XHVmZmRiXDAxNlx1ZmZkYlwwMTdcdWZmZGJcMDIwXHVmZmRiXDAyMSIgKwotICAgICJcdWZmZGJcMDIyXHVmZmRiXDAyM1x1ZmZkYlwwMzJcdWZmZGJcMDUzXHVmZmRiXDA1NFx1ZmZkYlwwNTVcdWZmZGIiICsKLSAgICAiXDA1Nlx1ZmZkYlwwNTdcdWZmZGJcMDYwXHVmZmRiXDA2MVx1ZmZkYlwwNjJcdWZmZGJcMDYzXHVmZmRiXDA2NCIgKwotICAgICJcdWZmZGJcMDY1XHVmZmRiXDA2Nlx1ZmZkYlwwNzVcdWZmZGJcMTAwXHVmZmRiXDEwMVx1ZmZkYlwxMDJcdWZmZGIiICsKLSAgICAiXDEwN1x1ZmZkYlwxMTBcdWZmZGJcMTExXHVmZmRiXDAwMVwwMDJcMDAwXDExMFwwMDJcdWZmZGFcMDA1IiArCi0gICAgIlx1ZmZkYVwwMDdcdWZmZGFcMDEwXHVmZmRhXDAxMVx1ZmZkYVwwMTJcdWZmZGFcMDEzXHVmZmRhXDAxNFx1ZmZkYSIgKwotICAgICJcMDE1XHVmZmRhXDAxNlx1ZmZkYVwwMTdcdWZmZGFcMDIwXHVmZmRhXDAyMVx1ZmZkYVwwMjJcdWZmZGFcMDIzIiArCi0gICAgIlx1ZmZkYVwwMzJcdWZmZGFcMDUzXHVmZmRhXDA1NFx1ZmZkYVwwNTVcdWZmZGFcMDU2XHVmZmRhXDA1N1x1ZmZkYSIgKwotICAgICJcMDYwXHVmZmRhXDA2MVx1ZmZkYVwwNjJcdWZmZGFcMDYzXHVmZmRhXDA2NFx1ZmZkYVwwNjVcdWZmZGFcMDY2IiArCi0gICAgIlx1ZmZkYVwwNzVcdWZmZGFcMTAwXHVmZmRhXDEwMVx1ZmZkYVwxMDJcdWZmZGFcMTA3XHVmZmRhXDExMFx1ZmZkYSIgKwotICAgICJcMTExXHVmZmRhXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOTlcMDA0XDIxNFwwMDVcdWZmOTlcMDA3IiArCi0gICAgIlx1ZmY5OVwwMTBcdWZmOTlcMDExXHVmZjk5XDAxMlx1ZmY5OVwwMTNcdWZmOTlcMDE0XHVmZjk5XDAxNVx1ZmY5OSIgKwotICAgICJcMDE2XHVmZjk5XDAxN1x1ZmY5OVwwMjBcdWZmOTlcMDIxXHVmZjk5XDAyMlx1ZmY5OVwwMjNcdWZmOTlcMDI0IiArCi0gICAgIlx1ZmY5OVwwMjVcdWZmOTlcMDMyXHVmZjk5XDA1M1x1ZmY5OVwwNTRcdWZmOTlcMDU1XHVmZjk5XDA1Nlx1ZmY5OSIgKwotICAgICJcMDU3XHVmZjk5XDA2MFx1ZmY5OVwwNjFcdWZmOTlcMDYyXHVmZjk5XDA2M1x1ZmY5OVwwNjRcdWZmOTlcMDY1IiArCi0gICAgIlx1ZmY5OVwwNjZcdWZmOTlcMDY3XHVmZjk5XDA3MVx1ZmY5OVwwNzNcdWZmOTlcMDc0XHVmZjk5XDA3NVx1ZmY5OSIgKwotICAgICJcMTAwXHVmZjk5XDEwMVx1ZmY5OVwxMDJcdWZmOTlcMTA3XHVmZjk5XDExMFx1ZmY5OVwxMTFcdWZmOTlcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEyNlwwMDJcdWZmOThcMDA0XHVmZjk4XDAwNVx1ZmY5OFwwMDdcdWZmOThcMDEwXHVmZjk4IiArCi0gICAgIlwwMTFcdWZmOThcMDEyXHVmZjk4XDAxM1x1ZmY5OFwwMTRcdWZmOThcMDE1XHVmZjk4XDAxNlx1ZmY5OFwwMTciICsKLSAgICAiXHVmZjk4XDAyMFx1ZmY5OFwwMjFcdWZmOThcMDIyXHVmZjk4XDAyM1x1ZmY5OFwwMjRcdWZmOThcMDI1XHVmZjk4IiArCi0gICAgIlwwMzJcdWZmOThcMDUzXHVmZjk4XDA1NFx1ZmY5OFwwNTVcdWZmOThcMDU2XHVmZjk4XDA1N1x1ZmY5OFwwNjAiICsKLSAgICAiXHVmZjk4XDA2MVx1ZmY5OFwwNjJcdWZmOThcMDYzXHVmZjk4XDA2NFx1ZmY5OFwwNjVcdWZmOThcMDY2XHVmZjk4IiArCi0gICAgIlwwNjdcdWZmOThcMDcxXHVmZjk4XDA3M1x1ZmY5OFwwNzRcdWZmOThcMDc1XHVmZjk4XDEwMFx1ZmY5OFwxMDEiICsKLSAgICAiXHVmZjk4XDEwMlx1ZmY5OFwxMDdcdWZmOThcMTEwXHVmZjk4XDExMVx1ZmY5OFwwMDFcMDAyXDAwMFwyMDAiICsKLSAgICAiXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyNyIgKwotICAgICJcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1IiArCi0gICAgIlwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDciICsKLSAgICAiXDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2NyIgKwotICAgICJcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczIiArCi0gICAgIlwxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwxMDZcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzEiICsKLSAgICAiXDEwMlwxNzVcMTAzXDE1N1wxMDRcMDQ2XDEwNVwxNDdcMTA2XDA1MlwxMDdcMTE0XDExMCIgKwotICAgICJcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3IiArCi0gICAgIlwxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjUiICsKLSAgICAiXDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAwNiIgKwotICAgICJcMDA1XDIxN1wwMzJcMjE2XDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExIiArCi0gICAgIlwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzEiICsKLSAgICAiXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0MyIgKwotICAgICJcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2IiArCi0gICAgIlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjYiICsKLSAgICAiXDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNSIgKwotICAgICJcMDc2XDEwNlwwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wxNTdcMTA0IiArCi0gICAgIlwwNDZcMTA1XDE0N1wxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzIiICsKLSAgICAiXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMSIgKwotICAgICJcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0IiArCi0gICAgIlwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5NlwwMDRcdWZmOTZcMDA1IiArCi0gICAgIlx1ZmY5NlwwMDdcdWZmOTZcMDEwXHVmZjk2XDAxMVx1ZmY5NlwwMTJcdWZmOTZcMDEzXHVmZjk2XDAxNFx1ZmY5NiIgKwotICAgICJcMDE1XHVmZjk2XDAxNlx1ZmY5NlwwMTdcdWZmOTZcMDIwXHVmZjk2XDAyMVx1ZmY5NlwwMjJcdWZmOTZcMDIzIiArCi0gICAgIlx1ZmY5NlwwMjRcdWZmOTZcMDI1XHVmZjk2XDAzMlx1ZmY5NlwwNTNcdWZmOTZcMDU0XHVmZjk2XDA1NVx1ZmY5NiIgKwotICAgICJcMDU2XHVmZjk2XDA1N1x1ZmY5NlwwNjBcdWZmOTZcMDYxXHVmZjk2XDA2Mlx1ZmY5NlwwNjNcdWZmOTZcMDY0IiArCi0gICAgIlx1ZmY5NlwwNjVcdWZmOTZcMDY2XHVmZjk2XDA2N1x1ZmY5NlwwNzFcdWZmOTZcMDczXHVmZjk2XDA3NFx1ZmY5NiIgKwotICAgICJcMDc1XHVmZjk2XDEwMFx1ZmY5NlwxMDFcdWZmOTZcMTAyXHVmZjk2XDEwN1x1ZmY5NlwxMTBcdWZmOTZcMTExIiArCi0gICAgIlx1ZmY5NlwwMDFcMDAyXDAwMFwwMTJcMDAyXHVmZmZlXDAwNVx1ZmZmZVwwMDdcdWZmZmVcMDMyXHVmZmZlIiArCi0gICAgIlwwMDFcMDAyXDAwMFwwMDRcMDMzXDIyNFwwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTAiICsKLSAgICAiXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExNyIgKwotICAgICJcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyIiArCi0gICAgIlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTAiICsKLSAgICAiXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NSIgKwotICAgICJcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0IiArCi0gICAgIlwwNzVcMTM1XDA3NlwxMDZcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDMiICsKLSAgICAiXDE1N1wxMDRcMDQ2XDEwNVwxNDdcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0MyIgKwotICAgICJcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwIiArCi0gICAgIlwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzUiICsKLSAgICAiXDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAyMFwwMDJcdWZmZjlcMDA1IiArCi0gICAgIlx1ZmZmOVwwMDdcdWZmZjlcMDMyXHVmZmY5XDEwMFx1ZmZmOVwxMDFcdWZmZjlcMTA3XHVmZmY5XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxNDZcMDEyXDIzM1wwMzZcMjMyXDAzN1wyNDBcMDQwXDI1MlwwNDFcMjQxXDA0MiIgKwotICAgICJcMjM3XDA0M1wyMzZcMDQ0XDI1MFwwNDVcMjI2XDA0NlwyNDZcMDQ3XDI0NFwwNTBcMjI1IiArCi0gICAgIlwwNTFcMjQyXDA1MlwyNDNcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjUiICsKLSAgICAiXDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NCIgKwotICAgICJcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzIiArCi0gICAgIlwyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDMiICsKLSAgICAiXDExMlwxMzJcMTEzXDEyNlwxMTRcMjUzXDExNVwyNDdcMTE2XDI1MVwxMTdcMjI3XDEyMCIgKwotICAgICJcMjM0XDEyMVwyMzBcMTIyXDI0NVwxMjNcMjM1XDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM0XDAwMlx1ZmYwY1wwMDRcdWZmMGNcMDA1XHVmZjBjXDAwN1x1ZmYwY1wwMTBcdWZmMGNcMDExIiArCi0gICAgIlx1ZmYwY1wwMTJcdWZmMGNcMDEzXHVmZjBjXDAxNFx1ZmYwY1wwMTVcdWZmMGNcMDE2XHVmZjBjXDAxN1x1ZmYwYyIgKwotICAgICJcMDIwXHVmZjBjXDAyMVx1ZmYwY1wwMjJcdWZmMGNcMDIzXHVmZjBjXDAyNFx1ZmYwY1wwMjVcdWZmMGNcMDMxIiArCi0gICAgIlx1ZmYzZFwwMzJcdWZmMGNcMDM1XHVmZjBjXDA1M1x1ZmYwY1wwNTRcdWZmMGNcMDU1XHVmZjBjXDA1Nlx1ZmYwYyIgKwotICAgICJcMDU3XHVmZjBjXDA2MFx1ZmYwY1wwNjFcdWZmMGNcMDYyXHVmZjBjXDA2M1x1ZmYwY1wwNjRcdWZmMGNcMDY1IiArCi0gICAgIlx1ZmYwY1wwNjZcdWZmMGNcMDY3XHVmZjBjXDA3MVx1ZmYwY1wwNzNcdWZmMGNcMDc0XHVmZjBjXDA3NVx1ZmYwYyIgKwotICAgICJcMDc3XHVmZjBjXDEwMFx1ZmYwY1wxMDFcdWZmMGNcMTAyXHVmZjBjXDEwN1x1ZmYwY1wxMTBcdWZmMGNcMTExIiArCi0gICAgIlx1ZmYwY1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjBmXDAwNFx1ZmYwZlwwMDVcdWZmMGZcMDA3XHVmZjBmIiArCi0gICAgIlwwMTBcdWZmMGZcMDExXHVmZjBmXDAxMlx1ZmYwZlwwMTNcdWZmMGZcMDE0XHVmZjBmXDAxNVx1ZmYwZlwwMTYiICsKLSAgICAiXHVmZjBmXDAxN1x1ZmYwZlwwMjBcdWZmMGZcMDIxXHVmZjBmXDAyMlx1ZmYwZlwwMjNcdWZmMGZcMDI0XHVmZjBmIiArCi0gICAgIlwwMjVcdWZmMGZcMDMxXHVmZjQwXDAzMlx1ZmYwZlwwMzVcdWZmMGZcMDUzXHVmZjBmXDA1NFx1ZmYwZlwwNTUiICsKLSAgICAiXHVmZjBmXDA1Nlx1ZmYwZlwwNTdcdWZmMGZcMDYwXHVmZjBmXDA2MVx1ZmYwZlwwNjJcdWZmMGZcMDYzXHVmZjBmIiArCi0gICAgIlwwNjRcdWZmMGZcMDY1XHVmZjBmXDA2Nlx1ZmYwZlwwNjdcdWZmMGZcMDcxXHVmZjBmXDA3M1x1ZmYwZlwwNzQiICsKLSAgICAiXHVmZjBmXDA3NVx1ZmYwZlwwNzdcdWZmMGZcMTAwXHVmZjBmXDEwMVx1ZmYwZlwxMDJcdWZmMGZcMTA3XHVmZjBmIiArCi0gICAgIlwxMTBcdWZmMGZcMTExXHVmZjBmXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMjRcMDA0XHVmZjI0XDAwNSIgKwotICAgICJcdWZmMjRcMDA2XHVmZjI0XDAwN1x1ZmYyNFwwMTBcdWZmMjRcMDExXHVmZjI0XDAxMlx1ZmYyNFwwMTNcdWZmMjQiICsKLSAgICAiXDAxNFx1ZmYyNFwwMTVcdWZmMjRcMDE2XHVmZjI0XDAxN1x1ZmYyNFwwMjBcdWZmMjRcMDIxXHVmZjI0XDAyMiIgKwotICAgICJcdWZmMjRcMDIzXHVmZjI0XDAyNFx1ZmYyNFwwMjVcdWZmMjRcMDMxXHVmZjI0XDAzMlx1ZmYyNFwwMzVcdWZmMjQiICsKLSAgICAiXDA1M1x1ZmYyNFwwNTRcdWZmMjRcMDU1XHVmZjI0XDA1Nlx1ZmYyNFwwNTdcdWZmMjRcMDYwXHVmZjI0XDA2MSIgKwotICAgICJcdWZmMjRcMDYyXHVmZjI0XDA2M1x1ZmYyNFwwNjRcdWZmMjRcMDY1XHVmZjI0XDA2Nlx1ZmYyNFwwNjdcdWZmMjQiICsKLSAgICAiXDA3MVx1ZmYyNFwwNzNcdWZmMjRcMDc0XHVmZjI0XDA3NVx1ZmYyNFwwNzdcdWZmMjRcMTAwXHVmZjI0XDEwMSIgKwotICAgICJcdWZmMjRcMTAyXHVmZjI0XDEwN1x1ZmYyNFwxMTBcdWZmMjRcMTExXHVmZjI0XDAwMVwwMDJcMDAwXDEzNiIgKwotICAgICJcMDAyXHVmZjFkXDAwNFx1ZmYxZFwwMDVcdWZmMWRcMDA2XHVmZjFkXDAwN1x1ZmYxZFwwMTBcdWZmMWRcMDExIiArCi0gICAgIlx1ZmYxZFwwMTJcdWZmMWRcMDEzXHVmZjFkXDAxNFx1ZmYxZFwwMTVcdWZmMWRcMDE2XHVmZjFkXDAxN1x1ZmYxZCIgKwotICAgICJcMDIwXHVmZjFkXDAyMVx1ZmYxZFwwMjJcdWZmMWRcMDIzXHVmZjFkXDAyNFx1ZmYxZFwwMjVcdWZmMWRcMDMxIiArCi0gICAgIlx1ZmYxZFwwMzJcdWZmMWRcMDM1XHVmZjFkXDA1M1x1ZmYxZFwwNTRcdWZmMWRcMDU1XHVmZjFkXDA1Nlx1ZmYxZCIgKwotICAgICJcMDU3XHVmZjFkXDA2MFx1ZmYxZFwwNjFcdWZmMWRcMDYyXHVmZjFkXDA2M1x1ZmYxZFwwNjRcdWZmMWRcMDY1IiArCi0gICAgIlx1ZmYxZFwwNjZcdWZmMWRcMDY3XHVmZjFkXDA3MVx1ZmYxZFwwNzNcdWZmMWRcMDc0XHVmZjFkXDA3NVx1ZmYxZCIgKwotICAgICJcMDc3XHVmZjFkXDEwMFx1ZmYxZFwxMDFcdWZmMWRcMTAyXHVmZjFkXDEwN1x1ZmYxZFwxMTBcdWZmMWRcMTExIiArCi0gICAgIlx1ZmYxZFwwMDFcMDAyXDAwMFwwMDRcMDc3XDI1NVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjE1IiArCi0gICAgIlwwMDRcdWZmMTVcMDA1XHVmZjE1XDAwN1x1ZmYxNVwwMTBcdWZmMTVcMDExXHVmZjE1XDAxMlx1ZmYxNVwwMTMiICsKLSAgICAiXHVmZjE1XDAxNFx1ZmYxNVwwMTVcdWZmMTVcMDE2XHVmZjE1XDAxN1x1ZmYxNVwwMjBcdWZmMTVcMDIxXHVmZjE1IiArCi0gICAgIlwwMjJcdWZmMTVcMDIzXHVmZjE1XDAyNFx1ZmYxNVwwMjVcdWZmMTVcMDMxXHVmZjQ3XDAzMlx1ZmYxNVwwMzUiICsKLSAgICAiXHVmZjE1XDA1M1x1ZmYxNVwwNTRcdWZmMTVcMDU1XHVmZjE1XDA1Nlx1ZmYxNVwwNTdcdWZmMTVcMDYwXHVmZjE1IiArCi0gICAgIlwwNjFcdWZmMTVcMDYyXHVmZjE1XDA2M1x1ZmYxNVwwNjRcdWZmMTVcMDY1XHVmZjE1XDA2Nlx1ZmYxNVwwNjciICsKLSAgICAiXHVmZjE1XDA3MVx1ZmYxNVwwNzNcdWZmMTVcMDc0XHVmZjE1XDA3NVx1ZmYxNVwwNzdcdWZmMTVcMTAwXHVmZjE1IiArCi0gICAgIlwxMDFcdWZmMTVcMTAyXHVmZjE1XDEwN1x1ZmYxNVwxMTBcdWZmMTVcMTExXHVmZjE1XDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzZcMDAyXHVmZjE4XDAwNFx1ZmYxOFwwMDVcdWZmMThcMDA2XHVmZjE4XDAwN1x1ZmYxOFwwMTBcdWZmMTgiICsKLSAgICAiXDAxMVx1ZmYxOFwwMTJcdWZmMThcMDEzXHVmZjE4XDAxNFx1ZmYxOFwwMTVcdWZmMThcMDE2XHVmZjE4XDAxNyIgKwotICAgICJcdWZmMThcMDIwXHVmZjE4XDAyMVx1ZmYxOFwwMjJcdWZmMThcMDIzXHVmZjE4XDAyNFx1ZmYxOFwwMjVcdWZmMTgiICsKLSAgICAiXDAzMVx1ZmYxOFwwMzJcdWZmMThcMDM1XHVmZjE4XDA1M1x1ZmYxOFwwNTRcdWZmMThcMDU1XHVmZjE4XDA1NiIgKwotICAgICJcdWZmMThcMDU3XHVmZjE4XDA2MFx1ZmYxOFwwNjFcdWZmMThcMDYyXHVmZjE4XDA2M1x1ZmYxOFwwNjRcdWZmMTgiICsKLSAgICAiXDA2NVx1ZmYxOFwwNjZcdWZmMThcMDY3XHVmZjE4XDA3MVx1ZmYxOFwwNzNcdWZmMThcMDc0XHVmZjE4XDA3NSIgKwotICAgICJcdWZmMThcMDc3XHVmZjE4XDEwMFx1ZmYxOFwxMDFcdWZmMThcMTAyXHVmZjE4XDEwN1x1ZmYxOFwxMTBcdWZmMTgiICsKLSAgICAiXDExMVx1ZmYxOFwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjFlXDAwNFx1ZmYxZVwwMDVcdWZmMWVcMDA2IiArCi0gICAgIlx1ZmYxZVwwMDdcdWZmMWVcMDEwXHVmZjFlXDAxMVx1ZmYxZVwwMTJcdWZmMWVcMDEzXHVmZjFlXDAxNFx1ZmYxZSIgKwotICAgICJcMDE1XHVmZjFlXDAxNlx1ZmYxZVwwMTdcdWZmMWVcMDIwXHVmZjFlXDAyMVx1ZmYxZVwwMjJcdWZmMWVcMDIzIiArCi0gICAgIlx1ZmYxZVwwMjRcdWZmMWVcMDI1XHVmZjFlXDAzMVx1ZmYxZVwwMzJcdWZmMWVcMDM1XHVmZjFlXDA1M1x1ZmYxZSIgKwotICAgICJcMDU0XHVmZjFlXDA1NVx1ZmYxZVwwNTZcdWZmMWVcMDU3XHVmZjFlXDA2MFx1ZmYxZVwwNjFcdWZmMWVcMDYyIiArCi0gICAgIlx1ZmYxZVwwNjNcdWZmMWVcMDY0XHVmZjFlXDA2NVx1ZmYxZVwwNjZcdWZmMWVcMDY3XHVmZjFlXDA3MVx1ZmYxZSIgKwotICAgICJcMDczXHVmZjFlXDA3NFx1ZmYxZVwwNzVcdWZmMWVcMDc3XHVmZjFlXDEwMFx1ZmYxZVwxMDFcdWZmMWVcMTAyIiArCi0gICAgIlx1ZmYxZVwxMDdcdWZmMWVcMTEwXHVmZjFlXDExMVx1ZmYxZVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjFjIiArCi0gICAgIlwwMDRcdWZmMWNcMDA1XHVmZjFjXDAwNlx1ZmYxY1wwMDdcdWZmMWNcMDEwXHVmZjFjXDAxMVx1ZmYxY1wwMTIiICsKLSAgICAiXHVmZjFjXDAxM1x1ZmYxY1wwMTRcdWZmMWNcMDE1XHVmZjFjXDAxNlx1ZmYxY1wwMTdcdWZmMWNcMDIwXHVmZjFjIiArCi0gICAgIlwwMjFcdWZmMWNcMDIyXHVmZjFjXDAyM1x1ZmYxY1wwMjRcdWZmMWNcMDI1XHVmZjFjXDAzMVx1ZmYxY1wwMzIiICsKLSAgICAiXHVmZjFjXDAzNVx1ZmYxY1wwNTNcdWZmMWNcMDU0XHVmZjFjXDA1NVx1ZmYxY1wwNTZcdWZmMWNcMDU3XHVmZjFjIiArCi0gICAgIlwwNjBcdWZmMWNcMDYxXHVmZjFjXDA2Mlx1ZmYxY1wwNjNcdWZmMWNcMDY0XHVmZjFjXDA2NVx1ZmYxY1wwNjYiICsKLSAgICAiXHVmZjFjXDA2N1x1ZmYxY1wwNzFcdWZmMWNcMDczXHVmZjFjXDA3NFx1ZmYxY1wwNzVcdWZmMWNcMDc3XHVmZjFjIiArCi0gICAgIlwxMDBcdWZmMWNcMTAxXHVmZjFjXDEwMlx1ZmYxY1wxMDdcdWZmMWNcMTEwXHVmZjFjXDExMVx1ZmYxY1wwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM0XDAwMlx1ZmYxMVwwMDRcdWZmMTFcMDA1XHVmZjExXDAwN1x1ZmYxMVwwMTBcdWZmMTEiICsKLSAgICAiXDAxMVx1ZmYxMVwwMTJcdWZmMTFcMDEzXHVmZjExXDAxNFx1ZmYxMVwwMTVcdWZmMTFcMDE2XHVmZjExXDAxNyIgKwotICAgICJcdWZmMTFcMDIwXHVmZjExXDAyMVx1ZmYxMVwwMjJcdWZmMTFcMDIzXHVmZjExXDAyNFx1ZmYxMVwwMjVcdWZmMTEiICsKLSAgICAiXDAzMVx1ZmY0MlwwMzJcdWZmMTFcMDM1XHVmZjExXDA1M1x1ZmYxMVwwNTRcdWZmMTFcMDU1XHVmZjExXDA1NiIgKwotICAgICJcdWZmMTFcMDU3XHVmZjExXDA2MFx1ZmYxMVwwNjFcdWZmMTFcMDYyXHVmZjExXDA2M1x1ZmYxMVwwNjRcdWZmMTEiICsKLSAgICAiXDA2NVx1ZmYxMVwwNjZcdWZmMTFcMDY3XHVmZjExXDA3MVx1ZmYxMVwwNzNcdWZmMTFcMDc0XHVmZjExXDA3NSIgKwotICAgICJcdWZmMTFcMDc3XHVmZjExXDEwMFx1ZmYxMVwxMDFcdWZmMTFcMTAyXHVmZjExXDEwN1x1ZmYxMVwxMTBcdWZmMTEiICsKLSAgICAiXDExMVx1ZmYxMVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjEyXDAwNFx1ZmYxMlwwMDVcdWZmMTJcMDA3IiArCi0gICAgIlx1ZmYxMlwwMTBcdWZmMTJcMDExXHVmZjEyXDAxMlx1ZmYxMlwwMTNcdWZmMTJcMDE0XHVmZjEyXDAxNVx1ZmYxMiIgKwotICAgICJcMDE2XHVmZjEyXDAxN1x1ZmYxMlwwMjBcdWZmMTJcMDIxXHVmZjEyXDAyMlx1ZmYxMlwwMjNcdWZmMTJcMDI0IiArCi0gICAgIlx1ZmYxMlwwMjVcdWZmMTJcMDMxXHVmZjQzXDAzMlx1ZmYxMlwwMzVcdWZmMTJcMDUzXHVmZjEyXDA1NFx1ZmYxMiIgKwotICAgICJcMDU1XHVmZjEyXDA1Nlx1ZmYxMlwwNTdcdWZmMTJcMDYwXHVmZjEyXDA2MVx1ZmYxMlwwNjJcdWZmMTJcMDYzIiArCi0gICAgIlx1ZmYxMlwwNjRcdWZmMTJcMDY1XHVmZjEyXDA2Nlx1ZmYxMlwwNjdcdWZmMTJcMDcxXHVmZjEyXDA3M1x1ZmYxMiIgKwotICAgICJcMDc0XHVmZjEyXDA3NVx1ZmYxMlwwNzdcdWZmMTJcMTAwXHVmZjEyXDEwMVx1ZmYxMlwxMDJcdWZmMTJcMTA3IiArCi0gICAgIlx1ZmYxMlwxMTBcdWZmMTJcMTExXHVmZjEyXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMTRcMDA0XHVmZjE0IiArCi0gICAgIlwwMDVcdWZmMTRcMDA3XHVmZjE0XDAxMFx1ZmYxNFwwMTFcdWZmMTRcMDEyXHVmZjE0XDAxM1x1ZmYxNFwwMTQiICsKLSAgICAiXHVmZjE0XDAxNVx1ZmYxNFwwMTZcdWZmMTRcMDE3XHVmZjE0XDAyMFx1ZmYxNFwwMjFcdWZmMTRcMDIyXHVmZjE0IiArCi0gICAgIlwwMjNcdWZmMTRcMDI0XHVmZjE0XDAyNVx1ZmYxNFwwMzFcdWZmNDZcMDMyXHVmZjE0XDAzNVx1ZmYxNFwwNTMiICsKLSAgICAiXHVmZjE0XDA1NFx1ZmYxNFwwNTVcdWZmMTRcMDU2XHVmZjE0XDA1N1x1ZmYxNFwwNjBcdWZmMTRcMDYxXHVmZjE0IiArCi0gICAgIlwwNjJcdWZmMTRcMDYzXHVmZjE0XDA2NFx1ZmYxNFwwNjVcdWZmMTRcMDY2XHVmZjE0XDA2N1x1ZmYxNFwwNzEiICsKLSAgICAiXHVmZjE0XDA3M1x1ZmYxNFwwNzRcdWZmMTRcMDc1XHVmZjE0XDA3N1x1ZmYxNFwxMDBcdWZmMTRcMTAxXHVmZjE0IiArCi0gICAgIlwxMDJcdWZmMTRcMTA3XHVmZjE0XDExMFx1ZmYxNFwxMTFcdWZmMTRcMDAxXDAwMlwwMDBcMTM0XDAwMiIgKwotICAgICJcdWZmMTNcMDA0XHVmZjEzXDAwNVx1ZmYxM1wwMDdcdWZmMTNcMDEwXHVmZjEzXDAxMVx1ZmYxM1wwMTJcdWZmMTMiICsKLSAgICAiXDAxM1x1ZmYxM1wwMTRcdWZmMTNcMDE1XHVmZjEzXDAxNlx1ZmYxM1wwMTdcdWZmMTNcMDIwXHVmZjEzXDAyMSIgKwotICAgICJcdWZmMTNcMDIyXHVmZjEzXDAyM1x1ZmYxM1wwMjRcdWZmMTNcMDI1XHVmZjEzXDAzMVx1ZmY0NFwwMzJcdWZmMTMiICsKLSAgICAiXDAzNVx1ZmYxM1wwNTNcdWZmMTNcMDU0XHVmZjEzXDA1NVx1ZmYxM1wwNTZcdWZmMTNcMDU3XHVmZjEzXDA2MCIgKwotICAgICJcdWZmMTNcMDYxXHVmZjEzXDA2Mlx1ZmYxM1wwNjNcdWZmMTNcMDY0XHVmZjEzXDA2NVx1ZmYxM1wwNjZcdWZmMTMiICsKLSAgICAiXDA2N1x1ZmYxM1wwNzFcdWZmMTNcMDczXHVmZjEzXDA3NFx1ZmYxM1wwNzVcdWZmMTNcMDc3XHVmZjEzXDEwMCIgKwotICAgICJcdWZmMTNcMTAxXHVmZjEzXDEwMlx1ZmYxM1wxMDdcdWZmMTNcMTEwXHVmZjEzXDExMVx1ZmYxM1wwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM0XDAwMlx1ZmYwYlwwMDRcdWZmMGJcMDA1XHVmZjBiXDAwN1x1ZmYwYlwwMTBcdWZmMGJcMDExIiArCi0gICAgIlx1ZmYwYlwwMTJcdWZmMGJcMDEzXHVmZjBiXDAxNFx1ZmYwYlwwMTVcdWZmMGJcMDE2XHVmZjBiXDAxN1x1ZmYwYiIgKwotICAgICJcMDIwXHVmZjBiXDAyMVx1ZmYwYlwwMjJcdWZmMGJcMDIzXHVmZjBiXDAyNFx1ZmYwYlwwMjVcdWZmMGJcMDMxIiArCi0gICAgIlx1ZmYzY1wwMzJcdWZmMGJcMDM1XHVmZjBiXDA1M1x1ZmYwYlwwNTRcdWZmMGJcMDU1XHVmZjBiXDA1Nlx1ZmYwYiIgKwotICAgICJcMDU3XHVmZjBiXDA2MFx1ZmYwYlwwNjFcdWZmMGJcMDYyXHVmZjBiXDA2M1x1ZmYwYlwwNjRcdWZmMGJcMDY1IiArCi0gICAgIlx1ZmYwYlwwNjZcdWZmMGJcMDY3XHVmZjBiXDA3MVx1ZmYwYlwwNzNcdWZmMGJcMDc0XHVmZjBiXDA3NVx1ZmYwYiIgKwotICAgICJcMDc3XHVmZjBiXDEwMFx1ZmYwYlwxMDFcdWZmMGJcMTAyXHVmZjBiXDEwN1x1ZmYwYlwxMTBcdWZmMGJcMTExIiArCi0gICAgIlx1ZmYwYlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjBhXDAwNFx1ZmYwYVwwMDVcdWZmMGFcMDA3XHVmZjBhIiArCi0gICAgIlwwMTBcdWZmMGFcMDExXHVmZjBhXDAxMlx1ZmYwYVwwMTNcdWZmMGFcMDE0XHVmZjBhXDAxNVx1ZmYwYVwwMTYiICsKLSAgICAiXHVmZjBhXDAxN1x1ZmYwYVwwMjBcdWZmMGFcMDIxXHVmZjBhXDAyMlx1ZmYwYVwwMjNcdWZmMGFcMDI0XHVmZjBhIiArCi0gICAgIlwwMjVcdWZmMGFcMDMxXHVmZjNiXDAzMlx1ZmYwYVwwMzVcdWZmMGFcMDUzXHVmZjBhXDA1NFx1ZmYwYVwwNTUiICsKLSAgICAiXHVmZjBhXDA1Nlx1ZmYwYVwwNTdcdWZmMGFcMDYwXHVmZjBhXDA2MVx1ZmYwYVwwNjJcdWZmMGFcMDYzXHVmZjBhIiArCi0gICAgIlwwNjRcdWZmMGFcMDY1XHVmZjBhXDA2Nlx1ZmYwYVwwNjdcdWZmMGFcMDcxXHVmZjBhXDA3M1x1ZmYwYVwwNzQiICsKLSAgICAiXHVmZjBhXDA3NVx1ZmYwYVwwNzdcdWZmMGFcMTAwXHVmZjBhXDEwMVx1ZmYwYVwxMDJcdWZmMGFcMTA3XHVmZjBhIiArCi0gICAgIlwxMTBcdWZmMGFcMTExXHVmZjBhXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMGRcMDA0XHVmZjBkXDAwNSIgKwotICAgICJcdWZmMGRcMDA3XHVmZjBkXDAxMFx1ZmYwZFwwMTFcdWZmMGRcMDEyXHVmZjBkXDAxM1x1ZmYwZFwwMTRcdWZmMGQiICsKLSAgICAiXDAxNVx1ZmYwZFwwMTZcdWZmMGRcMDE3XHVmZjBkXDAyMFx1ZmYwZFwwMjFcdWZmMGRcMDIyXHVmZjBkXDAyMyIgKwotICAgICJcdWZmMGRcMDI0XHVmZjBkXDAyNVx1ZmYwZFwwMzFcdWZmM2VcMDMyXHVmZjBkXDAzNVx1ZmYwZFwwNTNcdWZmMGQiICsKLSAgICAiXDA1NFx1ZmYwZFwwNTVcdWZmMGRcMDU2XHVmZjBkXDA1N1x1ZmYwZFwwNjBcdWZmMGRcMDYxXHVmZjBkXDA2MiIgKwotICAgICJcdWZmMGRcMDYzXHVmZjBkXDA2NFx1ZmYwZFwwNjVcdWZmMGRcMDY2XHVmZjBkXDA2N1x1ZmYwZFwwNzFcdWZmMGQiICsKLSAgICAiXDA3M1x1ZmYwZFwwNzRcdWZmMGRcMDc1XHVmZjBkXDA3N1x1ZmYwZFwxMDBcdWZmMGRcMTAxXHVmZjBkXDEwMiIgKwotICAgICJcdWZmMGRcMTA3XHVmZjBkXDExMFx1ZmYwZFwxMTFcdWZmMGRcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyMiIgKwotICAgICJcMDA0XHVmZjIyXDAwNVx1ZmYyMlwwMDZcdWZmMjJcMDA3XHVmZjIyXDAxMFx1ZmYyMlwwMTFcdWZmMjJcMDEyIiArCi0gICAgIlx1ZmYyMlwwMTNcdWZmMjJcMDE0XHVmZjIyXDAxNVx1ZmYyMlwwMTZcdWZmMjJcMDE3XHVmZjIyXDAyMFx1ZmYyMiIgKwotICAgICJcMDIxXHVmZjIyXDAyMlx1ZmYyMlwwMjNcdWZmMjJcMDI0XHVmZjIyXDAyNVx1ZmYyMlwwMzFcdWZmMjJcMDMyIiArCi0gICAgIlx1ZmYyMlwwMzVcdWZmMjJcMDUzXHVmZjIyXDA1NFx1ZmYyMlwwNTVcdWZmMjJcMDU2XHVmZjIyXDA1N1x1ZmYyMiIgKwotICAgICJcMDYwXHVmZjIyXDA2MVx1ZmYyMlwwNjJcdWZmMjJcMDYzXHVmZjIyXDA2NFx1ZmYyMlwwNjVcdWZmMjJcMDY2IiArCi0gICAgIlx1ZmYyMlwwNjdcdWZmMjJcMDcxXHVmZjIyXDA3M1x1ZmYyMlwwNzRcdWZmMjJcMDc1XHVmZjIyXDA3N1x1ZmYyMiIgKwotICAgICJcMTAwXHVmZjIyXDEwMVx1ZmYyMlwxMDJcdWZmMjJcMTA3XHVmZjIyXDExMFx1ZmYyMlwxMTFcdWZmMjJcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNFwwMDJcdWZmMGVcMDA0XHVmZjBlXDAwNVx1ZmYwZVwwMDdcdWZmMGVcMDEwXHVmZjBlIiArCi0gICAgIlwwMTFcdWZmMGVcMDEyXHVmZjBlXDAxM1x1ZmYwZVwwMTRcdWZmMGVcMDE1XHVmZjBlXDAxNlx1ZmYwZVwwMTciICsKLSAgICAiXHVmZjBlXDAyMFx1ZmYwZVwwMjFcdWZmMGVcMDIyXHVmZjBlXDAyM1x1ZmYwZVwwMjRcdWZmMGVcMDI1XHVmZjBlIiArCi0gICAgIlwwMzFcdWZmM2ZcMDMyXHVmZjBlXDAzNVx1ZmYwZVwwNTNcdWZmMGVcMDU0XHVmZjBlXDA1NVx1ZmYwZVwwNTYiICsKLSAgICAiXHVmZjBlXDA1N1x1ZmYwZVwwNjBcdWZmMGVcMDYxXHVmZjBlXDA2Mlx1ZmYwZVwwNjNcdWZmMGVcMDY0XHVmZjBlIiArCi0gICAgIlwwNjVcdWZmMGVcMDY2XHVmZjBlXDA2N1x1ZmYwZVwwNzFcdWZmMGVcMDczXHVmZjBlXDA3NFx1ZmYwZVwwNzUiICsKLSAgICAiXHVmZjBlXDA3N1x1ZmYwZVwxMDBcdWZmMGVcMTAxXHVmZjBlXDEwMlx1ZmYwZVwxMDdcdWZmMGVcMTEwXHVmZjBlIiArCi0gICAgIlwxMTFcdWZmMGVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyM1wwMDRcdWZmMjNcMDA1XHVmZjIzXDAwNiIgKwotICAgICJcdWZmMjNcMDA3XHVmZjIzXDAxMFx1ZmYyM1wwMTFcdWZmMjNcMDEyXHVmZjIzXDAxM1x1ZmYyM1wwMTRcdWZmMjMiICsKLSAgICAiXDAxNVx1ZmYyM1wwMTZcdWZmMjNcMDE3XHVmZjIzXDAyMFx1ZmYyM1wwMjFcdWZmMjNcMDIyXHVmZjIzXDAyMyIgKwotICAgICJcdWZmMjNcMDI0XHVmZjIzXDAyNVx1ZmYyM1wwMzFcdWZmMjNcMDMyXHVmZjIzXDAzNVx1ZmYyM1wwNTNcdWZmMjMiICsKLSAgICAiXDA1NFx1ZmYyM1wwNTVcdWZmMjNcMDU2XHVmZjIzXDA1N1x1ZmYyM1wwNjBcdWZmMjNcMDYxXHVmZjIzXDA2MiIgKwotICAgICJcdWZmMjNcMDYzXHVmZjIzXDA2NFx1ZmYyM1wwNjVcdWZmMjNcMDY2XHVmZjIzXDA2N1x1ZmYyM1wwNzFcdWZmMjMiICsKLSAgICAiXDA3M1x1ZmYyM1wwNzRcdWZmMjNcMDc1XHVmZjIzXDA3N1x1ZmYyM1wxMDBcdWZmMjNcMTAxXHVmZjIzXDEwMiIgKwotICAgICJcdWZmMjNcMTA3XHVmZjIzXDExMFx1ZmYyM1wxMTFcdWZmMjNcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxMCIgKwotICAgICJcMDA0XHVmZjEwXDAwNVx1ZmYxMFwwMDdcdWZmMTBcMDEwXHVmZjEwXDAxMVx1ZmYxMFwwMTJcdWZmMTBcMDEzIiArCi0gICAgIlx1ZmYxMFwwMTRcdWZmMTBcMDE1XHVmZjEwXDAxNlx1ZmYxMFwwMTdcdWZmMTBcMDIwXHVmZjEwXDAyMVx1ZmYxMCIgKwotICAgICJcMDIyXHVmZjEwXDAyM1x1ZmYxMFwwMjRcdWZmMTBcMDI1XHVmZjEwXDAzMVx1ZmY0MVwwMzJcdWZmMTBcMDM1IiArCi0gICAgIlx1ZmYxMFwwNTNcdWZmMTBcMDU0XHVmZjEwXDA1NVx1ZmYxMFwwNTZcdWZmMTBcMDU3XHVmZjEwXDA2MFx1ZmYxMCIgKwotICAgICJcMDYxXHVmZjEwXDA2Mlx1ZmYxMFwwNjNcdWZmMTBcMDY0XHVmZjEwXDA2NVx1ZmYxMFwwNjZcdWZmMTBcMDY3IiArCi0gICAgIlx1ZmYxMFwwNzFcdWZmMTBcMDczXHVmZjEwXDA3NFx1ZmYxMFwwNzVcdWZmMTBcMDc3XHVmZjEwXDEwMFx1ZmYxMCIgKwotICAgICJcMTAxXHVmZjEwXDEwMlx1ZmYxMFwxMDdcdWZmMTBcMTEwXHVmZjEwXDExMVx1ZmYxMFwwMDFcMDAyXDAwMCIgKwotICAgICJcMTM2XDAwMlx1ZmYxYlwwMDRcdWZmMWJcMDA1XHVmZjFiXDAwNlx1ZmYxYlwwMDdcdWZmMWJcMDEwXHVmZjFiIiArCi0gICAgIlwwMTFcdWZmMWJcMDEyXHVmZjFiXDAxM1x1ZmYxYlwwMTRcdWZmMWJcMDE1XHVmZjFiXDAxNlx1ZmYxYlwwMTciICsKLSAgICAiXHVmZjFiXDAyMFx1ZmYxYlwwMjFcdWZmMWJcMDIyXHVmZjFiXDAyM1x1ZmYxYlwwMjRcdWZmMWJcMDI1XHVmZjFiIiArCi0gICAgIlwwMzFcdWZmMWJcMDMyXHVmZjFiXDAzNVx1ZmYxYlwwNTNcdWZmMWJcMDU0XHVmZjFiXDA1NVx1ZmYxYlwwNTYiICsKLSAgICAiXHVmZjFiXDA1N1x1ZmYxYlwwNjBcdWZmMWJcMDYxXHVmZjFiXDA2Mlx1ZmYxYlwwNjNcdWZmMWJcMDY0XHVmZjFiIiArCi0gICAgIlwwNjVcdWZmMWJcMDY2XHVmZjFiXDA2N1x1ZmYxYlwwNzFcdWZmMWJcMDczXHVmZjFiXDA3NFx1ZmYxYlwwNzUiICsKLSAgICAiXHVmZjFiXDA3N1x1ZmYxYlwxMDBcdWZmMWJcMTAxXHVmZjFiXDEwMlx1ZmYxYlwxMDdcdWZmMWJcMTEwXHVmZjFiIiArCi0gICAgIlwxMTFcdWZmMWJcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmY0NVwwMDRcdWZmNDVcMDA1XHVmZjQ1XDAwNiIgKwotICAgICJcdWZmNDVcMDA3XHVmZjQ1XDAxMFx1ZmY0NVwwMTFcdWZmNDVcMDEyXHVmZjQ1XDAxM1x1ZmY0NVwwMTRcdWZmNDUiICsKLSAgICAiXDAxNVx1ZmY0NVwwMTZcdWZmNDVcMDE3XHVmZjQ1XDAyMFx1ZmY0NVwwMjFcdWZmNDVcMDIyXHVmZjQ1XDAyMyIgKwotICAgICJcdWZmNDVcMDI0XHVmZjQ1XDAyNVx1ZmY0NVwwMzFcdWZmNDVcMDMyXHVmZjQ1XDAzNVx1ZmY0NVwwNTNcdWZmNDUiICsKLSAgICAiXDA1NFx1ZmY0NVwwNTVcdWZmNDVcMDU2XHVmZjQ1XDA1N1x1ZmY0NVwwNjBcdWZmNDVcMDYxXHVmZjQ1XDA2MiIgKwotICAgICJcdWZmNDVcMDYzXHVmZjQ1XDA2NFx1ZmY0NVwwNjVcdWZmNDVcMDY2XHVmZjQ1XDA2N1x1ZmY0NVwwNzFcdWZmNDUiICsKLSAgICAiXDA3M1x1ZmY0NVwwNzRcdWZmNDVcMDc1XHVmZjQ1XDA3N1x1ZmY0NVwxMDBcdWZmNDVcMTAxXHVmZjQ1XDEwMiIgKwotICAgICJcdWZmNDVcMTA3XHVmZjQ1XDExMFx1ZmY0NVwxMTFcdWZmNDVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYxZiIgKwotICAgICJcMDA0XHVmZjFmXDAwNVx1ZmYxZlwwMDZcdWZmMWZcMDA3XHVmZjFmXDAxMFx1ZmYxZlwwMTFcdWZmMWZcMDEyIiArCi0gICAgIlx1ZmYxZlwwMTNcdWZmMWZcMDE0XHVmZjFmXDAxNVx1ZmYxZlwwMTZcdWZmMWZcMDE3XHVmZjFmXDAyMFx1ZmYxZiIgKwotICAgICJcMDIxXHVmZjFmXDAyMlx1ZmYxZlwwMjNcdWZmMWZcMDI0XHVmZjFmXDAyNVx1ZmYxZlwwMzFcdWZmMWZcMDMyIiArCi0gICAgIlx1ZmYxZlwwMzVcdWZmMWZcMDUzXHVmZjFmXDA1NFx1ZmYxZlwwNTVcdWZmMWZcMDU2XHVmZjFmXDA1N1x1ZmYxZiIgKwotICAgICJcMDYwXHVmZjFmXDA2MVx1ZmYxZlwwNjJcdWZmMWZcMDYzXHVmZjFmXDA2NFx1ZmYxZlwwNjVcdWZmMWZcMDY2IiArCi0gICAgIlx1ZmYxZlwwNjdcdWZmMWZcMDcxXHVmZjFmXDA3M1x1ZmYxZlwwNzRcdWZmMWZcMDc1XHVmZjFmXDA3N1x1ZmYxZiIgKwotICAgICJcMTAwXHVmZjFmXDEwMVx1ZmYxZlwxMDJcdWZmMWZcMTA3XHVmZjFmXDExMFx1ZmYxZlwxMTFcdWZmMWZcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzMFwwMDJcdWZmNGZcMDA0XHVmZjRmXDAwNVx1ZmY0ZlwwMDdcdWZmNGZcMDEwXHVmZjRmIiArCi0gICAgIlwwMTFcdWZmNGZcMDEyXHVmZjRmXDAxM1x1ZmY0ZlwwMTRcdWZmNGZcMDE1XHVmZjRmXDAxNlx1ZmY0ZlwwMTciICsKLSAgICAiXHVmZjRmXDAyMFx1ZmY0ZlwwMjFcdWZmNGZcMDIyXHVmZjRmXDAyM1x1ZmY0ZlwwMjRcdWZmNGZcMDI1XHVmZjRmIiArCi0gICAgIlwwMzJcdWZmNGZcMDUzXHVmZjRmXDA1NFx1ZmY0ZlwwNTVcdWZmNGZcMDU2XHVmZjRmXDA1N1x1ZmY0ZlwwNjAiICsKLSAgICAiXHVmZjRmXDA2MVx1ZmY0ZlwwNjJcdWZmNGZcMDYzXHVmZjRmXDA2NFx1ZmY0ZlwwNjVcdWZmNGZcMDY2XHVmZjRmIiArCi0gICAgIlwwNjdcdWZmNGZcMDcxXHVmZjRmXDA3M1x1ZmY0ZlwwNzRcdWZmNGZcMDc1XHVmZjRmXDA3N1x1ZmY0ZlwxMDAiICsKLSAgICAiXHVmZjRmXDEwMVx1ZmY0ZlwxMDJcdWZmNGZcMTA3XHVmZjRmXDExMFx1ZmY0ZlwxMTFcdWZmNGZcMDAxXDAwMiIgKwotICAgICJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1IiArCi0gICAgIlwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTYiICsKLSAgICAiXDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NiIgKwotICAgICJcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3IiArCi0gICAgIlwwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzEiICsKLSAgICAiXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMTA2XDA3N1wxNDJcMTAwXDExMyIgKwotICAgICJcMTAxXDE3MVwxMDJcMTc1XDEwM1wxNTdcMTA0XDA0NlwxMDVcMTQ3XDEwNlwwNTJcMTA3IiArCi0gICAgIlwxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTYiICsKLSAgICAiXDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNCIgKwotICAgICJcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA2XDAzMlx1ZmZmN1wxMDBcdWZmZjdcMDAxXDAwMlwwMDBcMTQ2XDAxMlwyMzNcMDM2IiArCi0gICAgIlwyMzJcMDM3XDI0MFwwNDBcMjUyXDA0MVwyNDFcMDQyXDIzN1wwNDNcMjM2XDA0NFwyNTAiICsKLSAgICAiXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0XDA1MFwyMjVcMDUxXDI0MlwwNTJcMjQzXDA2MSIgKwotICAgICJcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwIiArCi0gICAgIlwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzciICsKLSAgICAiXDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNCIgKwotICAgICJcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0IiArCi0gICAgIlwyNTNcMTE1XDI0N1wxMTZcMjUxXDExN1wyMjdcMTIwXDIzNFwxMjFcMjMwXDEyMlwyNDUiICsKLSAgICAiXDEyM1wyMzVcMTI0XDE1M1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAwNlwwMzJcMjY0XDEwMSIgKwotICAgICJcMjY1XDAwMVwwMDJcMDAwXDAwNFwwNzdcMjYyXDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxIiArCi0gICAgIlwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzAiICsKLSAgICAiXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NSIgKwotICAgICJcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwIiArCi0gICAgIlwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDIiICsKLSAgICAiXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NCIgKwotICAgICJcMTU0XDA3NVwxMzVcMDc2XDEwNlwwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1IiArCi0gICAgIlwxMDNcMTU3XDEwNFwwNDZcMTA1XDE0N1wxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTEiICsKLSAgICAiXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNCIgKwotICAgICJcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2IiArCi0gICAgIlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMDA2XDAzMlx1ZmZmNCIgKwotICAgICJcMTAxXHVmZmY0XDAwMVwwMDJcMDAwXDAwNFwwMzNcMjY3XDAwMVwwMDJcMDAwXDIwMFwwMDYiICsKLSAgICAiXDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MCIgKwotICAgICJcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxIiArCi0gICAgIlwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzEiICsKLSAgICAiXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NCIgKwotICAgICJcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzIiArCi0gICAgIlwwNzRcMTU0XDA3NVwxMzVcMDc2XDEwNlwwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDIiICsKLSAgICAiXDE3NVwxMDNcMTU3XDEwNFwwNDZcMTA1XDE0N1wxMDZcMDUyXDEwN1wxMTRcMTEwXDE3MyIgKwotICAgICJcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3IiArCi0gICAgIlwxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzQiICsKLSAgICAiXDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMDIwXDAwMiIgKwotICAgICJcdWZmZjZcMDA1XHVmZmY2XDAwN1x1ZmZmNlwwMzJcdWZmZjZcMTAwXHVmZmY2XDEwMVx1ZmZmNlwxMDdcdWZmZjYiICsKLSAgICAiXDAwMVwwMDJcMDAwXDE0NlwwMTJcMjMzXDAzNlwyMzJcMDM3XDI0MFwwNDBcMjUyXDA0MSIgKwotICAgICJcMjQxXDA0MlwyMzdcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0IiArCi0gICAgIlwwNTBcMjI1XDA1MVwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjQiICsKLSAgICAiXDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzMyIgKwotICAgICJcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyIiArCi0gICAgIlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzMiICsKLSAgICAiXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwyNTNcMTE1XDI0N1wxMTZcMjUxXDExNyIgKwotICAgICJcMjI3XDEyMFwyMzRcMTIxXDIzMFwxMjJcMjQ1XDEyM1wyMzVcMTI0XDE1M1wxMzFcMTIzIiArCi0gICAgIlwwMDFcMDAyXDAwMFwwMDRcMDc3XDI3MVwwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTAiICsKLSAgICAiXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExNyIgKwotICAgICJcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyIiArCi0gICAgIlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTAiICsKLSAgICAiXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NSIgKwotICAgICJcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0IiArCi0gICAgIlwwNzVcMTM1XDA3NlwxMDZcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDMiICsKLSAgICAiXDE1N1wxMDRcMDQ2XDEwNVwxNDdcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0MyIgKwotICAgICJcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwIiArCi0gICAgIlwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzUiICsKLSAgICAiXDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAwNlwwMzJcdWZmZjNcMTAxIiArCi0gICAgIlx1ZmZmM1wwMDFcMDAyXDAwMFwxNDZcMDEyXHVmZmIwXDAzNlx1ZmZiMFwwMzdcdWZmYjBcMDQwXHVmZmIwIiArCi0gICAgIlwwNDFcdWZmYjBcMDQyXHVmZmIwXDA0M1x1ZmZiMFwwNDRcdWZmYjBcMDQ1XHVmZmIwXDA0Nlx1ZmZiMFwwNDciICsKLSAgICAiXHVmZmIwXDA1MFx1ZmZiMFwwNTFcdWZmYjBcMDUyXHVmZmIwXDA2MVx1ZmZiMFwwNjJcdWZmYjBcMDYzXHVmZmIwIiArCi0gICAgIlwwNjRcdWZmYjBcMDY1XHVmZmIwXDA2Nlx1ZmZiMFwwNjdcdWZmYjBcMDcwXHVmZmIwXDA3MVx1ZmZiMFwwNzMiICsKLSAgICAiXHVmZmIwXDA3NFx1ZmZiMFwwNzVcdWZmYjBcMDc2XHVmZmIwXDA3N1x1ZmZiMFwxMDBcdWZmYjBcMTAxXHVmZmIwIiArCi0gICAgIlwxMDJcdWZmYjBcMTAzXHVmZmIwXDEwNFx1ZmZiMFwxMDVcdWZmYjBcMTA2XHVmZmIwXDEwN1x1ZmZiMFwxMTAiICsKLSAgICAiXHVmZmIwXDExMVx1ZmZiMFwxMTJcdWZmYjBcMTEzXHVmZmIwXDExNFx1ZmZiMFwxMTVcdWZmYjBcMTE2XHVmZmIwIiArCi0gICAgIlwxMTdcdWZmYjBcMTIwXHVmZmIwXDEyMVx1ZmZiMFwxMjJcdWZmYjBcMTIzXHVmZmIwXDEyNFx1ZmZiMFwxMzEiICsKLSAgICAiXHVmZmIwXDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3IiArCi0gICAgIlwwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzYiICsKLSAgICAiXDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMCIgKwotICAgICJcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxIiArCi0gICAgIlwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTAiICsKLSAgICAiXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMTA2XDA3NyIgKwotICAgICJcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wxNTdcMTA0XDA0NlwxMDVcMTQ3IiArCi0gICAgIlwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTQiICsKLSAgICAiXDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MSIgKwotICAgICJcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxIiArCi0gICAgIlwxMjNcMDAxXDAwMlwwMDBcMDA2XDAwN1wyNzZcMDMyXDIxNlwwMDFcMDAyXDAwMFwwMDQiICsKLSAgICAiXDEwNlwyNzdcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMiIgKwotICAgICJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwIiArCi0gICAgIlwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDQiICsKLSAgICAiXDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MSIgKwotICAgICJcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3IiArCi0gICAgIlwwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwxMDYiICsKLSAgICAiXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDE1N1wxMDRcMDQ2XDEwNSIgKwotICAgICJcMTQ3XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2IiArCi0gICAgIlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjIiICsKLSAgICAiXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2NyIgKwotICAgICJcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMDRcMTA3XDMwMVwwMDFcMDAyXDAwMFwyMDBcMDA2IiArCi0gICAgIlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzAiICsKLSAgICAiXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MSIgKwotICAgICJcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxIiArCi0gICAgIlwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjQiICsKLSAgICAiXDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzMyIgKwotICAgICJcMDc0XDE1NFwwNzVcMTM1XDA3NlwxMDZcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyIiArCi0gICAgIlwxNzVcMTAzXDE1N1wxMDRcMDQ2XDEwNVwxNDdcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzMiICsKLSAgICAiXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExNyIgKwotICAgICJcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0IiArCi0gICAgIlwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAyMFwwMDIiICsKLSAgICAiXHVmZmYyXDAwNVx1ZmZmMlwwMDdcdWZmZjJcMDMyXHVmZmYyXDEwMFx1ZmZmMlwxMDFcdWZmZjJcMTA3XHVmZmYyIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxNDZcMDEyXHVmZmFmXDAzNlx1ZmZhZlwwMzdcdWZmYWZcMDQwXHVmZmFmXDA0MSIgKwotICAgICJcdWZmYWZcMDQyXHVmZmFmXDA0M1x1ZmZhZlwwNDRcdWZmYWZcMDQ1XHVmZmFmXDA0Nlx1ZmZhZlwwNDdcdWZmYWYiICsKLSAgICAiXDA1MFx1ZmZhZlwwNTFcdWZmYWZcMDUyXHVmZmFmXDA2MVx1ZmZhZlwwNjJcdWZmYWZcMDYzXHVmZmFmXDA2NCIgKwotICAgICJcdWZmYWZcMDY1XHVmZmFmXDA2Nlx1ZmZhZlwwNjdcdWZmYWZcMDcwXHVmZmFmXDA3MVx1ZmZhZlwwNzNcdWZmYWYiICsKLSAgICAiXDA3NFx1ZmZhZlwwNzVcdWZmYWZcMDc2XHVmZmFmXDA3N1x1ZmZhZlwxMDBcdWZmYWZcMTAxXHVmZmFmXDEwMiIgKwotICAgICJcdWZmYWZcMTAzXHVmZmFmXDEwNFx1ZmZhZlwxMDVcdWZmYWZcMTA2XHVmZmFmXDEwN1x1ZmZhZlwxMTBcdWZmYWYiICsKLSAgICAiXDExMVx1ZmZhZlwxMTJcdWZmYWZcMTEzXHVmZmFmXDExNFx1ZmZhZlwxMTVcdWZmYWZcMTE2XHVmZmFmXDExNyIgKwotICAgICJcdWZmYWZcMTIwXHVmZmFmXDEyMVx1ZmZhZlwxMjJcdWZmYWZcMTIzXHVmZmFmXDEyNFx1ZmZhZlwxMzFcdWZmYWYiICsKLSAgICAiXDAwMVwwMDJcMDAwXDE1MFwwMDdcMzA2XDAxMlwzMDVcMDM2XDIzMlwwMzdcMjQwXDA0MCIgKwotICAgICJcMjUyXDA0MVwyNDFcMDQyXDIzN1wwNDNcMjM2XDA0NFwyNTBcMDQ1XDIyNlwwNDZcMjQ2IiArCi0gICAgIlwwNDdcMjQ0XDA1MFwyMjVcMDUxXDI0MlwwNTJcMjQzXDA2MVwxMTFcMDYyXDA3N1wwNjMiICsKLSAgICAiXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyMyIgKwotICAgICJcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxIiArCi0gICAgIlwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTQiICsKLSAgICAiXDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDI1M1wxMTVcMjQ3XDExNiIgKwotICAgICJcMjUxXDExN1wyMjdcMTIwXDIzNFwxMjFcMjMwXDEyMlwyNDVcMTIzXDIzNVwxMjRcMTUzIiArCi0gICAgIlwxMzFcMTIzXDAwMVwwMDJcMDAwXDAxMFwwMDdcdWZmNjFcMDMxXHVmZjE4XDAzMlx1ZmY2MVwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTMwXDAwMlx1ZmY2NVwwMDRcdWZmNjVcMDA1XHVmZjY1XDAwN1x1ZmY2NVwwMTBcdWZmNjUiICsKLSAgICAiXDAxMVx1ZmY2NVwwMTJcdWZmNjVcMDEzXHVmZjY1XDAxNFx1ZmY2NVwwMTVcdWZmNjVcMDE2XHVmZjY1XDAxNyIgKwotICAgICJcdWZmNjVcMDIwXHVmZjY1XDAyMVx1ZmY2NVwwMjJcdWZmNjVcMDIzXHVmZjY1XDAyNFx1ZmY2NVwwMjVcdWZmNjUiICsKLSAgICAiXDAzMlx1ZmY2NVwwMzVcdWZmNjVcMDUzXHVmZjY1XDA1NFx1ZmY2NVwwNTVcdWZmNjVcMDU2XHVmZjY1XDA1NyIgKwotICAgICJcdWZmNjVcMDYwXHVmZjY1XDA2MVx1ZmY2NVwwNjJcdWZmNjVcMDYzXHVmZjY1XDA2NFx1ZmY2NVwwNjVcdWZmNjUiICsKLSAgICAiXDA2Nlx1ZmY2NVwwNjdcdWZmNjVcMDcxXHVmZjY1XDA3M1x1ZmY2NVwwNzRcdWZmNjVcMDc1XHVmZjY1XDEwMCIgKwotICAgICJcdWZmNjVcMTAxXHVmZjY1XDEwMlx1ZmY2NVwxMDdcdWZmNjVcMTEwXHVmZjY1XDExMVx1ZmY2NVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA2XDAwN1x1ZmY2MlwwMzJcdWZmNjJcMDAxXDAwMlwwMDBcMDA2XDAwN1wzMTNcMDMyIiArCi0gICAgIlwzMTJcMDAxXDAwMlwwMDBcMDA2XDAwN1x1ZmY1NlwwMzJcdWZmNTZcMDAxXDAwMlwwMDBcMTQ2IiArCi0gICAgIlwwMTJcMjMzXDAzNlwyMzJcMDM3XDI0MFwwNDBcMjUyXDA0MVwyNDFcMDQyXDIzN1wwNDMiICsKLSAgICAiXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0XDA1MFwyMjVcMDUxXDI0MiIgKwotICAgICJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2IiArCi0gICAgIlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzUiICsKLSAgICAiXDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNCIgKwotICAgICJcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyIiArCi0gICAgIlwxMTNcMTI2XDExNFwyNTNcMTE1XDI0N1wxMTZcMjUxXDExN1wyMjdcMTIwXDIzNFwxMjEiICsKLSAgICAiXDIzMFwxMjJcMjQ1XDEyM1wyMzVcMTI0XDE1M1wxMzFcMTIzXDAwMVwwMDJcMDAwXDEzMCIgKwotICAgICJcMDAyXHVmZjY0XDAwNFx1ZmY2NFwwMDVcdWZmNjRcMDA3XHVmZjY0XDAxMFx1ZmY2NFwwMTFcdWZmNjRcMDEyIiArCi0gICAgIlx1ZmY2NFwwMTNcdWZmNjRcMDE0XHVmZjY0XDAxNVx1ZmY2NFwwMTZcdWZmNjRcMDE3XHVmZjY0XDAyMFx1ZmY2NCIgKwotICAgICJcMDIxXHVmZjY0XDAyMlx1ZmY2NFwwMjNcdWZmNjRcMDI0XHVmZjY0XDAyNVx1ZmY2NFwwMzJcdWZmNjRcMDM1IiArCi0gICAgIlx1ZmY2NFwwNTNcdWZmNjRcMDU0XHVmZjY0XDA1NVx1ZmY2NFwwNTZcdWZmNjRcMDU3XHVmZjY0XDA2MFx1ZmY2NCIgKwotICAgICJcMDYxXHVmZjY0XDA2Mlx1ZmY2NFwwNjNcdWZmNjRcMDY0XHVmZjY0XDA2NVx1ZmY2NFwwNjZcdWZmNjRcMDY3IiArCi0gICAgIlx1ZmY2NFwwNzFcdWZmNjRcMDczXHVmZjY0XDA3NFx1ZmY2NFwwNzVcdWZmNjRcMTAwXHVmZjY0XDEwMVx1ZmY2NCIgKwotICAgICJcMTAyXHVmZjY0XDEwN1x1ZmY2NFwxMTBcdWZmNjRcMTExXHVmZjY0XDAwMVwwMDJcMDAwXDAwNFwwMDciICsKLSAgICAiXDMxNlwwMDFcMDAyXDAwMFwwMDZcMDA3XHVmZjU0XDAzNVx1ZmY1NFwwMDFcMDAyXDAwMFwxMzAiICsKLSAgICAiXDAwMlx1ZmY2M1wwMDRcdWZmNjNcMDA1XHVmZjYzXDAwN1x1ZmY2M1wwMTBcdWZmNjNcMDExXHVmZjYzXDAxMiIgKwotICAgICJcdWZmNjNcMDEzXHVmZjYzXDAxNFx1ZmY2M1wwMTVcdWZmNjNcMDE2XHVmZjYzXDAxN1x1ZmY2M1wwMjBcdWZmNjMiICsKLSAgICAiXDAyMVx1ZmY2M1wwMjJcdWZmNjNcMDIzXHVmZjYzXDAyNFx1ZmY2M1wwMjVcdWZmNjNcMDMyXHVmZjYzXDAzNSIgKwotICAgICJcdWZmNjNcMDUzXHVmZjYzXDA1NFx1ZmY2M1wwNTVcdWZmNjNcMDU2XHVmZjYzXDA1N1x1ZmY2M1wwNjBcdWZmNjMiICsKLSAgICAiXDA2MVx1ZmY2M1wwNjJcdWZmNjNcMDYzXHVmZjYzXDA2NFx1ZmY2M1wwNjVcdWZmNjNcMDY2XHVmZjYzXDA2NyIgKwotICAgICJcdWZmNjNcMDcxXHVmZjYzXDA3M1x1ZmY2M1wwNzRcdWZmNjNcMDc1XHVmZjYzXDEwMFx1ZmY2M1wxMDFcdWZmNjMiICsKLSAgICAiXDEwMlx1ZmY2M1wxMDdcdWZmNjNcMTEwXHVmZjYzXDExMVx1ZmY2M1wwMDFcMDAyXDAwMFwxNTJcMDA3IiArCi0gICAgIlwzMzNcMDEyXDIzM1wwMzZcMzI3XDAzN1wzNDNcMDQwXDI1MlwwNDFcMzQ2XDA0MlwzNDEiICsKLSAgICAiXDA0M1wzMzdcMDQ0XDM2NVwwNDVcMzI1XDA0NlwzNjRcMDQ3XDM1NFwwNTBcMzIyXDA1MSIgKwotICAgICJcMzUyXDA1MlwzNTNcMDYxXDM0MFwwNjJcMzM2XDA2M1wzNTFcMDY0XDM1NVwwNjVcMzY2IiArCi0gICAgIlwwNjZcMzIxXDA2N1wzNjJcMDcwXDM0MlwwNzFcMzUwXDA3M1wzNjFcMDc0XDMyMFwwNzUiICsKLSAgICAiXDMzMlwwNzZcMzI2XDA3N1wzMzRcMTAwXDM0NVwxMDFcMzQ0XDEwMlwzNjBcMTAzXDMyMyIgKwotICAgICJcMTA0XDM1N1wxMDVcMjA0XDEwNlwzNjNcMTA3XDM1NlwxMTBcMzMxXDExMVwzMzVcMTEyIiArCi0gICAgIlwxMzJcMTEzXDEyNlwxMTRcMjUzXDExNVwyNDdcMTE2XDI1MVwxMTdcMjI3XDEyMFwyMzQiICsKLSAgICAiXDEyMVwyMzBcMTIyXDI0NVwxMjNcMjM1XDEyNFwxNTNcMTMwXDE2N1wxMzFcMzQ3XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzRcMDAyXHVmZjMzXDAwNFx1ZmYzM1wwMDVcdWZmMzNcMDA2XHVmZjMzXDAwN1x1ZmYzMyIgKwotICAgICJcMDEwXHVmZjMzXDAxMVx1ZmYzM1wwMTJcdWZmMzNcMDEzXHVmZjMzXDAxNFx1ZmYzM1wwMTVcdWZmMzNcMDE2IiArCi0gICAgIlx1ZmYzM1wwMTdcdWZmMzNcMDIwXHVmZjMzXDAyMVx1ZmYzM1wwMjJcdWZmMzNcMDIzXHVmZjMzXDAyNFx1ZmYzMyIgKwotICAgICJcMDI1XHVmZjMzXDAzMlx1ZmYzM1wwMzVcdWZmMzNcMDUzXHVmZjMzXDA1NFx1ZmYzM1wwNTVcdWZmMzNcMDU2IiArCi0gICAgIlx1ZmYzM1wwNTdcdWZmMzNcMDYwXHVmZjMzXDA2MVx1ZmYzM1wwNjJcdWZmMzNcMDYzXHVmZjMzXDA2NFx1ZmYzMyIgKwotICAgICJcMDY1XHVmZjMzXDA2Nlx1ZmYzM1wwNjdcdWZmMzNcMDcxXHVmZjMzXDA3M1x1ZmYzM1wwNzRcdWZmMzNcMDc1IiArCi0gICAgIlx1ZmYzM1wwNzdcdWZmMzNcMTAwXHVmZjMzXDEwMVx1ZmYzM1wxMDJcdWZmMzNcMTA3XHVmZjMzXDExMFx1ZmYzMyIgKwotICAgICJcMTExXHVmZjMzXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMzhcMDA0XHVmZjM4XDAwNVx1ZmYzOFwwMDYiICsKLSAgICAiXHVmZjM4XDAwN1x1ZmYzOFwwMTBcdWZmMzhcMDExXHVmZjM4XDAxMlx1ZmYzOFwwMTNcdWZmMzhcMDE0XHVmZjM4IiArCi0gICAgIlwwMTVcdWZmMzhcMDE2XHVmZjM4XDAxN1x1ZmYzOFwwMjBcdWZmMzhcMDIxXHVmZjM4XDAyMlx1ZmYzOFwwMjMiICsKLSAgICAiXHVmZjM4XDAyNFx1ZmYzOFwwMjVcdWZmMzhcMDMyXHVmZjM4XDAzNVx1ZmYzOFwwNTNcdWZmMzhcMDU0XHVmZjM4IiArCi0gICAgIlwwNTVcdWZmMzhcMDU2XHVmZjM4XDA1N1x1ZmYzOFwwNjBcdWZmMzhcMDYxXHVmZjM4XDA2Mlx1ZmYzOFwwNjMiICsKLSAgICAiXHVmZjM4XDA2NFx1ZmYzOFwwNjVcdWZmMzhcMDY2XHVmZjM4XDA2N1x1ZmYzOFwwNzFcdWZmMzhcMDczXHVmZjM4IiArCi0gICAgIlwwNzRcdWZmMzhcMDc1XHVmZjM4XDA3N1x1ZmYzOFwxMDBcdWZmMzhcMTAxXHVmZjM4XDEwMlx1ZmYzOFwxMDciICsKLSAgICAiXHVmZjM4XDExMFx1ZmYzOFwxMTFcdWZmMzhcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYzZFwwMDRcdWZmM2QiICsKLSAgICAiXDAwNVx1ZmYzZFwwMDZcdWZmM2RcMDA3XHVmZjNkXDAxMFx1ZmYzZFwwMTFcdWZmM2RcMDEyXHVmZjNkXDAxMyIgKwotICAgICJcdWZmM2RcMDE0XHVmZjNkXDAxNVx1ZmYzZFwwMTZcdWZmM2RcMDE3XHVmZjNkXDAyMFx1ZmYzZFwwMjFcdWZmM2QiICsKLSAgICAiXDAyMlx1ZmYzZFwwMjNcdWZmM2RcMDI0XHVmZjNkXDAyNVx1ZmYzZFwwMzJcdWZmM2RcMDM1XHVmZjNkXDA1MyIgKwotICAgICJcdWZmM2RcMDU0XHVmZjNkXDA1NVx1ZmYzZFwwNTZcdWZmM2RcMDU3XHVmZjNkXDA2MFx1ZmYzZFwwNjFcdWZmM2QiICsKLSAgICAiXDA2Mlx1ZmYzZFwwNjNcdWZmM2RcMDY0XHVmZjNkXDA2NVx1ZmYzZFwwNjZcdWZmM2RcMDY3XHVmZjNkXDA3MSIgKwotICAgICJcdWZmM2RcMDczXHVmZjNkXDA3NFx1ZmYzZFwwNzVcdWZmM2RcMDc3XHVmZjNkXDEwMFx1ZmYzZFwxMDFcdWZmM2QiICsKLSAgICAiXDEwMlx1ZmYzZFwxMDdcdWZmM2RcMTEwXHVmZjNkXDExMVx1ZmYzZFwwMDFcMDAyXDAwMFwxMzRcMDAyIiArCi0gICAgIlx1ZmYyZFwwMDRcdWZmMmRcMDA1XHVmZjJkXDAwNlx1ZmYyZFwwMDdcdWZmMmRcMDEwXHVmZjJkXDAxMVx1ZmYyZCIgKwotICAgICJcMDEyXHVmZjJkXDAxM1x1ZmYyZFwwMTRcdWZmMmRcMDE1XHVmZjJkXDAxNlx1ZmYyZFwwMTdcdWZmMmRcMDIwIiArCi0gICAgIlx1ZmYyZFwwMjFcdWZmMmRcMDIyXHVmZjJkXDAyM1x1ZmYyZFwwMjRcdWZmMmRcMDI1XHVmZjJkXDAzMlx1ZmYyZCIgKwotICAgICJcMDM1XHVmZjJkXDA1M1x1ZmYyZFwwNTRcdWZmMmRcMDU1XHVmZjJkXDA1Nlx1ZmYyZFwwNTdcdWZmMmRcMDYwIiArCi0gICAgIlx1ZmYyZFwwNjFcdWZmMmRcMDYyXHVmZjJkXDA2M1x1ZmYyZFwwNjRcdWZmMmRcMDY1XHVmZjJkXDA2Nlx1ZmYyZCIgKwotICAgICJcMDY3XHVmZjJkXDA3MVx1ZmYyZFwwNzNcdWZmMmRcMDc0XHVmZjJkXDA3NVx1ZmYyZFwwNzdcdWZmMmRcMTAwIiArCi0gICAgIlx1ZmYyZFwxMDFcdWZmMmRcMTAyXHVmZjJkXDEwN1x1ZmYyZFwxMTBcdWZmMmRcMTExXHVmZjJkXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDRcMDA3XDM3MFwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjQwXDAwNFx1ZmY0MFwwMDUiICsKLSAgICAiXHVmZjQwXDAwNlx1ZmY0MFwwMDdcdWZmNDBcMDEwXHVmZjQwXDAxMVx1ZmY0MFwwMTJcdWZmNDBcMDEzXHVmZjQwIiArCi0gICAgIlwwMTRcdWZmNDBcMDE1XHVmZjQwXDAxNlx1ZmY0MFwwMTdcdWZmNDBcMDIwXHVmZjQwXDAyMVx1ZmY0MFwwMjIiICsKLSAgICAiXHVmZjQwXDAyM1x1ZmY0MFwwMjRcdWZmNDBcMDI1XHVmZjQwXDAzMlx1ZmY0MFwwMzVcdWZmNDBcMDUzXHVmZjQwIiArCi0gICAgIlwwNTRcdWZmNDBcMDU1XHVmZjQwXDA1Nlx1ZmY0MFwwNTdcdWZmNDBcMDYwXHVmZjQwXDA2MVx1ZmY0MFwwNjIiICsKLSAgICAiXHVmZjQwXDA2M1x1ZmY0MFwwNjRcdWZmNDBcMDY1XHVmZjQwXDA2Nlx1ZmY0MFwwNjdcdWZmNDBcMDcxXHVmZjQwIiArCi0gICAgIlwwNzNcdWZmNDBcMDc0XHVmZjQwXDA3NVx1ZmY0MFwwNzdcdWZmNDBcMTAwXHVmZjQwXDEwMVx1ZmY0MFwxMDIiICsKLSAgICAiXHVmZjQwXDEwN1x1ZmY0MFwxMTBcdWZmNDBcMTExXHVmZjQwXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMzEiICsKLSAgICAiXDAwNFx1ZmYzMVwwMDVcdWZmMzFcMDA2XHVmZjMxXDAwN1x1ZmYzMVwwMTBcdWZmMzFcMDExXHVmZjMxXDAxMiIgKwotICAgICJcdWZmMzFcMDEzXHVmZjMxXDAxNFx1ZmYzMVwwMTVcdWZmMzFcMDE2XHVmZjMxXDAxN1x1ZmYzMVwwMjBcdWZmMzEiICsKLSAgICAiXDAyMVx1ZmYzMVwwMjJcdWZmMzFcMDIzXHVmZjMxXDAyNFx1ZmYzMVwwMjVcdWZmMzFcMDMyXHVmZjMxXDAzNSIgKwotICAgICJcdWZmMzFcMDUzXHVmZjMxXDA1NFx1ZmYzMVwwNTVcdWZmMzFcMDU2XHVmZjMxXDA1N1x1ZmYzMVwwNjBcdWZmMzEiICsKLSAgICAiXDA2MVx1ZmYzMVwwNjJcdWZmMzFcMDYzXHVmZjMxXDA2NFx1ZmYzMVwwNjVcdWZmMzFcMDY2XHVmZjMxXDA2NyIgKwotICAgICJcdWZmMzFcMDcxXHVmZjMxXDA3M1x1ZmYzMVwwNzRcdWZmMzFcMDc1XHVmZjMxXDA3N1x1ZmYzMVwxMDBcdWZmMzEiICsKLSAgICAiXDEwMVx1ZmYzMVwxMDJcdWZmMzFcMTA3XHVmZjMxXDExMFx1ZmYzMVwxMTFcdWZmMzFcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzNFwwMDJcdWZmNDdcMDA0XHVmZjQ3XDAwNVx1ZmY0N1wwMDZcdWZmNDdcMDA3XHVmZjQ3XDAxMFx1ZmY0NyIgKwotICAgICJcMDExXHVmZjQ3XDAxMlx1ZmY0N1wwMTNcdWZmNDdcMDE0XHVmZjQ3XDAxNVx1ZmY0N1wwMTZcdWZmNDdcMDE3IiArCi0gICAgIlx1ZmY0N1wwMjBcdWZmNDdcMDIxXHVmZjQ3XDAyMlx1ZmY0N1wwMjNcdWZmNDdcMDI0XHVmZjQ3XDAyNVx1ZmY0NyIgKwotICAgICJcMDMyXHVmZjQ3XDAzNVx1ZmY0N1wwNTNcdWZmNDdcMDU0XHVmZjQ3XDA1NVx1ZmY0N1wwNTZcdWZmNDdcMDU3IiArCi0gICAgIlx1ZmY0N1wwNjBcdWZmNDdcMDYxXHVmZjQ3XDA2Mlx1ZmY0N1wwNjNcdWZmNDdcMDY0XHVmZjQ3XDA2NVx1ZmY0NyIgKwotICAgICJcMDY2XHVmZjQ3XDA2N1x1ZmY0N1wwNzFcdWZmNDdcMDczXHVmZjQ3XDA3NFx1ZmY0N1wwNzVcdWZmNDdcMDc3IiArCi0gICAgIlx1ZmY0N1wxMDBcdWZmNDdcMTAxXHVmZjQ3XDEwMlx1ZmY0N1wxMDdcdWZmNDdcMTEwXHVmZjQ3XDExMVx1ZmY0NyIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA0XDAwN1wzNjdcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYyOFwwMDQiICsKLSAgICAiXHVmZjI4XDAwNVx1ZmYyOFwwMDZcdWZmMjhcMDA3XHVmZjI4XDAxMFx1ZmYyOFwwMTFcdWZmMjhcMDEyXHVmZjI4IiArCi0gICAgIlwwMTNcdWZmMjhcMDE0XHVmZjI4XDAxNVx1ZmYyOFwwMTZcdWZmMjhcMDE3XHVmZjI4XDAyMFx1ZmYyOFwwMjEiICsKLSAgICAiXHVmZjI4XDAyMlx1ZmYyOFwwMjNcdWZmMjhcMDI0XHVmZjI4XDAyNVx1ZmYyOFwwMzJcdWZmMjhcMDM1XHVmZjI4IiArCi0gICAgIlwwNTNcdWZmMjhcMDU0XHVmZjI4XDA1NVx1ZmYyOFwwNTZcdWZmMjhcMDU3XHVmZjI4XDA2MFx1ZmYyOFwwNjEiICsKLSAgICAiXHVmZjI4XDA2Mlx1ZmYyOFwwNjNcdWZmMjhcMDY0XHVmZjI4XDA2NVx1ZmYyOFwwNjZcdWZmMjhcMDY3XHVmZjI4IiArCi0gICAgIlwwNzFcdWZmMjhcMDczXHVmZjI4XDA3NFx1ZmYyOFwwNzVcdWZmMjhcMDc3XHVmZjI4XDEwMFx1ZmYyOFwxMDEiICsKLSAgICAiXHVmZjI4XDEwMlx1ZmYyOFwxMDdcdWZmMjhcMTEwXHVmZjI4XDExMVx1ZmYyOFwwMDFcMDAyXDAwMFwxMzQiICsKLSAgICAiXDAwMlx1ZmYzMlwwMDRcdWZmMzJcMDA1XHVmZjMyXDAwNlx1ZmYzMlwwMDdcdWZmMzJcMDEwXHVmZjMyXDAxMSIgKwotICAgICJcdWZmMzJcMDEyXHVmZjMyXDAxM1x1ZmYzMlwwMTRcdWZmMzJcMDE1XHVmZjMyXDAxNlx1ZmYzMlwwMTdcdWZmMzIiICsKLSAgICAiXDAyMFx1ZmYzMlwwMjFcdWZmMzJcMDIyXHVmZjMyXDAyM1x1ZmYzMlwwMjRcdWZmMzJcMDI1XHVmZjMyXDAzMiIgKwotICAgICJcdWZmMzJcMDM1XHVmZjMyXDA1M1x1ZmYzMlwwNTRcdWZmMzJcMDU1XHVmZjMyXDA1Nlx1ZmYzMlwwNTdcdWZmMzIiICsKLSAgICAiXDA2MFx1ZmYzMlwwNjFcdWZmMzJcMDYyXHVmZjMyXDA2M1x1ZmYzMlwwNjRcdWZmMzJcMDY1XHVmZjMyXDA2NiIgKwotICAgICJcdWZmMzJcMDY3XHVmZjMyXDA3MVx1ZmYzMlwwNzNcdWZmMzJcMDc0XHVmZjMyXDA3NVx1ZmYzMlwwNzdcdWZmMzIiICsKLSAgICAiXDEwMFx1ZmYzMlwxMDFcdWZmMzJcMTAyXHVmZjMyXDEwN1x1ZmYzMlwxMTBcdWZmMzJcMTExXHVmZjMyXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzBcMDAyXHVmZjY4XDAwNFx1ZmY2OFwwMDVcdWZmNjhcMDA3XHVmZjY4XDAxMFx1ZmY2OCIgKwotICAgICJcMDExXHVmZjY4XDAxMlx1ZmY2OFwwMTNcdWZmNjhcMDE0XHVmZjY4XDAxNVx1ZmY2OFwwMTZcdWZmNjhcMDE3IiArCi0gICAgIlx1ZmY2OFwwMjBcdWZmNjhcMDIxXHVmZjY4XDAyMlx1ZmY2OFwwMjNcdWZmNjhcMDI0XHVmZjY4XDAyNVx1ZmY2OCIgKwotICAgICJcMDMyXHVmZjY4XDAzNVx1ZmY2OFwwNTNcdWZmNjhcMDU0XHVmZjY4XDA1NVx1ZmY2OFwwNTZcdWZmNjhcMDU3IiArCi0gICAgIlx1ZmY2OFwwNjBcdWZmNjhcMDYxXHVmZjY4XDA2Mlx1ZmY2OFwwNjNcdWZmNjhcMDY0XHVmZjY4XDA2NVx1ZmY2OCIgKwotICAgICJcMDY2XHVmZjY4XDA2N1x1ZmY2OFwwNzFcdWZmNjhcMDczXHVmZjY4XDA3NFx1ZmY2OFwwNzVcdWZmNjhcMTAwIiArCi0gICAgIlx1ZmY2OFwxMDFcdWZmNjhcMTAyXHVmZjY4XDEwN1x1ZmY2OFwxMTBcdWZmNjhcMTExXHVmZjY4XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzRcMDAyXHVmZjMwXDAwNFx1ZmYzMFwwMDVcdWZmMzBcMDA2XHVmZjMwXDAwN1x1ZmYzMFwwMTAiICsKLSAgICAiXHVmZjMwXDAxMVx1ZmYzMFwwMTJcdWZmMzBcMDEzXHVmZjMwXDAxNFx1ZmYzMFwwMTVcdWZmMzBcMDE2XHVmZjMwIiArCi0gICAgIlwwMTdcdWZmMzBcMDIwXHVmZjMwXDAyMVx1ZmYzMFwwMjJcdWZmMzBcMDIzXHVmZjMwXDAyNFx1ZmYzMFwwMjUiICsKLSAgICAiXHVmZjMwXDAzMlx1ZmYzMFwwMzVcdWZmMzBcMDUzXHVmZjMwXDA1NFx1ZmYzMFwwNTVcdWZmMzBcMDU2XHVmZjMwIiArCi0gICAgIlwwNTdcdWZmMzBcMDYwXHVmZjMwXDA2MVx1ZmYzMFwwNjJcdWZmMzBcMDYzXHVmZjMwXDA2NFx1ZmYzMFwwNjUiICsKLSAgICAiXHVmZjMwXDA2Nlx1ZmYzMFwwNjdcdWZmMzBcMDcxXHVmZjMwXDA3M1x1ZmYzMFwwNzRcdWZmMzBcMDc1XHVmZjMwIiArCi0gICAgIlwwNzdcdWZmMzBcMTAwXHVmZjMwXDEwMVx1ZmYzMFwxMDJcdWZmMzBcMTA3XHVmZjMwXDExMFx1ZmYzMFwxMTEiICsKLSAgICAiXHVmZjMwXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMjdcMDA0XHVmZjI3XDAwNVx1ZmYyN1wwMDZcdWZmMjciICsKLSAgICAiXDAwN1x1ZmYyN1wwMTBcdWZmMjdcMDExXHVmZjI3XDAxMlx1ZmYyN1wwMTNcdWZmMjdcMDE0XHVmZjI3XDAxNSIgKwotICAgICJcdWZmMjdcMDE2XHVmZjI3XDAxN1x1ZmYyN1wwMjBcdWZmMjdcMDIxXHVmZjI3XDAyMlx1ZmYyN1wwMjNcdWZmMjciICsKLSAgICAiXDAyNFx1ZmYyN1wwMjVcdWZmMjdcMDMyXHVmZjI3XDAzNVx1ZmYyN1wwNTNcdWZmMjdcMDU0XHVmZjI3XDA1NSIgKwotICAgICJcdWZmMjdcMDU2XHVmZjI3XDA1N1x1ZmYyN1wwNjBcdWZmMjdcMDYxXHVmZjI3XDA2Mlx1ZmYyN1wwNjNcdWZmMjciICsKLSAgICAiXDA2NFx1ZmYyN1wwNjVcdWZmMjdcMDY2XHVmZjI3XDA2N1x1ZmYyN1wwNzFcdWZmMjdcMDczXHVmZjI3XDA3NCIgKwotICAgICJcdWZmMjdcMDc1XHVmZjI3XDA3N1x1ZmYyN1wxMDBcdWZmMjdcMTAxXHVmZjI3XDEwMlx1ZmYyN1wxMDdcdWZmMjciICsKLSAgICAiXDExMFx1ZmYyN1wxMTFcdWZmMjdcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYyNVwwMDRcdWZmMjVcMDA1IiArCi0gICAgIlx1ZmYyNVwwMDZcdWZmMjVcMDA3XHVmZjI1XDAxMFx1ZmYyNVwwMTFcdWZmMjVcMDEyXHVmZjI1XDAxM1x1ZmYyNSIgKwotICAgICJcMDE0XHVmZjI1XDAxNVx1ZmYyNVwwMTZcdWZmMjVcMDE3XHVmZjI1XDAyMFx1ZmYyNVwwMjFcdWZmMjVcMDIyIiArCi0gICAgIlx1ZmYyNVwwMjNcdWZmMjVcMDI0XHVmZjI1XDAyNVx1ZmYyNVwwMzJcdWZmMjVcMDM1XHVmZjI1XDA1M1x1ZmYyNSIgKwotICAgICJcMDU0XHVmZjI1XDA1NVx1ZmYyNVwwNTZcdWZmMjVcMDU3XHVmZjI1XDA2MFx1ZmYyNVwwNjFcdWZmMjVcMDYyIiArCi0gICAgIlx1ZmYyNVwwNjNcdWZmMjVcMDY0XHVmZjI1XDA2NVx1ZmYyNVwwNjZcdWZmMjVcMDY3XHVmZjI1XDA3MVx1ZmYyNSIgKwotICAgICJcMDczXHVmZjI1XDA3NFx1ZmYyNVwwNzVcdWZmMjVcMDc3XHVmZjI1XDEwMFx1ZmYyNVwxMDFcdWZmMjVcMTAyIiArCi0gICAgIlx1ZmYyNVwxMDdcdWZmMjVcMTEwXHVmZjI1XDExMVx1ZmYyNVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjQyIiArCi0gICAgIlwwMDRcdWZmNDJcMDA1XHVmZjQyXDAwNlx1ZmY0MlwwMDdcdWZmNDJcMDEwXHVmZjQyXDAxMVx1ZmY0MlwwMTIiICsKLSAgICAiXHVmZjQyXDAxM1x1ZmY0MlwwMTRcdWZmNDJcMDE1XHVmZjQyXDAxNlx1ZmY0MlwwMTdcdWZmNDJcMDIwXHVmZjQyIiArCi0gICAgIlwwMjFcdWZmNDJcMDIyXHVmZjQyXDAyM1x1ZmY0MlwwMjRcdWZmNDJcMDI1XHVmZjQyXDAzMlx1ZmY0MlwwMzUiICsKLSAgICAiXHVmZjQyXDA1M1x1ZmY0MlwwNTRcdWZmNDJcMDU1XHVmZjQyXDA1Nlx1ZmY0MlwwNTdcdWZmNDJcMDYwXHVmZjQyIiArCi0gICAgIlwwNjFcdWZmNDJcMDYyXHVmZjQyXDA2M1x1ZmY0MlwwNjRcdWZmNDJcMDY1XHVmZjQyXDA2Nlx1ZmY0MlwwNjciICsKLSAgICAiXHVmZjQyXDA3MVx1ZmY0MlwwNzNcdWZmNDJcMDc0XHVmZjQyXDA3NVx1ZmY0MlwwNzdcdWZmNDJcMTAwXHVmZjQyIiArCi0gICAgIlwxMDFcdWZmNDJcMTAyXHVmZjQyXDEwN1x1ZmY0MlwxMTBcdWZmNDJcMTExXHVmZjQyXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzRcMDAyXHVmZjI2XDAwNFx1ZmYyNlwwMDVcdWZmMjZcMDA2XHVmZjI2XDAwN1x1ZmYyNlwwMTBcdWZmMjYiICsKLSAgICAiXDAxMVx1ZmYyNlwwMTJcdWZmMjZcMDEzXHVmZjI2XDAxNFx1ZmYyNlwwMTVcdWZmMjZcMDE2XHVmZjI2XDAxNyIgKwotICAgICJcdWZmMjZcMDIwXHVmZjI2XDAyMVx1ZmYyNlwwMjJcdWZmMjZcMDIzXHVmZjI2XDAyNFx1ZmYyNlwwMjVcdWZmMjYiICsKLSAgICAiXDAzMlx1ZmYyNlwwMzVcdWZmMjZcMDUzXHVmZjI2XDA1NFx1ZmYyNlwwNTVcdWZmMjZcMDU2XHVmZjI2XDA1NyIgKwotICAgICJcdWZmMjZcMDYwXHVmZjI2XDA2MVx1ZmYyNlwwNjJcdWZmMjZcMDYzXHVmZjI2XDA2NFx1ZmYyNlwwNjVcdWZmMjYiICsKLSAgICAiXDA2Nlx1ZmYyNlwwNjdcdWZmMjZcMDcxXHVmZjI2XDA3M1x1ZmYyNlwwNzRcdWZmMjZcMDc1XHVmZjI2XDA3NyIgKwotICAgICJcdWZmMjZcMTAwXHVmZjI2XDEwMVx1ZmYyNlwxMDJcdWZmMjZcMTA3XHVmZjI2XDExMFx1ZmYyNlwxMTFcdWZmMjYiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmNDNcMDA0XHVmZjQzXDAwNVx1ZmY0M1wwMDZcdWZmNDNcMDA3IiArCi0gICAgIlx1ZmY0M1wwMTBcdWZmNDNcMDExXHVmZjQzXDAxMlx1ZmY0M1wwMTNcdWZmNDNcMDE0XHVmZjQzXDAxNVx1ZmY0MyIgKwotICAgICJcMDE2XHVmZjQzXDAxN1x1ZmY0M1wwMjBcdWZmNDNcMDIxXHVmZjQzXDAyMlx1ZmY0M1wwMjNcdWZmNDNcMDI0IiArCi0gICAgIlx1ZmY0M1wwMjVcdWZmNDNcMDMyXHVmZjQzXDAzNVx1ZmY0M1wwNTNcdWZmNDNcMDU0XHVmZjQzXDA1NVx1ZmY0MyIgKwotICAgICJcMDU2XHVmZjQzXDA1N1x1ZmY0M1wwNjBcdWZmNDNcMDYxXHVmZjQzXDA2Mlx1ZmY0M1wwNjNcdWZmNDNcMDY0IiArCi0gICAgIlx1ZmY0M1wwNjVcdWZmNDNcMDY2XHVmZjQzXDA2N1x1ZmY0M1wwNzFcdWZmNDNcMDczXHVmZjQzXDA3NFx1ZmY0MyIgKwotICAgICJcMDc1XHVmZjQzXDA3N1x1ZmY0M1wxMDBcdWZmNDNcMTAxXHVmZjQzXDEwMlx1ZmY0M1wxMDdcdWZmNDNcMTEwIiArCi0gICAgIlx1ZmY0M1wxMTFcdWZmNDNcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYzNlwwMDRcdWZmMzZcMDA1XHVmZjM2IiArCi0gICAgIlwwMDZcdWZmMzZcMDA3XHVmZjM2XDAxMFx1ZmYzNlwwMTFcdWZmMzZcMDEyXHVmZjM2XDAxM1x1ZmYzNlwwMTQiICsKLSAgICAiXHVmZjM2XDAxNVx1ZmYzNlwwMTZcdWZmMzZcMDE3XHVmZjM2XDAyMFx1ZmYzNlwwMjFcdWZmMzZcMDIyXHVmZjM2IiArCi0gICAgIlwwMjNcdWZmMzZcMDI0XHVmZjM2XDAyNVx1ZmYzNlwwMzJcdWZmMzZcMDM1XHVmZjM2XDA1M1x1ZmYzNlwwNTQiICsKLSAgICAiXHVmZjM2XDA1NVx1ZmYzNlwwNTZcdWZmMzZcMDU3XHVmZjM2XDA2MFx1ZmYzNlwwNjFcdWZmMzZcMDYyXHVmZjM2IiArCi0gICAgIlwwNjNcdWZmMzZcMDY0XHVmZjM2XDA2NVx1ZmYzNlwwNjZcdWZmMzZcMDY3XHVmZjM2XDA3MVx1ZmYzNlwwNzMiICsKLSAgICAiXHVmZjM2XDA3NFx1ZmYzNlwwNzVcdWZmMzZcMDc3XHVmZjM2XDEwMFx1ZmYzNlwxMDFcdWZmMzZcMTAyXHVmZjM2IiArCi0gICAgIlwxMDdcdWZmMzZcMTEwXHVmZjM2XDExMVx1ZmYzNlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjQ2XDAwNCIgKwotICAgICJcdWZmNDZcMDA1XHVmZjQ2XDAwNlx1ZmY0NlwwMDdcdWZmNDZcMDEwXHVmZjQ2XDAxMVx1ZmY0NlwwMTJcdWZmNDYiICsKLSAgICAiXDAxM1x1ZmY0NlwwMTRcdWZmNDZcMDE1XHVmZjQ2XDAxNlx1ZmY0NlwwMTdcdWZmNDZcMDIwXHVmZjQ2XDAyMSIgKwotICAgICJcdWZmNDZcMDIyXHVmZjQ2XDAyM1x1ZmY0NlwwMjRcdWZmNDZcMDI1XHVmZjQ2XDAzMlx1ZmY0NlwwMzVcdWZmNDYiICsKLSAgICAiXDA1M1x1ZmY0NlwwNTRcdWZmNDZcMDU1XHVmZjQ2XDA1Nlx1ZmY0NlwwNTdcdWZmNDZcMDYwXHVmZjQ2XDA2MSIgKwotICAgICJcdWZmNDZcMDYyXHVmZjQ2XDA2M1x1ZmY0NlwwNjRcdWZmNDZcMDY1XHVmZjQ2XDA2Nlx1ZmY0NlwwNjdcdWZmNDYiICsKLSAgICAiXDA3MVx1ZmY0NlwwNzNcdWZmNDZcMDc0XHVmZjQ2XDA3NVx1ZmY0NlwwNzdcdWZmNDZcMTAwXHVmZjQ2XDEwMSIgKwotICAgICJcdWZmNDZcMTAyXHVmZjQ2XDEwN1x1ZmY0NlwxMTBcdWZmNDZcMTExXHVmZjQ2XDAwMVwwMDJcMDAwXDEzNCIgKwotICAgICJcMDAyXHVmZjJlXDAwNFx1ZmYyZVwwMDVcdWZmMmVcMDA2XHVmZjJlXDAwN1x1ZmYyZVwwMTBcdWZmMmVcMDExIiArCi0gICAgIlx1ZmYyZVwwMTJcdWZmMmVcMDEzXHVmZjJlXDAxNFx1ZmYyZVwwMTVcdWZmMmVcMDE2XHVmZjJlXDAxN1x1ZmYyZSIgKwotICAgICJcMDIwXHVmZjJlXDAyMVx1ZmYyZVwwMjJcdWZmMmVcMDIzXHVmZjJlXDAyNFx1ZmYyZVwwMjVcdWZmMmVcMDMyIiArCi0gICAgIlx1ZmYyZVwwMzVcdWZmMmVcMDUzXHVmZjJlXDA1NFx1ZmYyZVwwNTVcdWZmMmVcMDU2XHVmZjJlXDA1N1x1ZmYyZSIgKwotICAgICJcMDYwXHVmZjJlXDA2MVx1ZmYyZVwwNjJcdWZmMmVcMDYzXHVmZjJlXDA2NFx1ZmYyZVwwNjVcdWZmMmVcMDY2IiArCi0gICAgIlx1ZmYyZVwwNjdcdWZmMmVcMDcxXHVmZjJlXDA3M1x1ZmYyZVwwNzRcdWZmMmVcMDc1XHVmZjJlXDA3N1x1ZmYyZSIgKwotICAgICJcMTAwXHVmZjJlXDEwMVx1ZmYyZVwxMDJcdWZmMmVcMTA3XHVmZjJlXDExMFx1ZmYyZVwxMTFcdWZmMmVcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNFwwMDJcdWZmMmZcMDA0XHVmZjJmXDAwNVx1ZmYyZlwwMDZcdWZmMmZcMDA3XHVmZjJmIiArCi0gICAgIlwwMTBcdWZmMmZcMDExXHVmZjJmXDAxMlx1ZmYyZlwwMTNcdWZmMmZcMDE0XHVmZjJmXDAxNVx1ZmYyZlwwMTYiICsKLSAgICAiXHVmZjJmXDAxN1x1ZmYyZlwwMjBcdWZmMmZcMDIxXHVmZjJmXDAyMlx1ZmYyZlwwMjNcdWZmMmZcMDI0XHVmZjJmIiArCi0gICAgIlwwMjVcdWZmMmZcMDMyXHVmZjJmXDAzNVx1ZmYyZlwwNTNcdWZmMmZcMDU0XHVmZjJmXDA1NVx1ZmYyZlwwNTYiICsKLSAgICAiXHVmZjJmXDA1N1x1ZmYyZlwwNjBcdWZmMmZcMDYxXHVmZjJmXDA2Mlx1ZmYyZlwwNjNcdWZmMmZcMDY0XHVmZjJmIiArCi0gICAgIlwwNjVcdWZmMmZcMDY2XHVmZjJmXDA2N1x1ZmYyZlwwNzFcdWZmMmZcMDczXHVmZjJmXDA3NFx1ZmYyZlwwNzUiICsKLSAgICAiXHVmZjJmXDA3N1x1ZmYyZlwxMDBcdWZmMmZcMTAxXHVmZjJmXDEwMlx1ZmYyZlwxMDdcdWZmMmZcMTEwXHVmZjJmIiArCi0gICAgIlwxMTFcdWZmMmZcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmY0NFwwMDRcdWZmNDRcMDA1XHVmZjQ0XDAwNiIgKwotICAgICJcdWZmNDRcMDA3XHVmZjQ0XDAxMFx1ZmY0NFwwMTFcdWZmNDRcMDEyXHVmZjQ0XDAxM1x1ZmY0NFwwMTRcdWZmNDQiICsKLSAgICAiXDAxNVx1ZmY0NFwwMTZcdWZmNDRcMDE3XHVmZjQ0XDAyMFx1ZmY0NFwwMjFcdWZmNDRcMDIyXHVmZjQ0XDAyMyIgKwotICAgICJcdWZmNDRcMDI0XHVmZjQ0XDAyNVx1ZmY0NFwwMzJcdWZmNDRcMDM1XHVmZjQ0XDA1M1x1ZmY0NFwwNTRcdWZmNDQiICsKLSAgICAiXDA1NVx1ZmY0NFwwNTZcdWZmNDRcMDU3XHVmZjQ0XDA2MFx1ZmY0NFwwNjFcdWZmNDRcMDYyXHVmZjQ0XDA2MyIgKwotICAgICJcdWZmNDRcMDY0XHVmZjQ0XDA2NVx1ZmY0NFwwNjZcdWZmNDRcMDY3XHVmZjQ0XDA3MVx1ZmY0NFwwNzNcdWZmNDQiICsKLSAgICAiXDA3NFx1ZmY0NFwwNzVcdWZmNDRcMDc3XHVmZjQ0XDEwMFx1ZmY0NFwxMDFcdWZmNDRcMTAyXHVmZjQ0XDEwNyIgKwotICAgICJcdWZmNDRcMTEwXHVmZjQ0XDExMVx1ZmY0NFwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjQ5XDAwNFx1ZmY0OSIgKwotICAgICJcMDA1XHVmZjQ5XDAwNlx1ZmY0OVwwMDdcdWZmNDlcMDEwXHVmZjQ5XDAxMVx1ZmY0OVwwMTJcdWZmNDlcMDEzIiArCi0gICAgIlx1ZmY0OVwwMTRcdWZmNDlcMDE1XHVmZjQ5XDAxNlx1ZmY0OVwwMTdcdWZmNDlcMDIwXHVmZjQ5XDAyMVx1ZmY0OSIgKwotICAgICJcMDIyXHVmZjQ5XDAyM1x1ZmY0OVwwMjRcdWZmNDlcMDI1XHVmZjQ5XDAzMlx1ZmY0OVwwMzVcdWZmNDlcMDUzIiArCi0gICAgIlx1ZmY0OVwwNTRcdWZmNDlcMDU1XHVmZjQ5XDA1Nlx1ZmY0OVwwNTdcdWZmNDlcMDYwXHVmZjQ5XDA2MVx1ZmY0OSIgKwotICAgICJcMDYyXHVmZjQ5XDA2M1x1ZmY0OVwwNjRcdWZmNDlcMDY1XHVmZjQ5XDA2Nlx1ZmY0OVwwNjdcdWZmNDlcMDcxIiArCi0gICAgIlx1ZmY0OVwwNzNcdWZmNDlcMDc0XHVmZjQ5XDA3NVx1ZmY0OVwwNzdcdWZmNDlcMTAwXHVmZjQ5XDEwMVx1ZmY0OSIgKwotICAgICJcMTAyXHVmZjQ5XDEwN1x1ZmY0OVwxMTBcdWZmNDlcMTExXHVmZjQ5XDAwMVwwMDJcMDAwXDEzNFwwMDIiICsKLSAgICAiXHVmZjM1XDAwNFx1ZmYzNVwwMDVcdWZmMzVcMDA2XHVmZjM1XDAwN1x1ZmYzNVwwMTBcdWZmMzVcMDExXHVmZjM1IiArCi0gICAgIlwwMTJcdWZmMzVcMDEzXHVmZjM1XDAxNFx1ZmYzNVwwMTVcdWZmMzVcMDE2XHVmZjM1XDAxN1x1ZmYzNVwwMjAiICsKLSAgICAiXHVmZjM1XDAyMVx1ZmYzNVwwMjJcdWZmMzVcMDIzXHVmZjM1XDAyNFx1ZmYzNVwwMjVcdWZmMzVcMDMyXHVmZjM1IiArCi0gICAgIlwwMzVcdWZmMzVcMDUzXHVmZjM1XDA1NFx1ZmYzNVwwNTVcdWZmMzVcMDU2XHVmZjM1XDA1N1x1ZmYzNVwwNjAiICsKLSAgICAiXHVmZjM1XDA2MVx1ZmYzNVwwNjJcdWZmMzVcMDYzXHVmZjM1XDA2NFx1ZmYzNVwwNjVcdWZmMzVcMDY2XHVmZjM1IiArCi0gICAgIlwwNjdcdWZmMzVcMDcxXHVmZjM1XDA3M1x1ZmYzNVwwNzRcdWZmMzVcMDc1XHVmZjM1XDA3N1x1ZmYzNVwxMDAiICsKLSAgICAiXHVmZjM1XDEwMVx1ZmYzNVwxMDJcdWZmMzVcMTA3XHVmZjM1XDExMFx1ZmYzNVwxMTFcdWZmMzVcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzNFwwMDJcdWZmMTlcMDA0XHVmZjE5XDAwNVx1ZmYxOVwwMDZcdWZmMTlcMDA3XHVmZjE5XDAxMCIgKwotICAgICJcdWZmMTlcMDExXHVmZjE5XDAxMlx1ZmYxOVwwMTNcdWZmMTlcMDE0XHVmZjE5XDAxNVx1ZmYxOVwwMTZcdWZmMTkiICsKLSAgICAiXDAxN1x1ZmYxOVwwMjBcdWZmMTlcMDIxXHVmZjE5XDAyMlx1ZmYxOVwwMjNcdWZmMTlcMDI0XHVmZjE5XDAyNSIgKwotICAgICJcdWZmMTlcMDMyXHVmZjE5XDAzNVx1ZmYxOVwwNTNcdWZmMTlcMDU0XHVmZjE5XDA1NVx1ZmYxOVwwNTZcdWZmMTkiICsKLSAgICAiXDA1N1x1ZmYxOVwwNjBcdWZmMTlcMDYxXHVmZjE5XDA2Mlx1ZmYxOVwwNjNcdWZmMTlcMDY0XHVmZjE5XDA2NSIgKwotICAgICJcdWZmMTlcMDY2XHVmZjE5XDA2N1x1ZmYxOVwwNzFcdWZmMTlcMDczXHVmZjE5XDA3NFx1ZmYxOVwwNzVcdWZmMTkiICsKLSAgICAiXDA3N1x1ZmYxOVwxMDBcdWZmMTlcMTAxXHVmZjE5XDEwMlx1ZmYxOVwxMDdcdWZmMTlcMTEwXHVmZjE5XDExMSIgKwotICAgICJcdWZmMTlcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYzY1wwMDRcdWZmM2NcMDA1XHVmZjNjXDAwNlx1ZmYzYyIgKwotICAgICJcMDA3XHVmZjNjXDAxMFx1ZmYzY1wwMTFcdWZmM2NcMDEyXHVmZjNjXDAxM1x1ZmYzY1wwMTRcdWZmM2NcMDE1IiArCi0gICAgIlx1ZmYzY1wwMTZcdWZmM2NcMDE3XHVmZjNjXDAyMFx1ZmYzY1wwMjFcdWZmM2NcMDIyXHVmZjNjXDAyM1x1ZmYzYyIgKwotICAgICJcMDI0XHVmZjNjXDAyNVx1ZmYzY1wwMzJcdWZmM2NcMDM1XHVmZjNjXDA1M1x1ZmYzY1wwNTRcdWZmM2NcMDU1IiArCi0gICAgIlx1ZmYzY1wwNTZcdWZmM2NcMDU3XHVmZjNjXDA2MFx1ZmYzY1wwNjFcdWZmM2NcMDYyXHVmZjNjXDA2M1x1ZmYzYyIgKwotICAgICJcMDY0XHVmZjNjXDA2NVx1ZmYzY1wwNjZcdWZmM2NcMDY3XHVmZjNjXDA3MVx1ZmYzY1wwNzNcdWZmM2NcMDc0IiArCi0gICAgIlx1ZmYzY1wwNzVcdWZmM2NcMDc3XHVmZjNjXDEwMFx1ZmYzY1wxMDFcdWZmM2NcMTAyXHVmZjNjXDEwN1x1ZmYzYyIgKwotICAgICJcMTEwXHVmZjNjXDExMVx1ZmYzY1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjNiXDAwNFx1ZmYzYlwwMDUiICsKLSAgICAiXHVmZjNiXDAwNlx1ZmYzYlwwMDdcdWZmM2JcMDEwXHVmZjNiXDAxMVx1ZmYzYlwwMTJcdWZmM2JcMDEzXHVmZjNiIiArCi0gICAgIlwwMTRcdWZmM2JcMDE1XHVmZjNiXDAxNlx1ZmYzYlwwMTdcdWZmM2JcMDIwXHVmZjNiXDAyMVx1ZmYzYlwwMjIiICsKLSAgICAiXHVmZjNiXDAyM1x1ZmYzYlwwMjRcdWZmM2JcMDI1XHVmZjNiXDAzMlx1ZmYzYlwwMzVcdWZmM2JcMDUzXHVmZjNiIiArCi0gICAgIlwwNTRcdWZmM2JcMDU1XHVmZjNiXDA1Nlx1ZmYzYlwwNTdcdWZmM2JcMDYwXHVmZjNiXDA2MVx1ZmYzYlwwNjIiICsKLSAgICAiXHVmZjNiXDA2M1x1ZmYzYlwwNjRcdWZmM2JcMDY1XHVmZjNiXDA2Nlx1ZmYzYlwwNjdcdWZmM2JcMDcxXHVmZjNiIiArCi0gICAgIlwwNzNcdWZmM2JcMDc0XHVmZjNiXDA3NVx1ZmYzYlwwNzdcdWZmM2JcMTAwXHVmZjNiXDEwMVx1ZmYzYlwxMDIiICsKLSAgICAiXHVmZjNiXDEwN1x1ZmYzYlwxMTBcdWZmM2JcMTExXHVmZjNiXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2UiICsKLSAgICAiXDAwNFx1ZmYzZVwwMDVcdWZmM2VcMDA2XHVmZjNlXDAwN1x1ZmYzZVwwMTBcdWZmM2VcMDExXHVmZjNlXDAxMiIgKwotICAgICJcdWZmM2VcMDEzXHVmZjNlXDAxNFx1ZmYzZVwwMTVcdWZmM2VcMDE2XHVmZjNlXDAxN1x1ZmYzZVwwMjBcdWZmM2UiICsKLSAgICAiXDAyMVx1ZmYzZVwwMjJcdWZmM2VcMDIzXHVmZjNlXDAyNFx1ZmYzZVwwMjVcdWZmM2VcMDMyXHVmZjNlXDAzNSIgKwotICAgICJcdWZmM2VcMDUzXHVmZjNlXDA1NFx1ZmYzZVwwNTVcdWZmM2VcMDU2XHVmZjNlXDA1N1x1ZmYzZVwwNjBcdWZmM2UiICsKLSAgICAiXDA2MVx1ZmYzZVwwNjJcdWZmM2VcMDYzXHVmZjNlXDA2NFx1ZmYzZVwwNjVcdWZmM2VcMDY2XHVmZjNlXDA2NyIgKwotICAgICJcdWZmM2VcMDcxXHVmZjNlXDA3M1x1ZmYzZVwwNzRcdWZmM2VcMDc1XHVmZjNlXDA3N1x1ZmYzZVwxMDBcdWZmM2UiICsKLSAgICAiXDEwMVx1ZmYzZVwxMDJcdWZmM2VcMTA3XHVmZjNlXDExMFx1ZmYzZVwxMTFcdWZmM2VcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzNFwwMDJcdWZmM2FcMDA0XHVmZjNhXDAwNVx1ZmYzYVwwMDZcdWZmM2FcMDA3XHVmZjNhXDAxMFx1ZmYzYSIgKwotICAgICJcMDExXHVmZjNhXDAxMlx1ZmYzYVwwMTNcdWZmM2FcMDE0XHVmZjNhXDAxNVx1ZmYzYVwwMTZcdWZmM2FcMDE3IiArCi0gICAgIlx1ZmYzYVwwMjBcdWZmM2FcMDIxXHVmZjNhXDAyMlx1ZmYzYVwwMjNcdWZmM2FcMDI0XHVmZjNhXDAyNVx1ZmYzYSIgKwotICAgICJcMDMyXHVmZjNhXDAzNVx1ZmYzYVwwNTNcdWZmM2FcMDU0XHVmZjNhXDA1NVx1ZmYzYVwwNTZcdWZmM2FcMDU3IiArCi0gICAgIlx1ZmYzYVwwNjBcdWZmM2FcMDYxXHVmZjNhXDA2Mlx1ZmYzYVwwNjNcdWZmM2FcMDY0XHVmZjNhXDA2NVx1ZmYzYSIgKwotICAgICJcMDY2XHVmZjNhXDA2N1x1ZmYzYVwwNzFcdWZmM2FcMDczXHVmZjNhXDA3NFx1ZmYzYVwwNzVcdWZmM2FcMDc3IiArCi0gICAgIlx1ZmYzYVwxMDBcdWZmM2FcMTAxXHVmZjNhXDEwMlx1ZmYzYVwxMDdcdWZmM2FcMTEwXHVmZjNhXDExMVx1ZmYzYSIgKwotICAgICJcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYyOVwwMDRcdWZmMjlcMDA1XHVmZjI5XDAwNlx1ZmYyOVwwMDciICsKLSAgICAiXHVmZjI5XDAxMFx1ZmYyOVwwMTFcdWZmMjlcMDEyXHVmZjI5XDAxM1x1ZmYyOVwwMTRcdWZmMjlcMDE1XHVmZjI5IiArCi0gICAgIlwwMTZcdWZmMjlcMDE3XHVmZjI5XDAyMFx1ZmYyOVwwMjFcdWZmMjlcMDIyXHVmZjI5XDAyM1x1ZmYyOVwwMjQiICsKLSAgICAiXHVmZjI5XDAyNVx1ZmYyOVwwMzJcdWZmMjlcMDM1XHVmZjI5XDA1M1x1ZmYyOVwwNTRcdWZmMjlcMDU1XHVmZjI5IiArCi0gICAgIlwwNTZcdWZmMjlcMDU3XHVmZjI5XDA2MFx1ZmYyOVwwNjFcdWZmMjlcMDYyXHVmZjI5XDA2M1x1ZmYyOVwwNjQiICsKLSAgICAiXHVmZjI5XDA2NVx1ZmYyOVwwNjZcdWZmMjlcMDY3XHVmZjI5XDA3MVx1ZmYyOVwwNzNcdWZmMjlcMDc0XHVmZjI5IiArCi0gICAgIlwwNzVcdWZmMjlcMDc3XHVmZjI5XDEwMFx1ZmYyOVwxMDFcdWZmMjlcMTAyXHVmZjI5XDEwN1x1ZmYyOVwxMTAiICsKLSAgICAiXHVmZjI5XDExMVx1ZmYyOVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjJjXDAwNFx1ZmYyY1wwMDVcdWZmMmMiICsKLSAgICAiXDAwNlx1ZmYyY1wwMDdcdWZmMmNcMDEwXHVmZjJjXDAxMVx1ZmYyY1wwMTJcdWZmMmNcMDEzXHVmZjJjXDAxNCIgKwotICAgICJcdWZmMmNcMDE1XHVmZjJjXDAxNlx1ZmYyY1wwMTdcdWZmMmNcMDIwXHVmZjJjXDAyMVx1ZmYyY1wwMjJcdWZmMmMiICsKLSAgICAiXDAyM1x1ZmYyY1wwMjRcdWZmMmNcMDI1XHVmZjJjXDAzMlx1ZmYyY1wwMzVcdWZmMmNcMDUzXHVmZjJjXDA1NCIgKwotICAgICJcdWZmMmNcMDU1XHVmZjJjXDA1Nlx1ZmYyY1wwNTdcdWZmMmNcMDYwXHVmZjJjXDA2MVx1ZmYyY1wwNjJcdWZmMmMiICsKLSAgICAiXDA2M1x1ZmYyY1wwNjRcdWZmMmNcMDY1XHVmZjJjXDA2Nlx1ZmYyY1wwNjdcdWZmMmNcMDcxXHVmZjJjXDA3MyIgKwotICAgICJcdWZmMmNcMDc0XHVmZjJjXDA3NVx1ZmYyY1wwNzdcdWZmMmNcMTAwXHVmZjJjXDEwMVx1ZmYyY1wxMDJcdWZmMmMiICsKLSAgICAiXDEwN1x1ZmYyY1wxMTBcdWZmMmNcMTExXHVmZjJjXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmNDhcMDA0IiArCi0gICAgIlx1ZmY0OFwwMDVcdWZmNDhcMDA2XHVmZjQ4XDAwN1x1ZmY0OFwwMTBcdWZmNDhcMDExXHVmZjQ4XDAxMlx1ZmY0OCIgKwotICAgICJcMDEzXHVmZjQ4XDAxNFx1ZmY0OFwwMTVcdWZmNDhcMDE2XHVmZjQ4XDAxN1x1ZmY0OFwwMjBcdWZmNDhcMDIxIiArCi0gICAgIlx1ZmY0OFwwMjJcdWZmNDhcMDIzXHVmZjQ4XDAyNFx1ZmY0OFwwMjVcdWZmNDhcMDMyXHVmZjQ4XDAzNVx1ZmY0OCIgKwotICAgICJcMDUzXHVmZjQ4XDA1NFx1ZmY0OFwwNTVcdWZmNDhcMDU2XHVmZjQ4XDA1N1x1ZmY0OFwwNjBcdWZmNDhcMDYxIiArCi0gICAgIlx1ZmY0OFwwNjJcdWZmNDhcMDYzXHVmZjQ4XDA2NFx1ZmY0OFwwNjVcdWZmNDhcMDY2XHVmZjQ4XDA2N1x1ZmY0OCIgKwotICAgICJcMDcxXHVmZjQ4XDA3M1x1ZmY0OFwwNzRcdWZmNDhcMDc1XHVmZjQ4XDA3N1x1ZmY0OFwxMDBcdWZmNDhcMTAxIiArCi0gICAgIlx1ZmY0OFwxMDJcdWZmNDhcMTA3XHVmZjQ4XDExMFx1ZmY0OFwxMTFcdWZmNDhcMDAxXDAwMlwwMDBcMTM0IiArCi0gICAgIlwwMDJcdWZmMzRcMDA0XHVmZjM0XDAwNVx1ZmYzNFwwMDZcdWZmMzRcMDA3XHVmZjM0XDAxMFx1ZmYzNFwwMTEiICsKLSAgICAiXHVmZjM0XDAxMlx1ZmYzNFwwMTNcdWZmMzRcMDE0XHVmZjM0XDAxNVx1ZmYzNFwwMTZcdWZmMzRcMDE3XHVmZjM0IiArCi0gICAgIlwwMjBcdWZmMzRcMDIxXHVmZjM0XDAyMlx1ZmYzNFwwMjNcdWZmMzRcMDI0XHVmZjM0XDAyNVx1ZmYzNFwwMzIiICsKLSAgICAiXHVmZjM0XDAzNVx1ZmYzNFwwNTNcdWZmMzRcMDU0XHVmZjM0XDA1NVx1ZmYzNFwwNTZcdWZmMzRcMDU3XHVmZjM0IiArCi0gICAgIlwwNjBcdWZmMzRcMDYxXHVmZjM0XDA2Mlx1ZmYzNFwwNjNcdWZmMzRcMDY0XHVmZjM0XDA2NVx1ZmYzNFwwNjYiICsKLSAgICAiXHVmZjM0XDA2N1x1ZmYzNFwwNzFcdWZmMzRcMDczXHVmZjM0XDA3NFx1ZmYzNFwwNzVcdWZmMzRcMDc3XHVmZjM0IiArCi0gICAgIlwxMDBcdWZmMzRcMTAxXHVmZjM0XDEwMlx1ZmYzNFwxMDdcdWZmMzRcMTEwXHVmZjM0XDExMVx1ZmYzNFwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM0XDAwMlx1ZmYzN1wwMDRcdWZmMzdcMDA1XHVmZjM3XDAwNlx1ZmYzN1wwMDdcdWZmMzciICsKLSAgICAiXDAxMFx1ZmYzN1wwMTFcdWZmMzdcMDEyXHVmZjM3XDAxM1x1ZmYzN1wwMTRcdWZmMzdcMDE1XHVmZjM3XDAxNiIgKwotICAgICJcdWZmMzdcMDE3XHVmZjM3XDAyMFx1ZmYzN1wwMjFcdWZmMzdcMDIyXHVmZjM3XDAyM1x1ZmYzN1wwMjRcdWZmMzciICsKLSAgICAiXDAyNVx1ZmYzN1wwMzJcdWZmMzdcMDM1XHVmZjM3XDA1M1x1ZmYzN1wwNTRcdWZmMzdcMDU1XHVmZjM3XDA1NiIgKwotICAgICJcdWZmMzdcMDU3XHVmZjM3XDA2MFx1ZmYzN1wwNjFcdWZmMzdcMDYyXHVmZjM3XDA2M1x1ZmYzN1wwNjRcdWZmMzciICsKLSAgICAiXDA2NVx1ZmYzN1wwNjZcdWZmMzdcMDY3XHVmZjM3XDA3MVx1ZmYzN1wwNzNcdWZmMzdcMDc0XHVmZjM3XDA3NSIgKwotICAgICJcdWZmMzdcMDc3XHVmZjM3XDEwMFx1ZmYzN1wxMDFcdWZmMzdcMTAyXHVmZjM3XDEwN1x1ZmYzN1wxMTBcdWZmMzciICsKLSAgICAiXDExMVx1ZmYzN1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjJhXDAwNFx1ZmYyYVwwMDVcdWZmMmFcMDA2IiArCi0gICAgIlx1ZmYyYVwwMDdcdWZmMmFcMDEwXHVmZjJhXDAxMVx1ZmYyYVwwMTJcdWZmMmFcMDEzXHVmZjJhXDAxNFx1ZmYyYSIgKwotICAgICJcMDE1XHVmZjJhXDAxNlx1ZmYyYVwwMTdcdWZmMmFcMDIwXHVmZjJhXDAyMVx1ZmYyYVwwMjJcdWZmMmFcMDIzIiArCi0gICAgIlx1ZmYyYVwwMjRcdWZmMmFcMDI1XHVmZjJhXDAzMlx1ZmYyYVwwMzVcdWZmMmFcMDUzXHVmZjJhXDA1NFx1ZmYyYSIgKwotICAgICJcMDU1XHVmZjJhXDA1Nlx1ZmYyYVwwNTdcdWZmMmFcMDYwXHVmZjJhXDA2MVx1ZmYyYVwwNjJcdWZmMmFcMDYzIiArCi0gICAgIlx1ZmYyYVwwNjRcdWZmMmFcMDY1XHVmZjJhXDA2Nlx1ZmYyYVwwNjdcdWZmMmFcMDcxXHVmZjJhXDA3M1x1ZmYyYSIgKwotICAgICJcMDc0XHVmZjJhXDA3NVx1ZmYyYVwwNzdcdWZmMmFcMTAwXHVmZjJhXDEwMVx1ZmYyYVwxMDJcdWZmMmFcMTA3IiArCi0gICAgIlx1ZmYyYVwxMTBcdWZmMmFcMTExXHVmZjJhXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2ZcMDA0XHVmZjNmIiArCi0gICAgIlwwMDVcdWZmM2ZcMDA2XHVmZjNmXDAwN1x1ZmYzZlwwMTBcdWZmM2ZcMDExXHVmZjNmXDAxMlx1ZmYzZlwwMTMiICsKLSAgICAiXHVmZjNmXDAxNFx1ZmYzZlwwMTVcdWZmM2ZcMDE2XHVmZjNmXDAxN1x1ZmYzZlwwMjBcdWZmM2ZcMDIxXHVmZjNmIiArCi0gICAgIlwwMjJcdWZmM2ZcMDIzXHVmZjNmXDAyNFx1ZmYzZlwwMjVcdWZmM2ZcMDMyXHVmZjNmXDAzNVx1ZmYzZlwwNTMiICsKLSAgICAiXHVmZjNmXDA1NFx1ZmYzZlwwNTVcdWZmM2ZcMDU2XHVmZjNmXDA1N1x1ZmYzZlwwNjBcdWZmM2ZcMDYxXHVmZjNmIiArCi0gICAgIlwwNjJcdWZmM2ZcMDYzXHVmZjNmXDA2NFx1ZmYzZlwwNjVcdWZmM2ZcMDY2XHVmZjNmXDA2N1x1ZmYzZlwwNzEiICsKLSAgICAiXHVmZjNmXDA3M1x1ZmYzZlwwNzRcdWZmM2ZcMDc1XHVmZjNmXDA3N1x1ZmYzZlwxMDBcdWZmM2ZcMTAxXHVmZjNmIiArCi0gICAgIlwxMDJcdWZmM2ZcMTA3XHVmZjNmXDExMFx1ZmYzZlwxMTFcdWZmM2ZcMDAxXDAwMlwwMDBcMTM0XDAwMiIgKwotICAgICJcdWZmNDFcMDA0XHVmZjQxXDAwNVx1ZmY0MVwwMDZcdWZmNDFcMDA3XHVmZjQxXDAxMFx1ZmY0MVwwMTFcdWZmNDEiICsKLSAgICAiXDAxMlx1ZmY0MVwwMTNcdWZmNDFcMDE0XHVmZjQxXDAxNVx1ZmY0MVwwMTZcdWZmNDFcMDE3XHVmZjQxXDAyMCIgKwotICAgICJcdWZmNDFcMDIxXHVmZjQxXDAyMlx1ZmY0MVwwMjNcdWZmNDFcMDI0XHVmZjQxXDAyNVx1ZmY0MVwwMzJcdWZmNDEiICsKLSAgICAiXDAzNVx1ZmY0MVwwNTNcdWZmNDFcMDU0XHVmZjQxXDA1NVx1ZmY0MVwwNTZcdWZmNDFcMDU3XHVmZjQxXDA2MCIgKwotICAgICJcdWZmNDFcMDYxXHVmZjQxXDA2Mlx1ZmY0MVwwNjNcdWZmNDFcMDY0XHVmZjQxXDA2NVx1ZmY0MVwwNjZcdWZmNDEiICsKLSAgICAiXDA2N1x1ZmY0MVwwNzFcdWZmNDFcMDczXHVmZjQxXDA3NFx1ZmY0MVwwNzVcdWZmNDFcMDc3XHVmZjQxXDEwMCIgKwotICAgICJcdWZmNDFcMTAxXHVmZjQxXDEwMlx1ZmY0MVwxMDdcdWZmNDFcMTEwXHVmZjQxXDExMVx1ZmY0MVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM0XDAwMlx1ZmYzOVwwMDRcdWZmMzlcMDA1XHVmZjM5XDAwNlx1ZmYzOVwwMDdcdWZmMzlcMDEwIiArCi0gICAgIlx1ZmYzOVwwMTFcdWZmMzlcMDEyXHVmZjM5XDAxM1x1ZmYzOVwwMTRcdWZmMzlcMDE1XHVmZjM5XDAxNlx1ZmYzOSIgKwotICAgICJcMDE3XHVmZjM5XDAyMFx1ZmYzOVwwMjFcdWZmMzlcMDIyXHVmZjM5XDAyM1x1ZmYzOVwwMjRcdWZmMzlcMDI1IiArCi0gICAgIlx1ZmYzOVwwMzJcdWZmMzlcMDM1XHVmZjM5XDA1M1x1ZmYzOVwwNTRcdWZmMzlcMDU1XHVmZjM5XDA1Nlx1ZmYzOSIgKwotICAgICJcMDU3XHVmZjM5XDA2MFx1ZmYzOVwwNjFcdWZmMzlcMDYyXHVmZjM5XDA2M1x1ZmYzOVwwNjRcdWZmMzlcMDY1IiArCi0gICAgIlx1ZmYzOVwwNjZcdWZmMzlcMDY3XHVmZjM5XDA3MVx1ZmYzOVwwNzNcdWZmMzlcMDc0XHVmZjM5XDA3NVx1ZmYzOSIgKwotICAgICJcMDc3XHVmZjM5XDEwMFx1ZmYzOVwxMDFcdWZmMzlcMTAyXHVmZjM5XDEwN1x1ZmYzOVwxMTBcdWZmMzlcMTExIiArCi0gICAgIlx1ZmYzOVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjY2XDAwNFx1ZmY2NlwwMDVcdWZmNjZcMDA3XHVmZjY2IiArCi0gICAgIlwwMTBcdWZmNjZcMDExXHVmZjY2XDAxMlx1ZmY2NlwwMTNcdWZmNjZcMDE0XHVmZjY2XDAxNVx1ZmY2NlwwMTYiICsKLSAgICAiXHVmZjY2XDAxN1x1ZmY2NlwwMjBcdWZmNjZcMDIxXHVmZjY2XDAyMlx1ZmY2NlwwMjNcdWZmNjZcMDI0XHVmZjY2IiArCi0gICAgIlwwMjVcdWZmNjZcMDMyXHVmZjY2XDAzNVx1ZmY2NlwwNTNcdWZmNjZcMDU0XHVmZjY2XDA1NVx1ZmY2NlwwNTYiICsKLSAgICAiXHVmZjY2XDA1N1x1ZmY2NlwwNjBcdWZmNjZcMDYxXHVmZjY2XDA2Mlx1ZmY2NlwwNjNcdWZmNjZcMDY0XHVmZjY2IiArCi0gICAgIlwwNjVcdWZmNjZcMDY2XHVmZjY2XDA2N1x1ZmY2NlwwNzFcdWZmNjZcMDczXHVmZjY2XDA3NFx1ZmY2NlwwNzUiICsKLSAgICAiXHVmZjY2XDEwMFx1ZmY2NlwxMDFcdWZmNjZcMTAyXHVmZjY2XDEwN1x1ZmY2NlwxMTBcdWZmNjZcMTExXHVmZjY2IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjY3XDAwNFx1ZmY2N1wwMDVcdWZmNjdcMDA3XHVmZjY3XDAxMCIgKwotICAgICJcdWZmNjdcMDExXHVmZjY3XDAxMlx1ZmY2N1wwMTNcdWZmNjdcMDE0XHVmZjY3XDAxNVx1ZmY2N1wwMTZcdWZmNjciICsKLSAgICAiXDAxN1x1ZmY2N1wwMjBcdWZmNjdcMDIxXHVmZjY3XDAyMlx1ZmY2N1wwMjNcdWZmNjdcMDI0XHVmZjY3XDAyNSIgKwotICAgICJcdWZmNjdcMDMyXHVmZjY3XDAzNVx1ZmY2N1wwNTNcdWZmNjdcMDU0XHVmZjY3XDA1NVx1ZmY2N1wwNTZcdWZmNjciICsKLSAgICAiXDA1N1x1ZmY2N1wwNjBcdWZmNjdcMDYxXHVmZjY3XDA2Mlx1ZmY2N1wwNjNcdWZmNjdcMDY0XHVmZjY3XDA2NSIgKwotICAgICJcdWZmNjdcMDY2XHVmZjY3XDA2N1x1ZmY2N1wwNzFcdWZmNjdcMDczXHVmZjY3XDA3NFx1ZmY2N1wwNzVcdWZmNjciICsKLSAgICAiXDEwMFx1ZmY2N1wxMDFcdWZmNjdcMTAyXHVmZjY3XDEwN1x1ZmY2N1wxMTBcdWZmNjdcMTExXHVmZjY3XDAwMSIgKwotICAgICJcMDAyXDAwMFwxNDZcMDEyXDIzM1wwMzZcMzI3XDAzN1wzNDNcMDQwXDI1MlwwNDFcMzQ2IiArCi0gICAgIlwwNDJcMzQxXDA0M1wzMzdcMDQ0XDM2NVwwNDVcMzI1XDA0NlwzNjRcMDQ3XDM1NFwwNTAiICsKLSAgICAiXDMyMlwwNTFcMzUyXDA1MlwzNTNcMDYxXDM0MFwwNjJcMzM2XDA2M1wzNTFcMDY0XDM1NSIgKwotICAgICJcMDY1XDM2NlwwNjZcMzIxXDA2N1wzNjJcMDcwXDM0MlwwNzFcMzUwXDA3M1wzNjFcMDc0IiArCi0gICAgIlwzMjBcMDc1XDMzMlwwNzZcMzI2XDA3N1wzMzRcMTAwXDM0NVwxMDFcMzQ0XDEwMlwzNjAiICsKLSAgICAiXDEwM1wzMjNcMTA0XDM1N1wxMDVcMjA0XDEwNlwzNjNcMTA3XDM1NlwxMTBcMzMxXDExMSIgKwotICAgICJcMzM1XDExMlwxMzJcMTEzXDEyNlwxMTRcMjUzXDExNVwyNDdcMTE2XDI1MVwxMTdcMjI3IiArCi0gICAgIlwxMjBcMjM0XDEyMVwyMzBcMTIyXDI0NVwxMjNcMjM1XDEyNFwxNTNcMTMxXDM0N1wwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM0XDAwMlx1ZmY0ZFwwMDRcdWZmNGRcMDA1XHVmZjRkXDAwNlx1ZmY0ZFwwMDdcdWZmNGQiICsKLSAgICAiXDAxMFx1ZmY0ZFwwMTFcdWZmNGRcMDEyXHVmZjRkXDAxM1x1ZmY0ZFwwMTRcdWZmNGRcMDE1XHVmZjRkXDAxNiIgKwotICAgICJcdWZmNGRcMDE3XHVmZjRkXDAyMFx1ZmY0ZFwwMjFcdWZmNGRcMDIyXHVmZjRkXDAyM1x1ZmY0ZFwwMjRcdWZmNGQiICsKLSAgICAiXDAyNVx1ZmY0ZFwwMzJcdWZmNGRcMDM1XHVmZjRkXDA1M1x1ZmY0ZFwwNTRcdWZmNGRcMDU1XHVmZjRkXDA1NiIgKwotICAgICJcdWZmNGRcMDU3XHVmZjRkXDA2MFx1ZmY0ZFwwNjFcdWZmNGRcMDYyXHVmZjRkXDA2M1x1ZmY0ZFwwNjRcdWZmNGQiICsKLSAgICAiXDA2NVx1ZmY0ZFwwNjZcdWZmNGRcMDY3XHVmZjRkXDA3MVx1ZmY0ZFwwNzNcdWZmNGRcMDc0XHVmZjRkXDA3NSIgKwotICAgICJcdWZmNGRcMDc3XHVmZjRkXDEwMFx1ZmY0ZFwxMDFcdWZmNGRcMTAyXHVmZjRkXDEwN1x1ZmY0ZFwxMTBcdWZmNGQiICsKLSAgICAiXDExMVx1ZmY0ZFwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjRiXDAwNFx1ZmY0YlwwMDVcdWZmNGJcMDA2IiArCi0gICAgIlx1ZmY0YlwwMDdcdWZmNGJcMDEwXHVmZjRiXDAxMVx1ZmY0YlwwMTJcdWZmNGJcMDEzXHVmZjRiXDAxNFx1ZmY0YiIgKwotICAgICJcMDE1XHVmZjRiXDAxNlx1ZmY0YlwwMTdcdWZmNGJcMDIwXHVmZjRiXDAyMVx1ZmY0YlwwMjJcdWZmNGJcMDIzIiArCi0gICAgIlx1ZmY0YlwwMjRcdWZmNGJcMDI1XHVmZjRiXDAzMlx1ZmY0YlwwMzVcdWZmNGJcMDUzXHVmZjRiXDA1NFx1ZmY0YiIgKwotICAgICJcMDU1XHVmZjRiXDA1Nlx1ZmY0YlwwNTdcdWZmNGJcMDYwXHVmZjRiXDA2MVx1ZmY0YlwwNjJcdWZmNGJcMDYzIiArCi0gICAgIlx1ZmY0YlwwNjRcdWZmNGJcMDY1XHVmZjRiXDA2Nlx1ZmY0YlwwNjdcdWZmNGJcMDcxXHVmZjRiXDA3M1x1ZmY0YiIgKwotICAgICJcMDc0XHVmZjRiXDA3NVx1ZmY0YlwwNzdcdWZmNGJcMTAwXHVmZjRiXDEwMVx1ZmY0YlwxMDJcdWZmNGJcMTA3IiArCi0gICAgIlx1ZmY0YlwxMTBcdWZmNGJcMTExXHVmZjRiXDAwMVwwMDJcMDAwXDEyMFwwMDJcdWZmZDBcMDA1XHVmZmQwIiArCi0gICAgIlwwMDdcdWZmZDBcMDEwXHVmZmQwXDAxMVx1ZmZkMFwwMTJcdWZmZDBcMDEzXHVmZmQwXDAxNFx1ZmZkMFwwMTUiICsKLSAgICAiXHVmZmQwXDAxNlx1ZmZkMFwwMTdcdWZmZDBcMDIwXHVmZmQwXDAyMVx1ZmZkMFwwMjJcdWZmZDBcMDIzXHVmZmQwIiArCi0gICAgIlwwMzJcdWZmZDBcMDUzXHVmZmQwXDA1NFx1ZmZkMFwwNTVcdWZmZDBcMDU2XHVmZmQwXDA1N1x1ZmZkMFwwNjAiICsKLSAgICAiXHVmZmQwXDA2MVx1ZmZkMFwwNjJcdWZmZDBcMDYzXHVmZmQwXDA2NFx1ZmZkMFwwNjVcdWZmZDBcMDY2XHVmZmQwIiArCi0gICAgIlwwNjdcdWZmZDBcMDcxXHVmZmQwXDA3M1x1ZmZkMFwwNzRcdWZmZDBcMDc1XHVmZmQwXDEwMFx1ZmZkMFwxMDEiICsKLSAgICAiXHVmZmQwXDEwMlx1ZmZkMFwxMDdcdWZmZDBcMTEwXHVmZmQwXDExMVx1ZmZkMFwwMDFcMDAyXDAwMFwxNzAiICsKLSAgICAiXDAwNlwxMDFcMDEyXDEwN1wwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNiIgKwotICAgICJcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwIiArCi0gICAgIlwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjEiICsKLSAgICAiXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MCIgKwotICAgICJcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3IiArCi0gICAgIlwxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDQiICsKLSAgICAiXDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNCIgKwotICAgICJcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxIiArCi0gICAgIlwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzEiICsKLSAgICAiXDEyM1wwMDFcMDAyXDAwMFwxNzBcMDA2XDEwMVwwMTJcMTA3XDAyN1wwNzBcMDMwXDExNyIgKwotICAgICJcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyIiArCi0gICAgIlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTAiICsKLSAgICAiXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NSIgKwotICAgICJcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0IiArCi0gICAgIlwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDMiICsKLSAgICAiXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0MyIgKwotICAgICJcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwIiArCi0gICAgIlwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzUiICsKLSAgICAiXDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDEyNFwwMDJcdWZmYjhcMDA1IiArCi0gICAgIlx1ZmZiOFwwMDdcdWZmYjhcMDEwXHVmZmI4XDAxMVx1ZmZiOFwwMTJcdWZmYjhcMDEzXHVmZmI4XDAxNFx1ZmZiOCIgKwotICAgICJcMDE1XHVmZmI4XDAxNlx1ZmZiOFwwMTdcdWZmYjhcMDIwXHVmZmI4XDAyMVx1ZmZiOFwwMjJcdWZmYjhcMDIzIiArCi0gICAgIlx1ZmZiOFwwMjRcdWZmYjhcMDI1XHVmZmI4XDAzMlx1ZmZiOFwwNTNcdWZmYjhcMDU0XHVmZmI4XDA1NVx1ZmZiOCIgKwotICAgICJcMDU2XHVmZmI4XDA1N1x1ZmZiOFwwNjBcdWZmYjhcMDYxXHVmZmI4XDA2Mlx1ZmZiOFwwNjNcdWZmYjhcMDY0IiArCi0gICAgIlx1ZmZiOFwwNjVcdWZmYjhcMDY2XHVmZmI4XDA2N1x1ZmZiOFwwNzFcdWZmYjhcMDczXHVmZmI4XDA3NFx1ZmZiOCIgKwotICAgICJcMDc1XHVmZmI4XDEwMFx1ZmZiOFwxMDFcdWZmYjhcMTAyXHVmZmI4XDEwN1x1ZmZiOFwxMTBcdWZmYjhcMTExIiArCi0gICAgIlx1ZmZiOFwwMDFcMDAyXDAwMFwxMjRcMDAyXHVmZmI5XDAwNVx1ZmZiOVwwMDdcdWZmYjlcMDEwXHVmZmI5IiArCi0gICAgIlwwMTFcdWZmYjlcMDEyXHVmZmI5XDAxM1x1ZmZiOVwwMTRcdWZmYjlcMDE1XHVmZmI5XDAxNlx1ZmZiOVwwMTciICsKLSAgICAiXHVmZmI5XDAyMFx1ZmZiOVwwMjFcdWZmYjlcMDIyXHVmZmI5XDAyM1x1ZmZiOVwwMjRcdWZmYjlcMDI1XHVmZmI5IiArCi0gICAgIlwwMzJcdWZmYjlcMDUzXHVmZmI5XDA1NFx1ZmZiOVwwNTVcdWZmYjlcMDU2XHVmZmI5XDA1N1x1ZmZiOVwwNjAiICsKLSAgICAiXHVmZmI5XDA2MVx1ZmZiOVwwNjJcdWZmYjlcMDYzXHVmZmI5XDA2NFx1ZmZiOVwwNjVcdWZmYjlcMDY2XHVmZmI5IiArCi0gICAgIlwwNjdcdWZmYjlcMDcxXHVmZmI5XDA3M1x1ZmZiOVwwNzRcdWZmYjlcMDc1XHVmZmI5XDEwMFx1ZmZiOVwxMDEiICsKLSAgICAiXHVmZmI5XDEwMlx1ZmZiOVwxMDdcdWZmYjlcMTEwXHVmZmI5XDExMVx1ZmZiOVwwMDFcMDAyXDAwMFwyMDAiICsKLSAgICAiXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyNyIgKwotICAgICJcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1IiArCi0gICAgIlwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDciICsKLSAgICAiXDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2NyIgKwotICAgICJcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczIiArCi0gICAgIlwxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzEiICsKLSAgICAiXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMCIgKwotICAgICJcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3IiArCi0gICAgIlwxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjUiICsKLSAgICAiXDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDIwMCIgKwotICAgICJcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3IiArCi0gICAgIlwwNzBcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDUiICsKLSAgICAiXDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0NyIgKwotICAgICJcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3IiArCi0gICAgIlwwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzMiICsKLSAgICAiXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MSIgKwotICAgICJcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwIiArCi0gICAgIlwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDciICsKLSAgICAiXDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNSIgKwotICAgICJcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMjAwIiArCi0gICAgIlwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjciICsKLSAgICAiXDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NSIgKwotICAgICJcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3IiArCi0gICAgIlwwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjciICsKLSAgICAiXDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3MyIgKwotICAgICJcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxIiArCi0gICAgIlwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTAiICsKLSAgICAiXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0NyIgKwotICAgICJcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1IiArCi0gICAgIlwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwyMDAiICsKLSAgICAiXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyNyIgKwotICAgICJcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1IiArCi0gICAgIlwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDciICsKLSAgICAiXDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2NyIgKwotICAgICJcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczIiArCi0gICAgIlwxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzEiICsKLSAgICAiXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMCIgKwotICAgICJcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3IiArCi0gICAgIlwxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjUiICsKLSAgICAiXDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDEwNCIgKwotICAgICJcMDAyXHVmZmUxXDAwNVx1ZmZlMVwwMDdcdWZmZTFcMDEwXHVmZmUxXDAxMVx1ZmZlMVwwMTJcdWZmZTFcMDEzIiArCi0gICAgIlx1MDEwN1wwMTRcdWZmZTFcMDE1XHVmZmUxXDAxNlx1ZmZlMVwwMTdcdWZmZTFcMDIwXHVmZmUxXDAyMVx1ZmZlMSIgKwotICAgICJcMDIyXHVmZmUxXDAyM1x1ZmZlMVwwMzJcdWZmZTFcMDUzXHVmZmUxXDA1NFx1ZmZlMVwwNTVcdWZmZTFcMDU2IiArCi0gICAgIlx1ZmZlMVwwNTdcdWZmZTFcMDYwXHVmZmUxXDA2MVx1ZmZlMVwwNjJcdWZmZTFcMDYzXHVmZmUxXDA2NFx1MDEwNiIgKwotICAgICJcMDc1XHVmZmUxXDEwMFx1ZmZlMVwxMDFcdWZmZTFcMTAyXHVmZmUxXDEwN1x1ZmZlMVwxMTBcdWZmZTFcMTExIiArCi0gICAgIlx1ZmZlMVwwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzRcMDEyXDEwNyIgKwotICAgICJcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNFwxMjBcMDM2IiArCi0gICAgIlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxXDA0NFwwMTAiICsKLSAgICAiXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTJcMDYxXDA2MSIgKwotICAgICJcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MlwwNjdcMDUwIiArCi0gICAgIlwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2XDIwM1wwNzciICsKLSAgICAiXDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDFcMTA1XDIwNCIgKwotICAgICJcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExM1wxMjZcMTE0IiArCi0gICAgIlwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2XDEyMlwwNTEiICsKLSAgICAiXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzBcMTY3XDEzMSIgKwotICAgICJcMTIzXDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3IiArCi0gICAgIlwwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzYiICsKLSAgICAiXDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMCIgKwotICAgICJcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxIiArCi0gICAgIlwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTAiICsKLSAgICAiXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3NyIgKwotICAgICJcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0IiArCi0gICAgIlwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTQiICsKLSAgICAiXDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MSIgKwotICAgICJcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxIiArCi0gICAgIlwxMjNcMDAxXDAwMlwwMDBcMTEwXDAwMlx1ZmZkZFwwMDVcdWZmZGRcMDA3XHVmZmRkXDAxMFx1ZmZkZCIgKwotICAgICJcMDExXHVmZmRkXDAxMlx1ZmZkZFwwMTNcdWZmZGRcMDE0XHVmZmRkXDAxNVx1ZmZkZFwwMTZcdWZmZGRcMDE3IiArCi0gICAgIlx1ZmZkZFwwMjBcdWZmZGRcMDIxXHVmZmRkXDAyMlx1ZmZkZFwwMjNcdWZmZGRcMDMyXHVmZmRkXDA1M1x1ZmZkZCIgKwotICAgICJcMDU0XHVmZmRkXDA1NVx1ZmZkZFwwNTZcdWZmZGRcMDU3XHVmZmRkXDA2MFx1ZmZkZFwwNjFcdWZmZGRcMDYyIiArCi0gICAgIlx1ZmZkZFwwNjNcdWZmZGRcMDY0XHVmZmRkXDA2NVwyMDdcMDY2XDIwNlwwNzVcdWZmZGRcMTAwXHVmZmRkIiArCi0gICAgIlwxMDFcdWZmZGRcMTAyXHVmZmRkXDEwN1x1ZmZkZFwxMTBcdWZmZGRcMTExXHVmZmRkXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTBcMDAyXHVmZmRlXDAwNVx1ZmZkZVwwMDdcdWZmZGVcMDEwXHVmZmRlXDAxMVx1ZmZkZVwwMTJcdWZmZGUiICsKLSAgICAiXDAxM1x1ZmZkZVwwMTRcdWZmZGVcMDE1XHVmZmRlXDAxNlx1ZmZkZVwwMTdcdWZmZGVcMDIwXHVmZmRlXDAyMSIgKwotICAgICJcdWZmZGVcMDIyXHVmZmRlXDAyM1x1ZmZkZVwwMzJcdWZmZGVcMDUzXHVmZmRlXDA1NFx1ZmZkZVwwNTVcdWZmZGUiICsKLSAgICAiXDA1Nlx1ZmZkZVwwNTdcdWZmZGVcMDYwXHVmZmRlXDA2MVx1ZmZkZVwwNjJcdWZmZGVcMDYzXHVmZmRlXDA2NCIgKwotICAgICJcdWZmZGVcMDY1XDIwN1wwNjZcMjA2XDA3NVx1ZmZkZVwxMDBcdWZmZGVcMTAxXHVmZmRlXDEwMlx1ZmZkZSIgKwotICAgICJcMTA3XHVmZmRlXDExMFx1ZmZkZVwxMTFcdWZmZGVcMDAxXDAwMlwwMDBcMTA0XDAwMlx1ZmZlMlwwMDUiICsKLSAgICAiXHVmZmUyXDAwN1x1ZmZlMlwwMTBcdWZmZTJcMDExXHVmZmUyXDAxMlx1ZmZlMlwwMTNcdTAxMDdcMDE0XHVmZmUyIiArCi0gICAgIlwwMTVcdWZmZTJcMDE2XHVmZmUyXDAxN1x1ZmZlMlwwMjBcdWZmZTJcMDIxXHVmZmUyXDAyMlx1ZmZlMlwwMjMiICsKLSAgICAiXHVmZmUyXDAzMlx1ZmZlMlwwNTNcdWZmZTJcMDU0XHVmZmUyXDA1NVx1ZmZlMlwwNTZcdWZmZTJcMDU3XHVmZmUyIiArCi0gICAgIlwwNjBcdWZmZTJcMDYxXHVmZmUyXDA2Mlx1ZmZlMlwwNjNcdWZmZTJcMDY0XHUwMTA2XDA3NVx1ZmZlMlwxMDAiICsKLSAgICAiXHVmZmUyXDEwMVx1ZmZlMlwxMDJcdWZmZTJcMTA3XHVmZmUyXDExMFx1ZmZlMlwxMTFcdWZmZTJcMDAxXDAwMiIgKwotICAgICJcMDAwXDEwNFwwMDJcdWZmZTBcMDA1XHVmZmUwXDAwN1x1ZmZlMFwwMTBcdWZmZTBcMDExXHVmZmUwXDAxMiIgKwotICAgICJcdWZmZTBcMDEzXHUwMTA3XDAxNFx1ZmZlMFwwMTVcdWZmZTBcMDE2XHVmZmUwXDAxN1x1ZmZlMFwwMjBcdWZmZTAiICsKLSAgICAiXDAyMVx1ZmZlMFwwMjJcdWZmZTBcMDIzXHVmZmUwXDAzMlx1ZmZlMFwwNTNcdWZmZTBcMDU0XHVmZmUwXDA1NSIgKwotICAgICJcdWZmZTBcMDU2XHVmZmUwXDA1N1x1ZmZlMFwwNjBcdWZmZTBcMDYxXHVmZmUwXDA2Mlx1ZmZlMFwwNjNcdWZmZTAiICsKLSAgICAiXDA2NFx1MDEwNlwwNzVcdWZmZTBcMTAwXHVmZmUwXDEwMVx1ZmZlMFwxMDJcdWZmZTBcMTA3XHVmZmUwXDExMCIgKwotICAgICJcdWZmZTBcMTExXHVmZmUwXDAwMVwwMDJcMDAwXDEwNFwwMDJcdWZmZTNcMDA1XHVmZmUzXDAwN1x1ZmZlMyIgKwotICAgICJcMDEwXHVmZmUzXDAxMVx1ZmZlM1wwMTJcdWZmZTNcMDEzXHUwMTA3XDAxNFx1ZmZlM1wwMTVcdWZmZTNcMDE2IiArCi0gICAgIlx1ZmZlM1wwMTdcdWZmZTNcMDIwXHVmZmUzXDAyMVx1ZmZlM1wwMjJcdWZmZTNcMDIzXHVmZmUzXDAzMlx1ZmZlMyIgKwotICAgICJcMDUzXHVmZmUzXDA1NFx1ZmZlM1wwNTVcdWZmZTNcMDU2XHVmZmUzXDA1N1x1ZmZlM1wwNjBcdWZmZTNcMDYxIiArCi0gICAgIlx1ZmZlM1wwNjJcdWZmZTNcMDYzXHVmZmUzXDA2NFx1MDEwNlwwNzVcdWZmZTNcMTAwXHVmZmUzXDEwMVx1ZmZlMyIgKwotICAgICJcMTAyXHVmZmUzXDEwN1x1ZmZlM1wxMTBcdWZmZTNcMTExXHVmZmUzXDAwMVwwMDJcMDAwXDAwNFwwMDciICsKLSAgICAiXHUwMTBlXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNjlcMDA0XHVmZjY5XDAwNVx1ZmY2OVwwMDdcdWZmNjkiICsKLSAgICAiXDAxMFx1ZmY2OVwwMTFcdWZmNjlcMDEyXHVmZjY5XDAxM1x1ZmY2OVwwMTRcdWZmNjlcMDE1XHVmZjY5XDAxNiIgKwotICAgICJcdWZmNjlcMDE3XHVmZjY5XDAyMFx1ZmY2OVwwMjFcdWZmNjlcMDIyXHVmZjY5XDAyM1x1ZmY2OVwwMjRcdWZmNjkiICsKLSAgICAiXDAyNVx1ZmY2OVwwMzJcdWZmNjlcMDM1XHVmZjY5XDA1M1x1ZmY2OVwwNTRcdWZmNjlcMDU1XHVmZjY5XDA1NiIgKwotICAgICJcdWZmNjlcMDU3XHVmZjY5XDA2MFx1ZmY2OVwwNjFcdWZmNjlcMDYyXHVmZjY5XDA2M1x1ZmY2OVwwNjRcdWZmNjkiICsKLSAgICAiXDA2NVx1ZmY2OVwwNjZcdWZmNjlcMDY3XHVmZjY5XDA3MVx1ZmY2OVwwNzNcdWZmNjlcMDc0XHVmZjY5XDA3NSIgKwotICAgICJcdWZmNjlcMTAwXHVmZjY5XDEwMVx1ZmY2OVwxMDJcdWZmNjlcMTA3XHVmZjY5XDExMFx1ZmY2OVwxMTFcdWZmNjkiICsKLSAgICAiXDAwMVwwMDJcMDAwXDE0NlwwMTJcdWZmYTNcMDM2XHVmZmEzXDAzN1x1ZmZhM1wwNDBcdWZmYTNcMDQxIiArCi0gICAgIlx1ZmZhM1wwNDJcdWZmYTNcMDQzXHVmZmEzXDA0NFx1ZmZhM1wwNDVcdWZmYTNcMDQ2XHVmZmEzXDA0N1x1ZmZhMyIgKwotICAgICJcMDUwXHVmZmEzXDA1MVx1ZmZhM1wwNTJcdWZmYTNcMDYxXHVmZmEzXDA2Mlx1ZmZhM1wwNjNcdWZmYTNcMDY0IiArCi0gICAgIlx1ZmZhM1wwNjVcdWZmYTNcMDY2XHVmZmEzXDA2N1x1ZmZhM1wwNzBcdWZmYTNcMDcxXHVmZmEzXDA3M1x1ZmZhMyIgKwotICAgICJcMDc0XHVmZmEzXDA3NVx1ZmZhM1wwNzZcdWZmYTNcMDc3XHVmZmEzXDEwMFx1ZmZhM1wxMDFcdWZmYTNcMTAyIiArCi0gICAgIlx1ZmZhM1wxMDNcdWZmYTNcMTA0XHVmZmEzXDEwNVx1ZmZhM1wxMDZcdWZmYTNcMTA3XHVmZmEzXDExMFx1ZmZhMyIgKwotICAgICJcMTExXHVmZmEzXDExMlx1ZmZhM1wxMTNcdWZmYTNcMTE0XHVmZmEzXDExNVx1ZmZhM1wxMTZcdWZmYTNcMTE3IiArCi0gICAgIlx1ZmZhM1wxMjBcdWZmYTNcMTIxXHVmZmEzXDEyMlx1ZmZhM1wxMjNcdWZmYTNcMTI0XHVmZmEzXDEzMVx1ZmZhMyIgKwotICAgICJcMDAxXDAwMlwwMDBcMTQ2XDAxMlwyMzNcMDM2XDMyN1wwMzdcMzQzXDA0MFwyNTJcMDQxIiArCi0gICAgIlwzNDZcMDQyXDM0MVwwNDNcMzM3XDA0NFwzNjVcMDQ1XDMyNVwwNDZcMzY0XDA0N1wzNTQiICsKLSAgICAiXDA1MFwzMjJcMDUxXDM1MlwwNTJcMzUzXDA2MVwzNDBcMDYyXDMzNlwwNjNcMzUxXDA2NCIgKwotICAgICJcMzU1XDA2NVwzNjZcMDY2XDMyMVwwNjdcMzYyXDA3MFwzNDJcMDcxXDM1MFwwNzNcMzYxIiArCi0gICAgIlwwNzRcMzIwXDA3NVwzMzJcMDc2XDMyNlwwNzdcMzM0XDEwMFwzNDVcMTAxXDM0NFwxMDIiICsKLSAgICAiXDM2MFwxMDNcMzIzXDEwNFwzNTdcMTA1XDIwNFwxMDZcMzYzXDEwN1wzNTZcMTEwXDMzMSIgKwotICAgICJcMTExXDMzNVwxMTJcMTMyXDExM1wxMjZcMTE0XDI1M1wxMTVcMjQ3XDExNlwyNTFcMTE3IiArCi0gICAgIlwyMjdcMTIwXDIzNFwxMjFcMjMwXDEyMlwyNDVcMTIzXDIzNVwxMjRcMTUzXDEzMVwzNDciICsKLSAgICAiXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOWFcMDA0XHVmZjlhXDAwNVx1ZmY5YVwwMDdcdWZmOWFcMDEwIiArCi0gICAgIlx1ZmY5YVwwMTFcdWZmOWFcMDEyXHVmZjlhXDAxM1x1ZmY5YVwwMTRcdWZmOWFcMDE1XHVmZjlhXDAxNlx1ZmY5YSIgKwotICAgICJcMDE3XHVmZjlhXDAyMFx1ZmY5YVwwMjFcdWZmOWFcMDIyXHVmZjlhXDAyM1x1ZmY5YVwwMjRcdWZmOWFcMDI1IiArCi0gICAgIlx1ZmY5YVwwMzJcdWZmOWFcMDUzXHVmZjlhXDA1NFx1ZmY5YVwwNTVcdWZmOWFcMDU2XHVmZjlhXDA1N1x1ZmY5YSIgKwotICAgICJcMDYwXHVmZjlhXDA2MVx1ZmY5YVwwNjJcdWZmOWFcMDYzXHVmZjlhXDA2NFx1ZmY5YVwwNjVcdWZmOWFcMDY2IiArCi0gICAgIlx1ZmY5YVwwNjdcdWZmOWFcMDcxXHVmZjlhXDA3M1x1ZmY5YVwwNzRcdWZmOWFcMDc1XHVmZjlhXDEwMFx1ZmY5YSIgKwotICAgICJcMTAxXHVmZjlhXDEwMlx1ZmY5YVwxMDdcdWZmOWFcMTEwXHVmZjlhXDExMVx1ZmY5YVwwMDFcMDAyXDAwMCIgKwotICAgICJcMTQ2XDAxMlwyMzNcMDM2XDIzMlwwMzdcMjQwXDA0MFwyNTJcMDQxXDI0MVwwNDJcMjM3IiArCi0gICAgIlwwNDNcMjM2XDA0NFwyNTBcMDQ1XDIyNlwwNDZcMjQ2XDA0N1wyNDRcMDUwXDIyNVwwNTEiICsKLSAgICAiXDI0MlwwNTJcMjQzXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNSIgKwotICAgICJcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1IiArCi0gICAgIlwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDUiICsKLSAgICAiXDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMiIgKwotICAgICJcMTMyXDExM1wxMjZcMTE0XDI1M1wxMTVcMjQ3XDExNlwyNTFcMTE3XDIyN1wxMjBcMjM0IiArCi0gICAgIlwxMjFcMjMwXDEyMlwyNDVcMTIzXDIzNVwxMjRcMTUzXDEzMVwxMjNcMDAxXDAwMlwwMDAiICsKLSAgICAiXDAwNFwwNzdcdTAxMTRcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0IiArCi0gICAgIlwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzQiICsKLSAgICAiXDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MSIgKwotICAgICJcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyIiArCi0gICAgIlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzIiICsKLSAgICAiXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NiIgKwotICAgICJcMTA2XDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDE1N1wxMDRcMDQ2IiArCi0gICAgIlwxMDVcMTQ3XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTMiICsKLSAgICAiXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NiIgKwotICAgICJcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwIiArCi0gICAgIlwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMDZcMDMyXHVmZmY4XDEwMFx1ZmZmOFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMjAyXDAwNlwxMDFcMDA3XHUwMTE5XDAxMFwwNzZcMDExXDEzNFwwMTJcMTA3XDAyNCIgKwotICAgICJcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0XDEyMFwwMzZcMDQwIiArCi0gICAgIlwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDFcMDQ0XDAxMFwwNDUiICsKLSAgICAiXDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MlwwNjFcMDYxXDExMSIgKwotICAgICJcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTBcMDcwIiArCi0gICAgIlwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMTA2XDA3N1wxNDIiICsKLSAgICAiXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wxNTdcMTA0XDA0NlwxMDVcMTQ3XDEwNiIgKwotICAgICJcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTRcMDI0IiArCi0gICAgIlwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTZcMTIyXDA1MVwxMjMiICsKLSAgICAiXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMFwxNjdcMTMxXDEyMyIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA2XDAwN1x1MDExYlwwMzJcdTAxMWFcMDAxXDAwMlwwMDBcMDA2XDAwNyIgKwotICAgICJcdWZmODVcMDMyXHVmZjg1XDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmODdcMDA0XHVmZjg3XDAwNVx1ZmY4NyIgKwotICAgICJcMDA3XHVmZjg3XDAxMFx1ZmY4N1wwMTFcdWZmODdcMDEyXHVmZjg3XDAxM1x1ZmY4N1wwMTRcdWZmODdcMDE1IiArCi0gICAgIlx1ZmY4N1wwMTZcdWZmODdcMDE3XHVmZjg3XDAyMFx1ZmY4N1wwMjFcdWZmODdcMDIyXHVmZjg3XDAyM1x1ZmY4NyIgKwotICAgICJcMDI0XHVmZjg3XDAyNVx1ZmY4N1wwMzJcdWZmODdcMDUzXHVmZjg3XDA1NFx1ZmY4N1wwNTVcdWZmODdcMDU2IiArCi0gICAgIlx1ZmY4N1wwNTdcdWZmODdcMDYwXHVmZjg3XDA2MVx1ZmY4N1wwNjJcdWZmODdcMDYzXHVmZjg3XDA2NFx1ZmY4NyIgKwotICAgICJcMDY1XHVmZjg3XDA2Nlx1ZmY4N1wwNjdcdWZmODdcMDcxXHVmZjg3XDA3M1x1ZmY4N1wwNzRcdWZmODdcMDc1IiArCi0gICAgIlx1ZmY4N1wxMDBcdWZmODdcMTAxXHVmZjg3XDEwMlx1ZmY4N1wxMDdcdWZmODdcMTEwXHVmZjg3XDExMVx1ZmY4NyIgKwotICAgICJcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0XDAxMlwxMDdcMDI0IiArCi0gICAgIlwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzRcMTIwXDAzNlwwNDAiICsKLSAgICAiXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MVwwNDRcMDEwXDA0NSIgKwotICAgICJcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyXDA2MVwwNjFcMTExIiArCi0gICAgIlwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzAiICsKLSAgICAiXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwxMDZcMDc3XDE0MiIgKwotICAgICJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDE1N1wxMDRcMDQ2XDEwNVwxNDdcMTA2IiArCi0gICAgIlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwwMjQiICsKLSAgICAiXDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NlwxMjJcMDUxXDEyMyIgKwotICAgICJcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwXDE2N1wxMzFcMTIzIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjg2XDAwNFx1ZmY4NlwwMDVcdWZmODZcMDA3XHVmZjg2XDAxMCIgKwotICAgICJcdWZmODZcMDExXHVmZjg2XDAxMlx1ZmY4NlwwMTNcdWZmODZcMDE0XHVmZjg2XDAxNVx1ZmY4NlwwMTZcdWZmODYiICsKLSAgICAiXDAxN1x1ZmY4NlwwMjBcdWZmODZcMDIxXHVmZjg2XDAyMlx1ZmY4NlwwMjNcdWZmODZcMDI0XHVmZjg2XDAyNSIgKwotICAgICJcdWZmODZcMDMyXHVmZjg2XDA1M1x1ZmY4NlwwNTRcdWZmODZcMDU1XHVmZjg2XDA1Nlx1ZmY4NlwwNTdcdWZmODYiICsKLSAgICAiXDA2MFx1ZmY4NlwwNjFcdWZmODZcMDYyXHVmZjg2XDA2M1x1ZmY4NlwwNjRcdWZmODZcMDY1XHVmZjg2XDA2NiIgKwotICAgICJcdWZmODZcMDY3XHVmZjg2XDA3MVx1ZmY4NlwwNzNcdWZmODZcMDc0XHVmZjg2XDA3NVx1ZmY4NlwxMDBcdWZmODYiICsKLSAgICAiXDEwMVx1ZmY4NlwxMDJcdWZmODZcMTA3XHVmZjg2XDExMFx1ZmY4NlwxMTFcdWZmODZcMDAxXDAwMlwwMDAiICsKLSAgICAiXDAwNlwwMDdcdWZmODRcMDMyXHVmZjg0XDAwMVwwMDJcMDAwXDAwNlwwMDdcdTAxMWZcMDMyXDIxNiIgKwotICAgICJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY4YVwwMDRcdWZmOGFcMDA1XHVmZjhhXDAwN1x1ZmY4YVwwMTAiICsKLSAgICAiXHVmZjhhXDAxMVx1ZmY4YVwwMTJcdWZmOGFcMDEzXHVmZjhhXDAxNFx1ZmY4YVwwMTVcdWZmOGFcMDE2XHVmZjhhIiArCi0gICAgIlwwMTdcdWZmOGFcMDIwXHVmZjhhXDAyMVx1ZmY4YVwwMjJcdWZmOGFcMDIzXHVmZjhhXDAyNFx1ZmY4YVwwMjUiICsKLSAgICAiXHVmZjhhXDAzMlx1ZmY4YVwwNTNcdWZmOGFcMDU0XHVmZjhhXDA1NVx1ZmY4YVwwNTZcdWZmOGFcMDU3XHVmZjhhIiArCi0gICAgIlwwNjBcdWZmOGFcMDYxXHVmZjhhXDA2Mlx1ZmY4YVwwNjNcdWZmOGFcMDY0XHVmZjhhXDA2NVx1ZmY4YVwwNjYiICsKLSAgICAiXHVmZjhhXDA2N1x1ZmY4YVwwNzFcdWZmOGFcMDczXHVmZjhhXDA3NFx1ZmY4YVwwNzVcdWZmOGFcMTAwXHVmZjhhIiArCi0gICAgIlwxMDFcdWZmOGFcMTAyXHVmZjhhXDEwN1x1ZmY4YVwxMTBcdWZmOGFcMTExXHVmZjhhXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMjZcMDAyXHVmZjg5XDAwNFx1ZmY4OVwwMDVcdWZmODlcMDA3XHVmZjg5XDAxMFx1ZmY4OVwwMTFcdWZmODkiICsKLSAgICAiXDAxMlx1ZmY4OVwwMTNcdWZmODlcMDE0XHVmZjg5XDAxNVx1ZmY4OVwwMTZcdWZmODlcMDE3XHVmZjg5XDAyMCIgKwotICAgICJcdWZmODlcMDIxXHVmZjg5XDAyMlx1ZmY4OVwwMjNcdWZmODlcMDI0XHVmZjg5XDAyNVx1ZmY4OVwwMzJcdWZmODkiICsKLSAgICAiXDA1M1x1ZmY4OVwwNTRcdWZmODlcMDU1XHVmZjg5XDA1Nlx1ZmY4OVwwNTdcdWZmODlcMDYwXHVmZjg5XDA2MSIgKwotICAgICJcdWZmODlcMDYyXHVmZjg5XDA2M1x1ZmY4OVwwNjRcdWZmODlcMDY1XHVmZjg5XDA2Nlx1ZmY4OVwwNjdcdWZmODkiICsKLSAgICAiXDA3MVx1ZmY4OVwwNzNcdWZmODlcMDc0XHVmZjg5XDA3NVx1ZmY4OVwxMDBcdWZmODlcMTAxXHVmZjg5XDEwMiIgKwotICAgICJcdWZmODlcMTA3XHVmZjg5XDExMFx1ZmY4OVwxMTFcdWZmODlcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmZiNSIgKwotICAgICJcMDA0XDIxNFwwMDVcdWZmYjVcMDA3XHVmZmI1XDAxMFx1ZmZiNVwwMTFcdWZmYjVcMDEyXHVmZmI1XDAxMyIgKwotICAgICJcdWZmYjVcMDE0XHVmZmI1XDAxNVx1ZmZiNVwwMTZcdWZmYjVcMDE3XHVmZmI1XDAyMFx1ZmZiNVwwMjFcdWZmYjUiICsKLSAgICAiXDAyMlx1ZmZiNVwwMjNcdWZmYjVcMDI0XHVmZmI1XDAyNVx1ZmZiNVwwMzJcdWZmYjVcMDUzXHVmZmI1XDA1NCIgKwotICAgICJcdWZmYjVcMDU1XHVmZmI1XDA1Nlx1ZmZiNVwwNTdcdWZmYjVcMDYwXHVmZmI1XDA2MVx1ZmZiNVwwNjJcdWZmYjUiICsKLSAgICAiXDA2M1x1ZmZiNVwwNjRcdWZmYjVcMDY1XHVmZmI1XDA2Nlx1ZmZiNVwwNjdcdWZmYjVcMDcxXHVmZmI1XDA3MyIgKwotICAgICJcdWZmYjVcMDc0XHVmZmI1XDA3NVx1ZmZiNVwxMDBcdWZmYjVcMTAxXHVmZmI1XDEwMlx1ZmZiNVwxMDdcdWZmYjUiICsKLSAgICAiXDExMFx1ZmZiNVwxMTFcdWZmYjVcMDAxXDAwMlwwMDBcMTIwXDAwMlx1ZmZjZlwwMDVcdWZmY2ZcMDA3IiArCi0gICAgIlx1ZmZjZlwwMTBcdWZmY2ZcMDExXHVmZmNmXDAxMlx1ZmZjZlwwMTNcdWZmY2ZcMDE0XHVmZmNmXDAxNVx1ZmZjZiIgKwotICAgICJcMDE2XHVmZmNmXDAxN1x1ZmZjZlwwMjBcdWZmY2ZcMDIxXHVmZmNmXDAyMlx1ZmZjZlwwMjNcdWZmY2ZcMDMyIiArCi0gICAgIlx1ZmZjZlwwNTNcdWZmY2ZcMDU0XHVmZmNmXDA1NVx1ZmZjZlwwNTZcdWZmY2ZcMDU3XHVmZmNmXDA2MFx1ZmZjZiIgKwotICAgICJcMDYxXHVmZmNmXDA2Mlx1ZmZjZlwwNjNcdWZmY2ZcMDY0XHVmZmNmXDA2NVx1ZmZjZlwwNjZcdWZmY2ZcMDY3IiArCi0gICAgIlx1ZmZjZlwwNzFcdWZmY2ZcMDczXHVmZmNmXDA3NFx1ZmZjZlwwNzVcdWZmY2ZcMTAwXHVmZmNmXDEwMVx1ZmZjZiIgKwotICAgICJcMTAyXHVmZmNmXDEwN1x1ZmZjZlwxMTBcdWZmY2ZcMTExXHVmZmNmXDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZjhiXDAwNFx1ZmY4YlwwMDVcdWZmOGJcMDA3XHVmZjhiXDAxMFx1ZmY4YlwwMTFcdWZmOGJcMDEyXHVmZjhiIiArCi0gICAgIlwwMTNcdWZmOGJcMDE0XHVmZjhiXDAxNVx1ZmY4YlwwMTZcdWZmOGJcMDE3XHVmZjhiXDAyMFx1ZmY4YlwwMjEiICsKLSAgICAiXHVmZjhiXDAyMlx1ZmY4YlwwMjNcdWZmOGJcMDI0XHVmZjhiXDAyNVx1ZmY4YlwwMzJcdWZmOGJcMDUzXHVmZjhiIiArCi0gICAgIlwwNTRcdWZmOGJcMDU1XHVmZjhiXDA1Nlx1ZmY4YlwwNTdcdWZmOGJcMDYwXHVmZjhiXDA2MVx1ZmY4YlwwNjIiICsKLSAgICAiXHVmZjhiXDA2M1x1ZmY4YlwwNjRcdWZmOGJcMDY1XHVmZjhiXDA2Nlx1ZmY4YlwwNjdcdWZmOGJcMDcxXHVmZjhiIiArCi0gICAgIlwwNzNcdWZmOGJcMDc0XHVmZjhiXDA3NVx1ZmY4YlwxMDBcdWZmOGJcMTAxXHVmZjhiXDEwMlx1ZmY4YlwxMDciICsKLSAgICAiXHVmZjhiXDExMFx1ZmY4YlwxMTFcdWZmOGJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmZhOVwwMDRcdWZmYTkiICsKLSAgICAiXDAwNVx1ZmZhOVwwMDdcdWZmYTlcMDEwXHVmZmE5XDAxMVx1ZmZhOVwwMTJcdWZmYTlcMDEzXHVmZmE5XDAxNCIgKwotICAgICJcdWZmYTlcMDE1XHVmZmE5XDAxNlx1ZmZhOVwwMTdcdWZmYTlcMDIwXHVmZmE5XDAyMVx1ZmZhOVwwMjJcdWZmYTkiICsKLSAgICAiXDAyM1x1ZmZhOVwwMjRcdWZmYTlcMDI1XHVmZmE5XDAzMlx1ZmZhOVwwNTNcdWZmYTlcMDU0XHVmZmE5XDA1NSIgKwotICAgICJcdWZmYTlcMDU2XHVmZmE5XDA1N1x1ZmZhOVwwNjBcdWZmYTlcMDYxXHVmZmE5XDA2Mlx1ZmZhOVwwNjNcdWZmYTkiICsKLSAgICAiXDA2NFx1ZmZhOVwwNjVcdWZmYTlcMDY2XHVmZmE5XDA2N1x1ZmZhOVwwNzFcdWZmYTlcMDczXHVmZmE5XDA3NCIgKwotICAgICJcdWZmYTlcMDc1XHVmZmE5XDEwMFx1ZmZhOVwxMDFcdWZmYTlcMTAyXHVmZmE5XDEwN1x1ZmZhOVwxMTBcdWZmYTkiICsKLSAgICAiXDExMVx1ZmZhOVwwMDFcMDAyXDAwMFwwMDZcMDA2XDMwNFwwMzFcdWZmNDVcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEyNlwwMDJcdWZmOWRcMDA0XHVmZjlkXDAwNVx1ZmY5ZFwwMDdcdWZmOWRcMDEwXHVmZjlkXDAxMVx1ZmY5ZCIgKwotICAgICJcMDEyXHVmZjlkXDAxM1x1ZmY5ZFwwMTRcdWZmOWRcMDE1XHVmZjlkXDAxNlx1ZmY5ZFwwMTdcdWZmOWRcMDIwIiArCi0gICAgIlx1ZmY5ZFwwMjFcdWZmOWRcMDIyXHVmZjlkXDAyM1x1ZmY5ZFwwMjRcdWZmOWRcMDI1XHVmZjlkXDAzMlx1ZmY5ZCIgKwotICAgICJcMDUzXHVmZjlkXDA1NFx1ZmY5ZFwwNTVcdWZmOWRcMDU2XHVmZjlkXDA1N1x1ZmY5ZFwwNjBcdWZmOWRcMDYxIiArCi0gICAgIlx1ZmY5ZFwwNjJcdWZmOWRcMDYzXHVmZjlkXDA2NFx1ZmY5ZFwwNjVcdWZmOWRcMDY2XHVmZjlkXDA2N1x1ZmY5ZCIgKwotICAgICJcMDcxXHVmZjlkXDA3M1x1ZmY5ZFwwNzRcdWZmOWRcMDc1XHVmZjlkXDEwMFx1ZmY5ZFwxMDFcdWZmOWRcMTAyIiArCi0gICAgIlx1ZmY5ZFwxMDdcdWZmOWRcMTEwXHVmZjlkXDExMVx1ZmY5ZFwwMDFcMDAyXDAwMFwwMDRcMDEyXHUwMTI3IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZWYzXDAwNFx1ZmVmM1wwMDVcdWZlZjNcMDA2XHVmZWYzXDAwNyIgKwotICAgICJcdWZlZjNcMDEwXHVmZWYzXDAxMVx1ZmVmM1wwMTJcdWZlZjNcMDEzXHVmZWYzXDAxNFx1ZmVmM1wwMTVcdWZlZjMiICsKLSAgICAiXDAxNlx1ZmVmM1wwMTdcdWZlZjNcMDIwXHVmZWYzXDAyMVx1ZmVmM1wwMjJcdWZlZjNcMDIzXHVmZWYzXDAyNCIgKwotICAgICJcdWZlZjNcMDI1XHVmZWYzXDAzMlx1ZmVmM1wwMzVcdWZlZjNcMDUzXHVmZWYzXDA1NFx1ZmVmM1wwNTVcdWZlZjMiICsKLSAgICAiXDA1Nlx1ZmVmM1wwNTdcdWZlZjNcMDYwXHVmZWYzXDA2MVx1ZmVmM1wwNjJcdWZlZjNcMDYzXHVmZWYzXDA2NCIgKwotICAgICJcdWZlZjNcMDY1XHVmZWYzXDA2Nlx1ZmVmM1wwNjdcdWZlZjNcMDcxXHVmZWYzXDA3M1x1ZmVmM1wwNzRcdWZlZjMiICsKLSAgICAiXDA3NVx1ZmVmM1wwNzdcdWZlZjNcMTAwXHVmZWYzXDEwMVx1ZmVmM1wxMDJcdWZlZjNcMTA3XHVmZWYzXDExMCIgKwotICAgICJcdWZlZjNcMTExXHVmZWYzXDAwMVwwMDJcMDAwXDE0NlwwMTJcdWZmYTJcMDM2XHVmZmEyXDAzN1x1ZmZhMiIgKwotICAgICJcMDQwXHVmZmEyXDA0MVx1ZmZhMlwwNDJcdWZmYTJcMDQzXHVmZmEyXDA0NFx1ZmZhMlwwNDVcdWZmYTJcMDQ2IiArCi0gICAgIlx1ZmZhMlwwNDdcdWZmYTJcMDUwXHVmZmEyXDA1MVx1ZmZhMlwwNTJcdWZmYTJcMDYxXHVmZmEyXDA2Mlx1ZmZhMiIgKwotICAgICJcMDYzXHVmZmEyXDA2NFx1ZmZhMlwwNjVcdWZmYTJcMDY2XHVmZmEyXDA2N1x1ZmZhMlwwNzBcdWZmYTJcMDcxIiArCi0gICAgIlx1ZmZhMlwwNzNcdWZmYTJcMDc0XHVmZmEyXDA3NVx1ZmZhMlwwNzZcdWZmYTJcMDc3XHVmZmEyXDEwMFx1ZmZhMiIgKwotICAgICJcMTAxXHVmZmEyXDEwMlx1ZmZhMlwxMDNcdWZmYTJcMTA0XHVmZmEyXDEwNVx1ZmZhMlwxMDZcdWZmYTJcMTA3IiArCi0gICAgIlx1ZmZhMlwxMTBcdWZmYTJcMTExXHVmZmEyXDExMlx1ZmZhMlwxMTNcdWZmYTJcMTE0XHVmZmEyXDExNVx1ZmZhMiIgKwotICAgICJcMTE2XHVmZmEyXDExN1x1ZmZhMlwxMjBcdWZmYTJcMTIxXHVmZmEyXDEyMlx1ZmZhMlwxMjNcdWZmYTJcMTI0IiArCi0gICAgIlx1ZmZhMlwxMzFcdWZmYTJcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZjMVwwMTBcdWZmYzFcMDExXHVmZmMxIiArCi0gICAgIlwwMTJcdWZmYzFcMDI0XHVmZmMxXDAyNVx1ZmZjMVwwMjdcdWZmYzFcMDMwXHVmZmMxXDAzM1x1ZmZjMVwwMzQiICsKLSAgICAiXHVmZmMxXDAzNlx1ZmZjMVwwMzdcdWZmYzFcMDQwXHVmZmMxXDA0MVx1ZmZjMVwwNDJcdWZmYzFcMDQzXHVmZmMxIiArCi0gICAgIlwwNDRcdWZmYzFcMDQ1XHVmZmMxXDA0Nlx1ZmZjMVwwNDdcdWZmYzFcMDUwXHVmZmMxXDA1MVx1ZmZjMVwwNTIiICsKLSAgICAiXHVmZmMxXDA2MVx1ZmZjMVwwNjJcdWZmYzFcMDYzXHVmZmMxXDA2NFx1ZmZjMVwwNjVcdWZmYzFcMDY2XHVmZmMxIiArCi0gICAgIlwwNjdcdWZmYzFcMDcwXHVmZmMxXDA3MVx1ZmZjMVwwNzNcdWZmYzFcMDc0XHVmZmMxXDA3NVx1ZmZjMVwwNzYiICsKLSAgICAiXHVmZmMxXDA3N1x1ZmZjMVwxMDBcdWZmYzFcMTAxXHVmZmMxXDEwMlx1ZmZjMVwxMDNcdWZmYzFcMTA0XHVmZmMxIiArCi0gICAgIlwxMDVcdWZmYzFcMTA2XHVmZmMxXDEwN1x1ZmZjMVwxMTBcdWZmYzFcMTExXHVmZmMxXDExMlx1ZmZjMVwxMTMiICsKLSAgICAiXHVmZmMxXDExNFx1ZmZjMVwxMTVcdWZmYzFcMTE2XHVmZmMxXDExN1x1ZmZjMVwxMjBcdWZmYzFcMTIxXHVmZmMxIiArCi0gICAgIlwxMjJcdWZmYzFcMTIzXHVmZmMxXDEyNFx1ZmZjMVwxMjVcdWZmYzFcMTI2XHVmZmMxXDEyN1x1ZmZjMVwxMzAiICsKLSAgICAiXHVmZmMxXDEzMVx1ZmZjMVwwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmM1XDAxMFx1ZmZjNVwwMTFcdWZmYzUiICsKLSAgICAiXDAxMlx1ZmZjNVwwMjRcdWZmYzVcMDI1XHVmZmM1XDAyN1x1ZmZjNVwwMzBcdWZmYzVcMDMzXHVmZmM1XDAzNCIgKwotICAgICJcdWZmYzVcMDM2XHVmZmM1XDAzN1x1ZmZjNVwwNDBcdWZmYzVcMDQxXHVmZmM1XDA0Mlx1ZmZjNVwwNDNcdWZmYzUiICsKLSAgICAiXDA0NFx1ZmZjNVwwNDVcdWZmYzVcMDQ2XHVmZmM1XDA0N1x1ZmZjNVwwNTBcdWZmYzVcMDUxXHVmZmM1XDA1MiIgKwotICAgICJcdWZmYzVcMDYxXHVmZmM1XDA2Mlx1ZmZjNVwwNjNcdWZmYzVcMDY0XHVmZmM1XDA2NVx1ZmZjNVwwNjZcdWZmYzUiICsKLSAgICAiXDA2N1x1ZmZjNVwwNzBcdWZmYzVcMDcxXHVmZmM1XDA3M1x1ZmZjNVwwNzRcdWZmYzVcMDc1XHVmZmM1XDA3NiIgKwotICAgICJcdWZmYzVcMDc3XHVmZmM1XDEwMFx1ZmZjNVwxMDFcdWZmYzVcMTAyXHVmZmM1XDEwM1x1ZmZjNVwxMDRcdWZmYzUiICsKLSAgICAiXDEwNVx1ZmZjNVwxMDZcdWZmYzVcMTA3XHVmZmM1XDExMFx1ZmZjNVwxMTFcdWZmYzVcMTEyXHVmZmM1XDExMyIgKwotICAgICJcdWZmYzVcMTE0XHVmZmM1XDExNVx1ZmZjNVwxMTZcdWZmYzVcMTE3XHVmZmM1XDEyMFx1ZmZjNVwxMjFcdWZmYzUiICsKLSAgICAiXDEyMlx1ZmZjNVwxMjNcdWZmYzVcMTI0XHVmZmM1XDEyNVx1ZmZjNVwxMjZcdWZmYzVcMTI3XHVmZmM1XDEzMCIgKwotICAgICJcdWZmYzVcMTMxXHVmZmM1XDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmYzZcMDEwXHVmZmM2XDAxMVx1ZmZjNiIgKwotICAgICJcMDEyXHVmZmM2XDAyNFx1ZmZjNlwwMjVcdWZmYzZcMDI3XHVmZmM2XDAzMFx1ZmZjNlwwMzNcdWZmYzZcMDM0IiArCi0gICAgIlx1ZmZjNlwwMzZcdWZmYzZcMDM3XHVmZmM2XDA0MFx1ZmZjNlwwNDFcdWZmYzZcMDQyXHVmZmM2XDA0M1x1ZmZjNiIgKwotICAgICJcMDQ0XHVmZmM2XDA0NVx1ZmZjNlwwNDZcdWZmYzZcMDQ3XHVmZmM2XDA1MFx1ZmZjNlwwNTFcdWZmYzZcMDUyIiArCi0gICAgIlx1ZmZjNlwwNjFcdWZmYzZcMDYyXHVmZmM2XDA2M1x1ZmZjNlwwNjRcdWZmYzZcMDY1XHVmZmM2XDA2Nlx1ZmZjNiIgKwotICAgICJcMDY3XHVmZmM2XDA3MFx1ZmZjNlwwNzFcdWZmYzZcMDczXHVmZmM2XDA3NFx1ZmZjNlwwNzVcdWZmYzZcMDc2IiArCi0gICAgIlx1ZmZjNlwwNzdcdWZmYzZcMTAwXHVmZmM2XDEwMVx1ZmZjNlwxMDJcdWZmYzZcMTAzXHVmZmM2XDEwNFx1ZmZjNiIgKwotICAgICJcMTA1XHVmZmM2XDEwNlx1ZmZjNlwxMDdcdWZmYzZcMTEwXHVmZmM2XDExMVx1ZmZjNlwxMTJcdWZmYzZcMTEzIiArCi0gICAgIlx1ZmZjNlwxMTRcdWZmYzZcMTE1XHVmZmM2XDExNlx1ZmZjNlwxMTdcdWZmYzZcMTIwXHVmZmM2XDEyMVx1ZmZjNiIgKwotICAgICJcMTIyXHVmZmM2XDEyM1x1ZmZjNlwxMjRcdWZmYzZcMTI1XHVmZmM2XDEyNlx1ZmZjNlwxMjdcdWZmYzZcMTMwIiArCi0gICAgIlx1ZmZjNlwxMzFcdWZmYzZcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZiZlwwMTBcdWZmYmZcMDExXHVmZmJmIiArCi0gICAgIlwwMTJcdWZmYmZcMDI0XHVmZmJmXDAyNVx1ZmZiZlwwMjdcdWZmYmZcMDMwXHVmZmJmXDAzM1x1ZmZiZlwwMzQiICsKLSAgICAiXHVmZmJmXDAzNlx1ZmZiZlwwMzdcdWZmYmZcMDQwXHVmZmJmXDA0MVx1ZmZiZlwwNDJcdWZmYmZcMDQzXHVmZmJmIiArCi0gICAgIlwwNDRcdWZmYmZcMDQ1XHVmZmJmXDA0Nlx1ZmZiZlwwNDdcdWZmYmZcMDUwXHVmZmJmXDA1MVx1ZmZiZlwwNTIiICsKLSAgICAiXHVmZmJmXDA2MVx1ZmZiZlwwNjJcdWZmYmZcMDYzXHVmZmJmXDA2NFx1ZmZiZlwwNjVcdWZmYmZcMDY2XHVmZmJmIiArCi0gICAgIlwwNjdcdWZmYmZcMDcwXHVmZmJmXDA3MVx1ZmZiZlwwNzNcdWZmYmZcMDc0XHVmZmJmXDA3NVx1ZmZiZlwwNzYiICsKLSAgICAiXHVmZmJmXDA3N1x1ZmZiZlwxMDBcdWZmYmZcMTAxXHVmZmJmXDEwMlx1ZmZiZlwxMDNcdWZmYmZcMTA0XHVmZmJmIiArCi0gICAgIlwxMDVcdWZmYmZcMTA2XHVmZmJmXDEwN1x1ZmZiZlwxMTBcdWZmYmZcMTExXHVmZmJmXDExMlx1ZmZiZlwxMTMiICsKLSAgICAiXHVmZmJmXDExNFx1ZmZiZlwxMTVcdWZmYmZcMTE2XHVmZmJmXDExN1x1ZmZiZlwxMjBcdWZmYmZcMTIxXHVmZmJmIiArCi0gICAgIlwxMjJcdWZmYmZcMTIzXHVmZmJmXDEyNFx1ZmZiZlwxMjVcdWZmYmZcMTI2XHVmZmJmXDEyN1x1ZmZiZlwxMzAiICsKLSAgICAiXHVmZmJmXDEzMVx1ZmZiZlwwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmM5XDAxMFx1ZmZjOVwwMTFcdWZmYzkiICsKLSAgICAiXDAxMlx1ZmZjOVwwMjRcdWZmYzlcMDI1XHVmZmM5XDAyN1x1ZmZjOVwwMzBcdWZmYzlcMDMzXHVmZmM5XDAzNCIgKwotICAgICJcdWZmYzlcMDM2XHVmZmM5XDAzN1x1ZmZjOVwwNDBcdWZmYzlcMDQxXHVmZmM5XDA0Mlx1ZmZjOVwwNDNcdWZmYzkiICsKLSAgICAiXDA0NFx1ZmZjOVwwNDVcdWZmYzlcMDQ2XHVmZmM5XDA0N1x1ZmZjOVwwNTBcdWZmYzlcMDUxXHVmZmM5XDA1MiIgKwotICAgICJcdWZmYzlcMDYxXHVmZmM5XDA2Mlx1ZmZjOVwwNjNcdWZmYzlcMDY0XHVmZmM5XDA2NVx1ZmZjOVwwNjZcdWZmYzkiICsKLSAgICAiXDA2N1x1ZmZjOVwwNzBcdWZmYzlcMDcxXHVmZmM5XDA3M1x1ZmZjOVwwNzRcdWZmYzlcMDc1XHVmZmM5XDA3NiIgKwotICAgICJcdWZmYzlcMDc3XHVmZmM5XDEwMFx1ZmZjOVwxMDFcdWZmYzlcMTAyXHVmZmM5XDEwM1x1ZmZjOVwxMDRcdWZmYzkiICsKLSAgICAiXDEwNVx1ZmZjOVwxMDZcdWZmYzlcMTA3XHVmZmM5XDExMFx1ZmZjOVwxMTFcdWZmYzlcMTEyXHVmZmM5XDExMyIgKwotICAgICJcdWZmYzlcMTE0XHVmZmM5XDExNVx1ZmZjOVwxMTZcdWZmYzlcMTE3XHVmZmM5XDEyMFx1ZmZjOVwxMjFcdWZmYzkiICsKLSAgICAiXDEyMlx1ZmZjOVwxMjNcdWZmYzlcMTI0XHVmZmM5XDEyNVx1ZmZjOVwxMjZcdWZmYzlcMTI3XHVmZmM5XDEzMCIgKwotICAgICJcdWZmYzlcMTMxXHVmZmM5XDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmYzNcMDEwXHVmZmMzXDAxMVx1ZmZjMyIgKwotICAgICJcMDEyXHVmZmMzXDAyNFx1ZmZjM1wwMjVcdWZmYzNcMDI3XHVmZmMzXDAzMFx1ZmZjM1wwMzNcdWZmYzNcMDM0IiArCi0gICAgIlx1ZmZjM1wwMzZcdWZmYzNcMDM3XHVmZmMzXDA0MFx1ZmZjM1wwNDFcdWZmYzNcMDQyXHVmZmMzXDA0M1x1ZmZjMyIgKwotICAgICJcMDQ0XHVmZmMzXDA0NVx1ZmZjM1wwNDZcdWZmYzNcMDQ3XHVmZmMzXDA1MFx1ZmZjM1wwNTFcdWZmYzNcMDUyIiArCi0gICAgIlx1ZmZjM1wwNjFcdWZmYzNcMDYyXHVmZmMzXDA2M1x1ZmZjM1wwNjRcdWZmYzNcMDY1XHVmZmMzXDA2Nlx1ZmZjMyIgKwotICAgICJcMDY3XHVmZmMzXDA3MFx1ZmZjM1wwNzFcdWZmYzNcMDczXHVmZmMzXDA3NFx1ZmZjM1wwNzVcdWZmYzNcMDc2IiArCi0gICAgIlx1ZmZjM1wwNzdcdWZmYzNcMTAwXHVmZmMzXDEwMVx1ZmZjM1wxMDJcdWZmYzNcMTAzXHVmZmMzXDEwNFx1ZmZjMyIgKwotICAgICJcMTA1XHVmZmMzXDEwNlx1ZmZjM1wxMDdcdWZmYzNcMTEwXHVmZmMzXDExMVx1ZmZjM1wxMTJcdWZmYzNcMTEzIiArCi0gICAgIlx1ZmZjM1wxMTRcdWZmYzNcMTE1XHVmZmMzXDExNlx1ZmZjM1wxMTdcdWZmYzNcMTIwXHVmZmMzXDEyMVx1ZmZjMyIgKwotICAgICJcMTIyXHVmZmMzXDEyM1x1ZmZjM1wxMjRcdWZmYzNcMTI1XHVmZmMzXDEyNlx1ZmZjM1wxMjdcdWZmYzNcMTMwIiArCi0gICAgIlx1ZmZjM1wxMzFcdWZmYzNcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZjYVwwMTBcdWZmY2FcMDExXHVmZmNhIiArCi0gICAgIlwwMTJcdWZmY2FcMDI0XHVmZmNhXDAyNVx1ZmZjYVwwMjdcdWZmY2FcMDMwXHVmZmNhXDAzM1x1ZmZjYVwwMzQiICsKLSAgICAiXHVmZmNhXDAzNlx1ZmZjYVwwMzdcdWZmY2FcMDQwXHVmZmNhXDA0MVx1ZmZjYVwwNDJcdWZmY2FcMDQzXHVmZmNhIiArCi0gICAgIlwwNDRcdWZmY2FcMDQ1XHVmZmNhXDA0Nlx1ZmZjYVwwNDdcdWZmY2FcMDUwXHVmZmNhXDA1MVx1ZmZjYVwwNTIiICsKLSAgICAiXHVmZmNhXDA2MVx1ZmZjYVwwNjJcdWZmY2FcMDYzXHVmZmNhXDA2NFx1ZmZjYVwwNjVcdWZmY2FcMDY2XHVmZmNhIiArCi0gICAgIlwwNjdcdWZmY2FcMDcwXHVmZmNhXDA3MVx1ZmZjYVwwNzNcdWZmY2FcMDc0XHVmZmNhXDA3NVx1ZmZjYVwwNzYiICsKLSAgICAiXHVmZmNhXDA3N1x1ZmZjYVwxMDBcdWZmY2FcMTAxXHVmZmNhXDEwMlx1ZmZjYVwxMDNcdWZmY2FcMTA0XHVmZmNhIiArCi0gICAgIlwxMDVcdWZmY2FcMTA2XHVmZmNhXDEwN1x1ZmZjYVwxMTBcdWZmY2FcMTExXHVmZmNhXDExMlx1ZmZjYVwxMTMiICsKLSAgICAiXHVmZmNhXDExNFx1ZmZjYVwxMTVcdWZmY2FcMTE2XHVmZmNhXDExN1x1ZmZjYVwxMjBcdWZmY2FcMTIxXHVmZmNhIiArCi0gICAgIlwxMjJcdWZmY2FcMTIzXHVmZmNhXDEyNFx1ZmZjYVwxMjVcdWZmY2FcMTI2XHVmZmNhXDEyN1x1ZmZjYVwxMzAiICsKLSAgICAiXHVmZmNhXDEzMVx1ZmZjYVwwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmM0XDAxMFx1ZmZjNFwwMTFcdWZmYzQiICsKLSAgICAiXDAxMlx1ZmZjNFwwMjRcdWZmYzRcMDI1XHVmZmM0XDAyN1x1ZmZjNFwwMzBcdWZmYzRcMDMzXHVmZmM0XDAzNCIgKwotICAgICJcdWZmYzRcMDM2XHVmZmM0XDAzN1x1ZmZjNFwwNDBcdWZmYzRcMDQxXHVmZmM0XDA0Mlx1ZmZjNFwwNDNcdWZmYzQiICsKLSAgICAiXDA0NFx1ZmZjNFwwNDVcdWZmYzRcMDQ2XHVmZmM0XDA0N1x1ZmZjNFwwNTBcdWZmYzRcMDUxXHVmZmM0XDA1MiIgKwotICAgICJcdWZmYzRcMDYxXHVmZmM0XDA2Mlx1ZmZjNFwwNjNcdWZmYzRcMDY0XHVmZmM0XDA2NVx1ZmZjNFwwNjZcdWZmYzQiICsKLSAgICAiXDA2N1x1ZmZjNFwwNzBcdWZmYzRcMDcxXHVmZmM0XDA3M1x1ZmZjNFwwNzRcdWZmYzRcMDc1XHVmZmM0XDA3NiIgKwotICAgICJcdWZmYzRcMDc3XHVmZmM0XDEwMFx1ZmZjNFwxMDFcdWZmYzRcMTAyXHVmZmM0XDEwM1x1ZmZjNFwxMDRcdWZmYzQiICsKLSAgICAiXDEwNVx1ZmZjNFwxMDZcdWZmYzRcMTA3XHVmZmM0XDExMFx1ZmZjNFwxMTFcdWZmYzRcMTEyXHVmZmM0XDExMyIgKwotICAgICJcdWZmYzRcMTE0XHVmZmM0XDExNVx1ZmZjNFwxMTZcdWZmYzRcMTE3XHVmZmM0XDEyMFx1ZmZjNFwxMjFcdWZmYzQiICsKLSAgICAiXDEyMlx1ZmZjNFwxMjNcdWZmYzRcMTI0XHVmZmM0XDEyNVx1ZmZjNFwxMjZcdWZmYzRcMTI3XHVmZmM0XDEzMCIgKwotICAgICJcdWZmYzRcMTMxXHVmZmM0XDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmY2RcMDEwXHVmZmNkXDAxMVx1ZmZjZCIgKwotICAgICJcMDEyXHVmZmNkXDAyNFx1ZmZjZFwwMjVcdWZmY2RcMDI3XHVmZmNkXDAzMFx1ZmZjZFwwMzNcdWZmY2RcMDM0IiArCi0gICAgIlx1ZmZjZFwwMzZcdWZmY2RcMDM3XHVmZmNkXDA0MFx1ZmZjZFwwNDFcdWZmY2RcMDQyXHVmZmNkXDA0M1x1ZmZjZCIgKwotICAgICJcMDQ0XHVmZmNkXDA0NVx1ZmZjZFwwNDZcdWZmY2RcMDQ3XHVmZmNkXDA1MFx1ZmZjZFwwNTFcdWZmY2RcMDUyIiArCi0gICAgIlx1ZmZjZFwwNjFcdWZmY2RcMDYyXHVmZmNkXDA2M1x1ZmZjZFwwNjRcdWZmY2RcMDY1XHVmZmNkXDA2Nlx1ZmZjZCIgKwotICAgICJcMDY3XHVmZmNkXDA3MFx1ZmZjZFwwNzFcdWZmY2RcMDczXHVmZmNkXDA3NFx1ZmZjZFwwNzVcdWZmY2RcMDc2IiArCi0gICAgIlx1ZmZjZFwwNzdcdWZmY2RcMTAwXHVmZmNkXDEwMVx1ZmZjZFwxMDJcdWZmY2RcMTAzXHVmZmNkXDEwNFx1ZmZjZCIgKwotICAgICJcMTA1XHVmZmNkXDEwNlx1ZmZjZFwxMDdcdWZmY2RcMTEwXHVmZmNkXDExMVx1ZmZjZFwxMTJcdWZmY2RcMTEzIiArCi0gICAgIlx1ZmZjZFwxMTRcdWZmY2RcMTE1XHVmZmNkXDExNlx1ZmZjZFwxMTdcdWZmY2RcMTIwXHVmZmNkXDEyMVx1ZmZjZCIgKwotICAgICJcMTIyXHVmZmNkXDEyM1x1ZmZjZFwxMjRcdWZmY2RcMTI1XHVmZmNkXDEyNlx1ZmZjZFwxMjdcdWZmY2RcMTMwIiArCi0gICAgIlx1ZmZjZFwxMzFcdWZmY2RcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZjY1wwMTBcdWZmY2NcMDExXHVmZmNjIiArCi0gICAgIlwwMTJcdWZmY2NcMDI0XHVmZmNjXDAyNVx1ZmZjY1wwMjdcdWZmY2NcMDMwXHVmZmNjXDAzM1x1ZmZjY1wwMzQiICsKLSAgICAiXHVmZmNjXDAzNlx1ZmZjY1wwMzdcdWZmY2NcMDQwXHVmZmNjXDA0MVx1ZmZjY1wwNDJcdWZmY2NcMDQzXHVmZmNjIiArCi0gICAgIlwwNDRcdWZmY2NcMDQ1XHVmZmNjXDA0Nlx1ZmZjY1wwNDdcdWZmY2NcMDUwXHVmZmNjXDA1MVx1ZmZjY1wwNTIiICsKLSAgICAiXHVmZmNjXDA2MVx1ZmZjY1wwNjJcdWZmY2NcMDYzXHVmZmNjXDA2NFx1ZmZjY1wwNjVcdWZmY2NcMDY2XHVmZmNjIiArCi0gICAgIlwwNjdcdWZmY2NcMDcwXHVmZmNjXDA3MVx1ZmZjY1wwNzNcdWZmY2NcMDc0XHVmZmNjXDA3NVx1ZmZjY1wwNzYiICsKLSAgICAiXHVmZmNjXDA3N1x1ZmZjY1wxMDBcdWZmY2NcMTAxXHVmZmNjXDEwMlx1ZmZjY1wxMDNcdWZmY2NcMTA0XHVmZmNjIiArCi0gICAgIlwxMDVcdWZmY2NcMTA2XHVmZmNjXDEwN1x1ZmZjY1wxMTBcdWZmY2NcMTExXHVmZmNjXDExMlx1ZmZjY1wxMTMiICsKLSAgICAiXHVmZmNjXDExNFx1ZmZjY1wxMTVcdWZmY2NcMTE2XHVmZmNjXDExN1x1ZmZjY1wxMjBcdWZmY2NcMTIxXHVmZmNjIiArCi0gICAgIlwxMjJcdWZmY2NcMTIzXHVmZmNjXDEyNFx1ZmZjY1wxMjVcdWZmY2NcMTI2XHVmZmNjXDEyN1x1ZmZjY1wxMzAiICsKLSAgICAiXHVmZmNjXDEzMVx1ZmZjY1wwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmNiXDAxMFx1ZmZjYlwwMTFcdWZmY2IiICsKLSAgICAiXDAxMlx1ZmZjYlwwMjRcdWZmY2JcMDI1XHVmZmNiXDAyN1x1ZmZjYlwwMzBcdWZmY2JcMDMzXHVmZmNiXDAzNCIgKwotICAgICJcdWZmY2JcMDM2XHVmZmNiXDAzN1x1ZmZjYlwwNDBcdWZmY2JcMDQxXHVmZmNiXDA0Mlx1ZmZjYlwwNDNcdWZmY2IiICsKLSAgICAiXDA0NFx1ZmZjYlwwNDVcdWZmY2JcMDQ2XHVmZmNiXDA0N1x1ZmZjYlwwNTBcdWZmY2JcMDUxXHVmZmNiXDA1MiIgKwotICAgICJcdWZmY2JcMDYxXHVmZmNiXDA2Mlx1ZmZjYlwwNjNcdWZmY2JcMDY0XHVmZmNiXDA2NVx1ZmZjYlwwNjZcdWZmY2IiICsKLSAgICAiXDA2N1x1ZmZjYlwwNzBcdWZmY2JcMDcxXHVmZmNiXDA3M1x1ZmZjYlwwNzRcdWZmY2JcMDc1XHVmZmNiXDA3NiIgKwotICAgICJcdWZmY2JcMDc3XHVmZmNiXDEwMFx1ZmZjYlwxMDFcdWZmY2JcMTAyXHVmZmNiXDEwM1x1ZmZjYlwxMDRcdWZmY2IiICsKLSAgICAiXDEwNVx1ZmZjYlwxMDZcdWZmY2JcMTA3XHVmZmNiXDExMFx1ZmZjYlwxMTFcdWZmY2JcMTEyXHVmZmNiXDExMyIgKwotICAgICJcdWZmY2JcMTE0XHVmZmNiXDExNVx1ZmZjYlwxMTZcdWZmY2JcMTE3XHVmZmNiXDEyMFx1ZmZjYlwxMjFcdWZmY2IiICsKLSAgICAiXDEyMlx1ZmZjYlwxMjNcdWZmY2JcMTI0XHVmZmNiXDEyNVx1ZmZjYlwxMjZcdWZmY2JcMTI3XHVmZmNiXDEzMCIgKwotICAgICJcdWZmY2JcMTMxXHVmZmNiXDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzZcMDExXDEzNCIgKwotICAgICJcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzM1wwNzFcMDM0IiArCi0gICAgIlwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0XDA0M1wwNDEiICsKLSAgICAiXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTFcMDY2XDA1MiIgKwotICAgICJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyIiArCi0gICAgIlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzYiICsKLSAgICAiXDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMSIgKwotICAgICJcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzIiArCi0gICAgIlwxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxXDEyMVwwNTYiICsKLSAgICAiXDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjdcMTA0XDEzMCIgKwotICAgICJcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMjAwXDAwNlx1ZmZjMlwwMTBcdWZmYzJcMDExXHVmZmMyIiArCi0gICAgIlwwMTJcdWZmYzJcMDI0XHVmZmMyXDAyNVx1ZmZjMlwwMjdcdWZmYzJcMDMwXHVmZmMyXDAzM1x1ZmZjMlwwMzQiICsKLSAgICAiXHVmZmMyXDAzNlx1ZmZjMlwwMzdcdWZmYzJcMDQwXHVmZmMyXDA0MVx1ZmZjMlwwNDJcdWZmYzJcMDQzXHVmZmMyIiArCi0gICAgIlwwNDRcdWZmYzJcMDQ1XHVmZmMyXDA0Nlx1ZmZjMlwwNDdcdWZmYzJcMDUwXHVmZmMyXDA1MVx1ZmZjMlwwNTIiICsKLSAgICAiXHVmZmMyXDA2MVx1ZmZjMlwwNjJcdWZmYzJcMDYzXHVmZmMyXDA2NFx1ZmZjMlwwNjVcdWZmYzJcMDY2XHVmZmMyIiArCi0gICAgIlwwNjdcdWZmYzJcMDcwXHVmZmMyXDA3MVx1ZmZjMlwwNzNcdWZmYzJcMDc0XHVmZmMyXDA3NVx1ZmZjMlwwNzYiICsKLSAgICAiXHVmZmMyXDA3N1x1ZmZjMlwxMDBcdWZmYzJcMTAxXHVmZmMyXDEwMlx1ZmZjMlwxMDNcdWZmYzJcMTA0XHVmZmMyIiArCi0gICAgIlwxMDVcdWZmYzJcMTA2XHVmZmMyXDEwN1x1ZmZjMlwxMTBcdWZmYzJcMTExXHVmZmMyXDExMlx1ZmZjMlwxMTMiICsKLSAgICAiXHVmZmMyXDExNFx1ZmZjMlwxMTVcdWZmYzJcMTE2XHVmZmMyXDExN1x1ZmZjMlwxMjBcdWZmYzJcMTIxXHVmZmMyIiArCi0gICAgIlwxMjJcdWZmYzJcMTIzXHVmZmMyXDEyNFx1ZmZjMlwxMjVcdWZmYzJcMTI2XHVmZmMyXDEyN1x1ZmZjMlwxMzAiICsKLSAgICAiXHVmZmMyXDEzMVx1ZmZjMlwwMDFcMDAyXDAwMFwyMDBcMDA2XHVmZmM3XDAxMFx1ZmZjN1wwMTFcdWZmYzciICsKLSAgICAiXDAxMlx1ZmZjN1wwMjRcdWZmYzdcMDI1XHVmZmM3XDAyN1x1ZmZjN1wwMzBcdWZmYzdcMDMzXHVmZmM3XDAzNCIgKwotICAgICJcdWZmYzdcMDM2XHVmZmM3XDAzN1x1ZmZjN1wwNDBcdWZmYzdcMDQxXHVmZmM3XDA0Mlx1ZmZjN1wwNDNcdWZmYzciICsKLSAgICAiXDA0NFx1ZmZjN1wwNDVcdWZmYzdcMDQ2XHVmZmM3XDA0N1x1ZmZjN1wwNTBcdWZmYzdcMDUxXHVmZmM3XDA1MiIgKwotICAgICJcdWZmYzdcMDYxXHVmZmM3XDA2Mlx1ZmZjN1wwNjNcdWZmYzdcMDY0XHVmZmM3XDA2NVx1ZmZjN1wwNjZcdWZmYzciICsKLSAgICAiXDA2N1x1ZmZjN1wwNzBcdWZmYzdcMDcxXHVmZmM3XDA3M1x1ZmZjN1wwNzRcdWZmYzdcMDc1XHVmZmM3XDA3NiIgKwotICAgICJcdWZmYzdcMDc3XHVmZmM3XDEwMFx1ZmZjN1wxMDFcdWZmYzdcMTAyXHVmZmM3XDEwM1x1ZmZjN1wxMDRcdWZmYzciICsKLSAgICAiXDEwNVx1ZmZjN1wxMDZcdWZmYzdcMTA3XHVmZmM3XDExMFx1ZmZjN1wxMTFcdWZmYzdcMTEyXHVmZmM3XDExMyIgKwotICAgICJcdWZmYzdcMTE0XHVmZmM3XDExNVx1ZmZjN1wxMTZcdWZmYzdcMTE3XHVmZmM3XDEyMFx1ZmZjN1wxMjFcdWZmYzciICsKLSAgICAiXDEyMlx1ZmZjN1wxMjNcdWZmYzdcMTI0XHVmZmM3XDEyNVx1ZmZjN1wxMjZcdWZmYzdcMTI3XHVmZmM3XDEzMCIgKwotICAgICJcdWZmYzdcMTMxXHVmZmM3XDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmYzBcMDEwXHVmZmMwXDAxMVx1ZmZjMCIgKwotICAgICJcMDEyXHVmZmMwXDAyNFx1ZmZjMFwwMjVcdWZmYzBcMDI3XHVmZmMwXDAzMFx1ZmZjMFwwMzNcdWZmYzBcMDM0IiArCi0gICAgIlx1ZmZjMFwwMzZcdWZmYzBcMDM3XHVmZmMwXDA0MFx1ZmZjMFwwNDFcdWZmYzBcMDQyXHVmZmMwXDA0M1x1ZmZjMCIgKwotICAgICJcMDQ0XHVmZmMwXDA0NVx1ZmZjMFwwNDZcdWZmYzBcMDQ3XHVmZmMwXDA1MFx1ZmZjMFwwNTFcdWZmYzBcMDUyIiArCi0gICAgIlx1ZmZjMFwwNjFcdWZmYzBcMDYyXHVmZmMwXDA2M1x1ZmZjMFwwNjRcdWZmYzBcMDY1XHVmZmMwXDA2Nlx1ZmZjMCIgKwotICAgICJcMDY3XHVmZmMwXDA3MFx1ZmZjMFwwNzFcdWZmYzBcMDczXHVmZmMwXDA3NFx1ZmZjMFwwNzVcdWZmYzBcMDc2IiArCi0gICAgIlx1ZmZjMFwwNzdcdWZmYzBcMTAwXHVmZmMwXDEwMVx1ZmZjMFwxMDJcdWZmYzBcMTAzXHVmZmMwXDEwNFx1ZmZjMCIgKwotICAgICJcMTA1XHVmZmMwXDEwNlx1ZmZjMFwxMDdcdWZmYzBcMTEwXHVmZmMwXDExMVx1ZmZjMFwxMTJcdWZmYzBcMTEzIiArCi0gICAgIlx1ZmZjMFwxMTRcdWZmYzBcMTE1XHVmZmMwXDExNlx1ZmZjMFwxMTdcdWZmYzBcMTIwXHVmZmMwXDEyMVx1ZmZjMCIgKwotICAgICJcMTIyXHVmZmMwXDEyM1x1ZmZjMFwxMjRcdWZmYzBcMTI1XHVmZmMwXDEyNlx1ZmZjMFwxMjdcdWZmYzBcMTMwIiArCi0gICAgIlx1ZmZjMFwxMzFcdWZmYzBcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NlwwMTFcMTM0IiArCi0gICAgIlwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzXDA3MVwwMzQiICsKLSAgICAiXDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDRcMDQzXDA0MSIgKwotICAgICJcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MVwwNjZcMDUyIiArCi0gICAgIlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzIiICsKLSAgICAiXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NiIgKwotICAgICJcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxIiArCi0gICAgIlwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTMiICsKLSAgICAiXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDFcMTIxXDA1NiIgKwotICAgICJcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyN1wxMDRcMTMwIiArCi0gICAgIlwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzQiICsKLSAgICAiXDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNCIgKwotICAgICJcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxIiArCi0gICAgIlwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTIiICsKLSAgICAiXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MiIgKwotICAgICJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2IiArCi0gICAgIlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDEiICsKLSAgICAiXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExMyIgKwotICAgICJcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2IiArCi0gICAgIlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzAiICsKLSAgICAiXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDIwMFwwMDZcdWZmYzhcMDEwXHVmZmM4XDAxMVx1ZmZjOCIgKwotICAgICJcMDEyXHVmZmM4XDAyNFx1ZmZjOFwwMjVcdWZmYzhcMDI3XHVmZmM4XDAzMFx1ZmZjOFwwMzNcdWZmYzhcMDM0IiArCi0gICAgIlx1ZmZjOFwwMzZcdWZmYzhcMDM3XHVmZmM4XDA0MFx1ZmZjOFwwNDFcdWZmYzhcMDQyXHVmZmM4XDA0M1x1ZmZjOCIgKwotICAgICJcMDQ0XHVmZmM4XDA0NVx1ZmZjOFwwNDZcdWZmYzhcMDQ3XHVmZmM4XDA1MFx1ZmZjOFwwNTFcdWZmYzhcMDUyIiArCi0gICAgIlx1ZmZjOFwwNjFcdWZmYzhcMDYyXHVmZmM4XDA2M1x1ZmZjOFwwNjRcdWZmYzhcMDY1XHVmZmM4XDA2Nlx1ZmZjOCIgKwotICAgICJcMDY3XHVmZmM4XDA3MFx1ZmZjOFwwNzFcdWZmYzhcMDczXHVmZmM4XDA3NFx1ZmZjOFwwNzVcdWZmYzhcMDc2IiArCi0gICAgIlx1ZmZjOFwwNzdcdWZmYzhcMTAwXHVmZmM4XDEwMVx1ZmZjOFwxMDJcdWZmYzhcMTAzXHVmZmM4XDEwNFx1ZmZjOCIgKwotICAgICJcMTA1XHVmZmM4XDEwNlx1ZmZjOFwxMDdcdWZmYzhcMTEwXHVmZmM4XDExMVx1ZmZjOFwxMTJcdWZmYzhcMTEzIiArCi0gICAgIlx1ZmZjOFwxMTRcdWZmYzhcMTE1XHVmZmM4XDExNlx1ZmZjOFwxMTdcdWZmYzhcMTIwXHVmZmM4XDEyMVx1ZmZjOCIgKwotICAgICJcMTIyXHVmZmM4XDEyM1x1ZmZjOFwxMjRcdWZmYzhcMTI1XHVmZmM4XDEyNlx1ZmZjOFwxMjdcdWZmYzhcMTMwIiArCi0gICAgIlx1ZmZjOFwxMzFcdWZmYzhcMDAxXDAwMlwwMDBcMDI0XDAwMlx1ZmZlYVwwMDVcdWZmZWFcMDA3XHVmZmVhIiArCi0gICAgIlwwMzJcdWZmZWFcMTAwXHVmZmVhXDEwMVx1ZmZlYVwxMDdcdWZmZWFcMTEwXHVmZmVhXDExMVx1ZmZlYVwwMDEiICsKLSAgICAiXDAwMlwwMDBcMDI0XDAwMlx1ZmZlYlwwMDVcdWZmZWJcMDA3XHVmZmViXDAzMlx1ZmZlYlwxMDBcdWZmZWIiICsKLSAgICAiXDEwMVx1ZmZlYlwxMDdcdWZmZWJcMTEwXHVmZmViXDExMVx1ZmZlYlwwMDFcMDAyXDAwMFwwMjRcMDAyIiArCi0gICAgIlx1ZmZlY1wwMDVcdWZmZWNcMDA3XHVmZmVjXDAzMlx1ZmZlY1wxMDBcdWZmZWNcMTAxXHVmZmVjXDEwN1x1ZmZlYyIgKwotICAgICJcMTEwXHVmZmVjXDExMVx1ZmZlY1wwMDFcMDAyXDAwMFwxNDZcMDEyXHVmZmExXDAzNlx1ZmZhMVwwMzciICsKLSAgICAiXHVmZmExXDA0MFx1ZmZhMVwwNDFcdWZmYTFcMDQyXHVmZmExXDA0M1x1ZmZhMVwwNDRcdWZmYTFcMDQ1XHVmZmExIiArCi0gICAgIlwwNDZcdWZmYTFcMDQ3XHVmZmExXDA1MFx1ZmZhMVwwNTFcdWZmYTFcMDUyXHVmZmExXDA2MVx1ZmZhMVwwNjIiICsKLSAgICAiXHVmZmExXDA2M1x1ZmZhMVwwNjRcdWZmYTFcMDY1XHVmZmExXDA2Nlx1ZmZhMVwwNjdcdWZmYTFcMDcwXHVmZmExIiArCi0gICAgIlwwNzFcdWZmYTFcMDczXHVmZmExXDA3NFx1ZmZhMVwwNzVcdWZmYTFcMDc2XHVmZmExXDA3N1x1ZmZhMVwxMDAiICsKLSAgICAiXHVmZmExXDEwMVx1ZmZhMVwxMDJcdWZmYTFcMTAzXHVmZmExXDEwNFx1ZmZhMVwxMDVcdWZmYTFcMTA2XHVmZmExIiArCi0gICAgIlwxMDdcdWZmYTFcMTEwXHVmZmExXDExMVx1ZmZhMVwxMTJcdWZmYTFcMTEzXHVmZmExXDExNFx1ZmZhMVwxMTUiICsKLSAgICAiXHVmZmExXDExNlx1ZmZhMVwxMTdcdWZmYTFcMTIwXHVmZmExXDEyMVx1ZmZhMVwxMjJcdWZmYTFcMTIzXHVmZmExIiArCi0gICAgIlwxMjRcdWZmYTFcMTMxXHVmZmExXDAwMVwwMDJcMDAwXDAwNFwwNzJcdTAxNDBcMDAxXDAwMlwwMDAiICsKLSAgICAiXDE0NlwwMTJcMjMzXDAzNlwyMzJcMDM3XDI0MFwwNDBcdTAxMjRcMDQxXDI0MVwwNDJcMjM3IiArCi0gICAgIlwwNDNcMjM2XDA0NFwyNTBcMDQ1XDIyNlwwNDZcMjQ2XDA0N1wyNDRcMDUwXDIyNVwwNTEiICsKLSAgICAiXDI0MlwwNTJcMjQzXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNSIgKwotICAgICJcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1IiArCi0gICAgIlwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDUiICsKLSAgICAiXDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMiIgKwotICAgICJcdTAxNDZcMTEzXHUwMTQ1XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MSIgKwotICAgICJcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMzFcMTIzXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTRcMDAyXHVmZjgxXDAwNVx1ZmY4MVwwMDdcdWZmODFcMDEwXHUwMTRlXDAxMVx1ZmY4MVwwMTJcdTAxNGMiICsKLSAgICAiXDAxM1x1ZmY4MVwwMTRcdWZmODFcMDE1XHVmZjgxXDAxNlx1ZmY4MVwwMTdcdWZmODFcMDIwXHVmZjgxXDAyMSIgKwotICAgICJcdWZmODFcMDIyXHVmZjgxXDAyM1x1ZmY4MVwwMzJcdWZmODFcMDM1XHUwMTRmXDA1M1x1ZmY4MVwwNTRcdWZmODEiICsKLSAgICAiXDA1NVx1ZmY4MVwwNTZcdWZmODFcMDU3XHVmZjgxXDA2MFx1ZmY4MVwwNjFcdWZmODFcMDYyXHVmZjgxXDA2MyIgKwotICAgICJcdWZmODFcMDY0XHVmZjgxXDA2NVx1ZmY4MVwwNjZcdWZmODFcMDY3XHVmZjgxXDA3NVx1ZmY4MVwxMDBcdWZmODEiICsKLSAgICAiXDEwMVx1ZmY4MVwxMDJcdWZmODFcMTA3XHVmZjgxXDExMFx1ZmY4MVwxMTFcdWZmODFcMDAxXDAwMlwwMDAiICsKLSAgICAiXDExNFwwMDJcdWZmN2FcMDA1XHVmZjdhXDAwN1x1ZmY3YVwwMTBcdWZmN2FcMDExXHVmZjdhXDAxMlx1ZmY3YSIgKwotICAgICJcMDEzXHVmZjdhXDAxNFx1ZmY3YVwwMTVcdWZmN2FcMDE2XHVmZjdhXDAxN1x1ZmY3YVwwMjBcdWZmN2FcMDIxIiArCi0gICAgIlx1ZmY3YVwwMjJcdWZmN2FcMDIzXHVmZjdhXDAzMlx1ZmY3YVwwMzVcdWZmN2FcMDUzXHVmZjdhXDA1NFx1ZmY3YSIgKwotICAgICJcMDU1XHVmZjdhXDA1Nlx1ZmY3YVwwNTdcdWZmN2FcMDYwXHVmZjdhXDA2MVx1ZmY3YVwwNjJcdWZmN2FcMDYzIiArCi0gICAgIlx1ZmY3YVwwNjRcdWZmN2FcMDY1XHVmZjdhXDA2Nlx1ZmY3YVwwNjdcdWZmN2FcMDc1XHVmZjdhXDEwMFx1ZmY3YSIgKwotICAgICJcMTAxXHVmZjdhXDEwMlx1ZmY3YVwxMDdcdWZmN2FcMTEwXHVmZjdhXDExMVx1ZmY3YVwwMDFcMDAyXDAwMCIgKwotICAgICJcMTEyXDAwMlx1ZmZkNlwwMDVcdWZmZDZcMDA3XHVmZmQ2XDAxMFx1ZmZkNlwwMTFcdWZmZDZcMDEyXHVmZmQ2IiArCi0gICAgIlwwMTNcdWZmZDZcMDE0XHVmZmQ2XDAxNVx1ZmZkNlwwMTZcdWZmZDZcMDE3XHVmZmQ2XDAyMFx1ZmZkNlwwMjEiICsKLSAgICAiXHVmZmQ2XDAyMlx1ZmZkNlwwMjNcdWZmZDZcMDMyXHVmZmQ2XDA1M1x1ZmZkNlwwNTRcdWZmZDZcMDU1XHVmZmQ2IiArCi0gICAgIlwwNTZcdWZmZDZcMDU3XHVmZmQ2XDA2MFx1ZmZkNlwwNjFcdWZmZDZcMDYyXHVmZmQ2XDA2M1x1ZmZkNlwwNjQiICsKLSAgICAiXHVmZmQ2XDA2NVx1ZmZkNlwwNjZcdWZmZDZcMDY3XHVmZmQ2XDA3NVx1ZmZkNlwxMDBcdWZmZDZcMTAxXHVmZmQ2IiArCi0gICAgIlwxMDJcdWZmZDZcMTA3XHVmZmQ2XDExMFx1ZmZkNlwxMTFcdWZmZDZcMDAxXDAwMlwwMDBcMTE0XDAwMiIgKwotICAgICJcdWZmN2JcMDA1XHVmZjdiXDAwN1x1ZmY3YlwwMTBcdWZmN2JcMDExXHVmZjdiXDAxMlx1ZmY3YlwwMTNcdWZmN2IiICsKLSAgICAiXDAxNFx1ZmY3YlwwMTVcdWZmN2JcMDE2XHVmZjdiXDAxN1x1ZmY3YlwwMjBcdWZmN2JcMDIxXHVmZjdiXDAyMiIgKwotICAgICJcdWZmN2JcMDIzXHVmZjdiXDAzMlx1ZmY3YlwwMzVcdWZmN2JcMDUzXHVmZjdiXDA1NFx1ZmY3YlwwNTVcdWZmN2IiICsKLSAgICAiXDA1Nlx1ZmY3YlwwNTdcdWZmN2JcMDYwXHVmZjdiXDA2MVx1ZmY3YlwwNjJcdWZmN2JcMDYzXHVmZjdiXDA2NCIgKwotICAgICJcdWZmN2JcMDY1XHVmZjdiXDA2Nlx1ZmY3YlwwNjdcdWZmN2JcMDc1XHVmZjdiXDEwMFx1ZmY3YlwxMDFcdWZmN2IiICsKLSAgICAiXDEwMlx1ZmY3YlwxMDdcdWZmN2JcMTEwXHVmZjdiXDExMVx1ZmY3YlwwMDFcMDAyXDAwMFwwMDZcMDA2IiArCi0gICAgIlx1MDE0YVwwMzFcdWZmMjBcMDAxXDAwMlwwMDBcMDA2XDAwNlx1MDE0OFwwMzFcdWZmMjFcMDAxXDAwMiIgKwotICAgICJcMDAwXDEyMFwwMDJcdWZmNzhcMDA1XHVmZjc4XDAwN1x1ZmY3OFwwMTBcdWZmNzhcMDExXHVmZjc4XDAxMiIgKwotICAgICJcdWZmNzhcMDEzXHVmZjc4XDAxNFx1ZmY3OFwwMTVcdWZmNzhcMDE2XHVmZjc4XDAxN1x1ZmY3OFwwMjBcdWZmNzgiICsKLSAgICAiXDAyMVx1ZmY3OFwwMjJcdWZmNzhcMDIzXHVmZjc4XDAzMlx1ZmY3OFwwMzVcdWZmNzhcMDUzXHVmZjc4XDA1NCIgKwotICAgICJcdWZmNzhcMDU1XHVmZjc4XDA1Nlx1ZmY3OFwwNTdcdWZmNzhcMDYwXHVmZjc4XDA2MVx1ZmY3OFwwNjJcdWZmNzgiICsKLSAgICAiXDA2M1x1ZmY3OFwwNjRcdWZmNzhcMDY1XHVmZjc4XDA2Nlx1ZmY3OFwwNjdcdWZmNzhcMDcxXHVmZjc4XDA3MyIgKwotICAgICJcdWZmNzhcMDc1XHVmZjc4XDEwMFx1ZmY3OFwxMDFcdWZmNzhcMTAyXHVmZjc4XDEwN1x1ZmY3OFwxMTBcdWZmNzgiICsKLSAgICAiXDExMVx1ZmY3OFwwMDFcMDAyXDAwMFwwMDRcMDA3XHUwMTQ5XDAwMVwwMDJcMDAwXDExMlwwMDIiICsKLSAgICAiXHVmZjdmXDAwNVx1ZmY3ZlwwMDdcdWZmN2ZcMDEwXHVmZjdmXDAxMVx1ZmY3ZlwwMTJcdWZmN2ZcMDEzXHVmZjdmIiArCi0gICAgIlwwMTRcdWZmN2ZcMDE1XHVmZjdmXDAxNlx1ZmY3ZlwwMTdcdWZmN2ZcMDIwXHVmZjdmXDAyMVx1ZmY3ZlwwMjIiICsKLSAgICAiXHVmZjdmXDAyM1x1ZmY3ZlwwMzJcdWZmN2ZcMDUzXHVmZjdmXDA1NFx1ZmY3ZlwwNTVcdWZmN2ZcMDU2XHVmZjdmIiArCi0gICAgIlwwNTdcdWZmN2ZcMDYwXHVmZjdmXDA2MVx1ZmY3ZlwwNjJcdWZmN2ZcMDYzXHVmZjdmXDA2NFx1ZmY3ZlwwNjUiICsKLSAgICAiXHVmZjdmXDA2Nlx1ZmY3ZlwwNjdcdWZmN2ZcMDc1XHVmZjdmXDEwMFx1ZmY3ZlwxMDFcdWZmN2ZcMTAyXHVmZjdmIiArCi0gICAgIlwxMDdcdWZmN2ZcMTEwXHVmZjdmXDExMVx1ZmY3ZlwwMDFcMDAyXDAwMFwwMDRcMDA3XHUwMTRiXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMTRcMDAyXHVmZjc5XDAwNVx1ZmY3OVwwMDdcdWZmNzlcMDEwXHVmZjc5XDAxMVx1ZmY3OSIgKwotICAgICJcMDEyXHVmZjc5XDAxM1x1ZmY3OVwwMTRcdWZmNzlcMDE1XHVmZjc5XDAxNlx1ZmY3OVwwMTdcdWZmNzlcMDIwIiArCi0gICAgIlx1ZmY3OVwwMjFcdWZmNzlcMDIyXHVmZjc5XDAyM1x1ZmY3OVwwMzJcdWZmNzlcMDM1XHVmZjc5XDA1M1x1ZmY3OSIgKwotICAgICJcMDU0XHVmZjc5XDA1NVx1ZmY3OVwwNTZcdWZmNzlcMDU3XHVmZjc5XDA2MFx1ZmY3OVwwNjFcdWZmNzlcMDYyIiArCi0gICAgIlx1ZmY3OVwwNjNcdWZmNzlcMDY0XHVmZjc5XDA2NVx1ZmY3OVwwNjZcdWZmNzlcMDY3XHVmZjc5XDA3NVx1ZmY3OSIgKwotICAgICJcMTAwXHVmZjc5XDEwMVx1ZmY3OVwxMDJcdWZmNzlcMTA3XHVmZjc5XDExMFx1ZmY3OVwxMTFcdWZmNzlcMDAxIiArCi0gICAgIlwwMDJcMDAwXDExMlwwMDJcdWZmN2RcMDA1XHVmZjdkXDAwN1x1ZmY3ZFwwMTBcdWZmN2RcMDExXHVmZjdkIiArCi0gICAgIlwwMTJcdWZmN2RcMDEzXHVmZjdkXDAxNFx1ZmY3ZFwwMTVcdWZmN2RcMDE2XHVmZjdkXDAxN1x1ZmY3ZFwwMjAiICsKLSAgICAiXHVmZjdkXDAyMVx1ZmY3ZFwwMjJcdWZmN2RcMDIzXHVmZjdkXDAzMlx1ZmY3ZFwwNTNcdWZmN2RcMDU0XHVmZjdkIiArCi0gICAgIlwwNTVcdWZmN2RcMDU2XHVmZjdkXDA1N1x1ZmY3ZFwwNjBcdWZmN2RcMDYxXHVmZjdkXDA2Mlx1ZmY3ZFwwNjMiICsKLSAgICAiXHVmZjdkXDA2NFx1ZmY3ZFwwNjVcdWZmN2RcMDY2XHVmZjdkXDA2N1x1ZmY3ZFwwNzVcdWZmN2RcMTAwXHVmZjdkIiArCi0gICAgIlwxMDFcdWZmN2RcMTAyXHVmZjdkXDEwN1x1ZmY3ZFwxMTBcdWZmN2RcMTExXHVmZjdkXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTJcMDAyXHVmZjgwXDAwNVx1ZmY4MFwwMDdcdWZmODBcMDEwXHVmZjgwXDAxMVx1ZmY4MFwwMTJcdWZmODAiICsKLSAgICAiXDAxM1x1ZmY4MFwwMTRcdWZmODBcMDE1XHVmZjgwXDAxNlx1ZmY4MFwwMTdcdWZmODBcMDIwXHVmZjgwXDAyMSIgKwotICAgICJcdWZmODBcMDIyXHVmZjgwXDAyM1x1ZmY4MFwwMzJcdWZmODBcMDUzXHVmZjgwXDA1NFx1ZmY4MFwwNTVcdWZmODAiICsKLSAgICAiXDA1Nlx1ZmY4MFwwNTdcdWZmODBcMDYwXHVmZjgwXDA2MVx1ZmY4MFwwNjJcdWZmODBcMDYzXHVmZjgwXDA2NCIgKwotICAgICJcdWZmODBcMDY1XHVmZjgwXDA2Nlx1ZmY4MFwwNjdcdWZmODBcMDc1XHVmZjgwXDEwMFx1ZmY4MFwxMDFcdWZmODAiICsKLSAgICAiXDEwMlx1ZmY4MFwxMDdcdWZmODBcMTEwXHVmZjgwXDExMVx1ZmY4MFwwMDFcMDAyXDAwMFwxMTJcMDAyIiArCi0gICAgIlx1ZmY3Y1wwMDVcdWZmN2NcMDA3XHVmZjdjXDAxMFx1ZmY3Y1wwMTFcdWZmN2NcMDEyXHVmZjdjXDAxM1x1ZmY3YyIgKwotICAgICJcMDE0XHVmZjdjXDAxNVx1ZmY3Y1wwMTZcdWZmN2NcMDE3XHVmZjdjXDAyMFx1ZmY3Y1wwMjFcdWZmN2NcMDIyIiArCi0gICAgIlx1ZmY3Y1wwMjNcdWZmN2NcMDMyXHVmZjdjXDA1M1x1ZmY3Y1wwNTRcdWZmN2NcMDU1XHVmZjdjXDA1Nlx1ZmY3YyIgKwotICAgICJcMDU3XHVmZjdjXDA2MFx1ZmY3Y1wwNjFcdWZmN2NcMDYyXHVmZjdjXDA2M1x1ZmY3Y1wwNjRcdWZmN2NcMDY1IiArCi0gICAgIlx1ZmY3Y1wwNjZcdWZmN2NcMDY3XHVmZjdjXDA3NVx1ZmY3Y1wxMDBcdWZmN2NcMTAxXHVmZjdjXDEwMlx1ZmY3YyIgKwotICAgICJcMTA3XHVmZjdjXDExMFx1ZmY3Y1wxMTFcdWZmN2NcMDAxXDAwMlwwMDBcMTEyXDAwMlx1ZmY3ZVwwMDUiICsKLSAgICAiXHVmZjdlXDAwN1x1ZmY3ZVwwMTBcdWZmN2VcMDExXHVmZjdlXDAxMlx1ZmY3ZVwwMTNcdWZmN2VcMDE0XHVmZjdlIiArCi0gICAgIlwwMTVcdWZmN2VcMDE2XHVmZjdlXDAxN1x1ZmY3ZVwwMjBcdWZmN2VcMDIxXHVmZjdlXDAyMlx1ZmY3ZVwwMjMiICsKLSAgICAiXHVmZjdlXDAzMlx1ZmY3ZVwwNTNcdWZmN2VcMDU0XHVmZjdlXDA1NVx1ZmY3ZVwwNTZcdWZmN2VcMDU3XHVmZjdlIiArCi0gICAgIlwwNjBcdWZmN2VcMDYxXHVmZjdlXDA2Mlx1ZmY3ZVwwNjNcdWZmN2VcMDY0XHVmZjdlXDA2NVx1ZmY3ZVwwNjYiICsKLSAgICAiXHVmZjdlXDA2N1x1ZmY3ZVwwNzVcdWZmN2VcMTAwXHVmZjdlXDEwMVx1ZmY3ZVwxMDJcdWZmN2VcMTA3XHVmZjdlIiArCi0gICAgIlwxMTBcdWZmN2VcMTExXHVmZjdlXDAwMVwwMDJcMDAwXDE0NlwwMTJcMjMzXDAzNlwyMzJcMDM3IiArCi0gICAgIlwyNDBcMDQwXDI1MlwwNDFcMjQxXDA0MlwyMzdcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjYiICsKLSAgICAiXDA0NlwyNDZcMDQ3XDI0NFwwNTBcMjI1XDA1MVwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MiIgKwotICAgICJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1IiArCi0gICAgIlwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDAiICsKLSAgICAiXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MiIgKwotICAgICJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwyNTNcMTE1IiArCi0gICAgIlwyNDdcMTE2XDI1MVwxMTdcMjI3XDEyMFwyMzRcMTIxXDIzMFwxMjJcMjQ1XDEyM1wyMzUiICsKLSAgICAiXDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMDRcMDA3XHUwMTUzXDAwMVwwMDJcMDAwIiArCi0gICAgIlwwMDRcMDA3XHVmZjVmXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNjBcMDA0XHVmZjYwXDAwNVx1ZmY2MCIgKwotICAgICJcMDA3XHVmZjYwXDAxMFx1ZmY2MFwwMTFcdWZmNjBcMDEyXHVmZjYwXDAxM1x1ZmY2MFwwMTRcdWZmNjBcMDE1IiArCi0gICAgIlx1ZmY2MFwwMTZcdWZmNjBcMDE3XHVmZjYwXDAyMFx1ZmY2MFwwMjFcdWZmNjBcMDIyXHVmZjYwXDAyM1x1ZmY2MCIgKwotICAgICJcMDI0XHVmZjYwXDAyNVx1ZmY2MFwwMzJcdWZmNjBcMDM1XHVmZjYwXDA1M1x1ZmY2MFwwNTRcdWZmNjBcMDU1IiArCi0gICAgIlx1ZmY2MFwwNTZcdWZmNjBcMDU3XHVmZjYwXDA2MFx1ZmY2MFwwNjFcdWZmNjBcMDYyXHVmZjYwXDA2M1x1ZmY2MCIgKwotICAgICJcMDY0XHVmZjYwXDA2NVx1ZmY2MFwwNjZcdWZmNjBcMDY3XHVmZjYwXDA3MVx1ZmY2MFwwNzNcdWZmNjBcMDc0IiArCi0gICAgIlx1ZmY2MFwwNzVcdWZmNjBcMTAwXHVmZjYwXDEwMVx1ZmY2MFwxMDJcdWZmNjBcMTA3XHVmZjYwXDExMFx1ZmY2MCIgKwotICAgICJcMTExXHVmZjYwXDAwMVwwMDJcMDAwXDE0NlwwMTJcMjMzXDAzNlwyMzJcMDM3XDI0MFwwNDAiICsKLSAgICAiXDI1MlwwNDFcMjQxXDA0MlwyMzdcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NiIgKwotICAgICJcMDQ3XDI0NFwwNTBcMjI1XDA1MVwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzIiArCi0gICAgIlwwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjMiICsKLSAgICAiXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMSIgKwotICAgICJcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0IiArCi0gICAgIlwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwyNTNcMTE1XDI0N1wxMTYiICsKLSAgICAiXDI1MVwxMTdcMjI3XDEyMFwyMzRcMTIxXDIzMFwxMjJcMjQ1XDEyM1wyMzVcMTI0XDE1MyIgKwotICAgICJcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMDRcMDA3XHUwMTU4XDAwMVwwMDJcMDAwXDAwNFwwMDciICsKLSAgICAiXHVmZjU3XDAwMVwwMDJcMDAwXDAwNlwwMDdcdWZmNTVcMDMyXHVmZjU1XDAwMVwwMDJcMDAwXDEzMCIgKwotICAgICJcMDAyXHVmZjU4XDAwNFx1ZmY1OFwwMDVcdWZmNThcMDA3XHVmZjU4XDAxMFx1ZmY1OFwwMTFcdWZmNThcMDEyIiArCi0gICAgIlx1ZmY1OFwwMTNcdWZmNThcMDE0XHVmZjU4XDAxNVx1ZmY1OFwwMTZcdWZmNThcMDE3XHVmZjU4XDAyMFx1ZmY1OCIgKwotICAgICJcMDIxXHVmZjU4XDAyMlx1ZmY1OFwwMjNcdWZmNThcMDI0XHVmZjU4XDAyNVx1ZmY1OFwwMzJcdWZmNThcMDM1IiArCi0gICAgIlx1ZmY1OFwwNTNcdWZmNThcMDU0XHVmZjU4XDA1NVx1ZmY1OFwwNTZcdWZmNThcMDU3XHVmZjU4XDA2MFx1ZmY1OCIgKwotICAgICJcMDYxXHVmZjU4XDA2Mlx1ZmY1OFwwNjNcdWZmNThcMDY0XHVmZjU4XDA2NVx1ZmY1OFwwNjZcdWZmNThcMDY3IiArCi0gICAgIlx1ZmY1OFwwNzFcdWZmNThcMDczXHVmZjU4XDA3NFx1ZmY1OFwwNzVcdWZmNThcMTAwXHVmZjU4XDEwMVx1ZmY1OCIgKwotICAgICJcMTAyXHVmZjU4XDEwN1x1ZmY1OFwxMTBcdWZmNThcMTExXHVmZjU4XDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZmI0XDAwNFwyMTRcMDA1XHVmZmI0XDAwN1x1ZmZiNFwwMTBcdWZmYjRcMDExXHVmZmI0XDAxMlx1ZmZiNCIgKwotICAgICJcMDEzXHVmZmI0XDAxNFx1ZmZiNFwwMTVcdWZmYjRcMDE2XHVmZmI0XDAxN1x1ZmZiNFwwMjBcdWZmYjRcMDIxIiArCi0gICAgIlx1ZmZiNFwwMjJcdWZmYjRcMDIzXHVmZmI0XDAyNFx1ZmZiNFwwMjVcdWZmYjRcMDMyXHVmZmI0XDA1M1x1ZmZiNCIgKwotICAgICJcMDU0XHVmZmI0XDA1NVx1ZmZiNFwwNTZcdWZmYjRcMDU3XHVmZmI0XDA2MFx1ZmZiNFwwNjFcdWZmYjRcMDYyIiArCi0gICAgIlx1ZmZiNFwwNjNcdWZmYjRcMDY0XHVmZmI0XDA2NVx1ZmZiNFwwNjZcdWZmYjRcMDY3XHVmZmI0XDA3MVx1ZmZiNCIgKwotICAgICJcMDczXHVmZmI0XDA3NFx1ZmZiNFwwNzVcdWZmYjRcMTAwXHVmZmI0XDEwMVx1ZmZiNFwxMDJcdWZmYjRcMTA3IiArCi0gICAgIlx1ZmZiNFwxMTBcdWZmYjRcMTExXHVmZmI0XDAwMVwwMDJcMDAwXDE1MFwwMDdcdTAxNWNcMDEyXHUwMTViIiArCi0gICAgIlwwMzZcMjMyXDAzN1wyNDBcMDQwXDI1MlwwNDFcMjQxXDA0MlwyMzdcMDQzXDIzNlwwNDQiICsKLSAgICAiXDI1MFwwNDVcMjI2XDA0NlwyNDZcMDQ3XDI0NFwwNTBcMjI1XDA1MVwyNDJcMDUyXDI0MyIgKwotICAgICJcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3IiArCi0gICAgIlwwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDMiICsKLSAgICAiXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNSIgKwotICAgICJcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2IiArCi0gICAgIlwxMTRcMjUzXDExNVwyNDdcMTE2XDI1MVwxMTdcMjI3XDEyMFwyMzRcMTIxXDIzMFwxMjIiICsKLSAgICAiXDI0NVwxMjNcMjM1XDEyNFwxNTNcMTMxXDEyM1wwMDFcMDAyXDAwMFwwMTBcMDA3XHVmZjU5IiArCi0gICAgIlwwMzFcdWZmMThcMDMyXHVmZjU5XDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNWVcMDA0XHVmZjVlXDAwNSIgKwotICAgICJcdWZmNWVcMDA3XHVmZjVlXDAxMFx1ZmY1ZVwwMTFcdWZmNWVcMDEyXHVmZjVlXDAxM1x1ZmY1ZVwwMTRcdWZmNWUiICsKLSAgICAiXDAxNVx1ZmY1ZVwwMTZcdWZmNWVcMDE3XHVmZjVlXDAyMFx1ZmY1ZVwwMjFcdWZmNWVcMDIyXHVmZjVlXDAyMyIgKwotICAgICJcdWZmNWVcMDI0XHVmZjVlXDAyNVx1ZmY1ZVwwMzJcdWZmNWVcMDM1XHVmZjVlXDA1M1x1ZmY1ZVwwNTRcdWZmNWUiICsKLSAgICAiXDA1NVx1ZmY1ZVwwNTZcdWZmNWVcMDU3XHVmZjVlXDA2MFx1ZmY1ZVwwNjFcdWZmNWVcMDYyXHVmZjVlXDA2MyIgKwotICAgICJcdWZmNWVcMDY0XHVmZjVlXDA2NVx1ZmY1ZVwwNjZcdWZmNWVcMDY3XHVmZjVlXDA3MVx1ZmY1ZVwwNzNcdWZmNWUiICsKLSAgICAiXDA3NFx1ZmY1ZVwwNzVcdWZmNWVcMTAwXHVmZjVlXDEwMVx1ZmY1ZVwxMDJcdWZmNWVcMTA3XHVmZjVlXDExMCIgKwotICAgICJcdWZmNWVcMTExXHVmZjVlXDAwMVwwMDJcMDAwXDAwNlwwMDdcdTAxNjBcMDMyXHUwMTVmXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDZcMDA3XHVmZjVhXDAzMlx1ZmY1YVwwMDFcMDAyXDAwMFwxNDZcMDEyXDIzM1wwMzYiICsKLSAgICAiXDIzMlwwMzdcMjQwXDA0MFwyNTJcMDQxXDI0MVwwNDJcMjM3XDA0M1wyMzZcMDQ0XDI1MCIgKwotICAgICJcMDQ1XDIyNlwwNDZcMjQ2XDA0N1wyNDRcMDUwXDIyNVwwNTFcMjQyXDA1MlwyNDNcMDYxIiArCi0gICAgIlwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjZcMDcyXDA2N1wwNTAiICsKLSAgICAiXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNVwwNzZcMjAzXDA3NyIgKwotICAgICJcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0XDIwMVwxMDVcMjA0IiArCi0gICAgIlwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzJcMTEzXDEyNlwxMTQiICsKLSAgICAiXDI1M1wxMTVcMjQ3XDExNlwyNTFcMTE3XDIyN1wxMjBcMjM0XDEyMVwyMzBcMTIyXDI0NSIgKwotICAgICJcMTIzXDIzNVwxMjRcMTUzXDEzMVwxMjNcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY1ZFwwMDQiICsKLSAgICAiXHVmZjVkXDAwNVx1ZmY1ZFwwMDdcdWZmNWRcMDEwXHVmZjVkXDAxMVx1ZmY1ZFwwMTJcdWZmNWRcMDEzXHVmZjVkIiArCi0gICAgIlwwMTRcdWZmNWRcMDE1XHVmZjVkXDAxNlx1ZmY1ZFwwMTdcdWZmNWRcMDIwXHVmZjVkXDAyMVx1ZmY1ZFwwMjIiICsKLSAgICAiXHVmZjVkXDAyM1x1ZmY1ZFwwMjRcdWZmNWRcMDI1XHVmZjVkXDAzMlx1ZmY1ZFwwMzVcdWZmNWRcMDUzXHVmZjVkIiArCi0gICAgIlwwNTRcdWZmNWRcMDU1XHVmZjVkXDA1Nlx1ZmY1ZFwwNTdcdWZmNWRcMDYwXHVmZjVkXDA2MVx1ZmY1ZFwwNjIiICsKLSAgICAiXHVmZjVkXDA2M1x1ZmY1ZFwwNjRcdWZmNWRcMDY1XHVmZjVkXDA2Nlx1ZmY1ZFwwNjdcdWZmNWRcMDcxXHVmZjVkIiArCi0gICAgIlwwNzNcdWZmNWRcMDc0XHVmZjVkXDA3NVx1ZmY1ZFwxMDBcdWZmNWRcMTAxXHVmZjVkXDEwMlx1ZmY1ZFwxMDciICsKLSAgICAiXHVmZjVkXDExMFx1ZmY1ZFwxMTFcdWZmNWRcMDAxXDAwMlwwMDBcMDA2XDAwN1x1MDE2M1wwMzVcdTAxNjIiICsKLSAgICAiXDAwMVwwMDJcMDAwXDAwNFwwMDdcdTAxNjRcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY1Y1wwMDQiICsKLSAgICAiXHVmZjVjXDAwNVx1ZmY1Y1wwMDdcdWZmNWNcMDEwXHVmZjVjXDAxMVx1ZmY1Y1wwMTJcdWZmNWNcMDEzXHVmZjVjIiArCi0gICAgIlwwMTRcdWZmNWNcMDE1XHVmZjVjXDAxNlx1ZmY1Y1wwMTdcdWZmNWNcMDIwXHVmZjVjXDAyMVx1ZmY1Y1wwMjIiICsKLSAgICAiXHVmZjVjXDAyM1x1ZmY1Y1wwMjRcdWZmNWNcMDI1XHVmZjVjXDAzMlx1ZmY1Y1wwMzVcdWZmNWNcMDUzXHVmZjVjIiArCi0gICAgIlwwNTRcdWZmNWNcMDU1XHVmZjVjXDA1Nlx1ZmY1Y1wwNTdcdWZmNWNcMDYwXHVmZjVjXDA2MVx1ZmY1Y1wwNjIiICsKLSAgICAiXHVmZjVjXDA2M1x1ZmY1Y1wwNjRcdWZmNWNcMDY1XHVmZjVjXDA2Nlx1ZmY1Y1wwNjdcdWZmNWNcMDcxXHVmZjVjIiArCi0gICAgIlwwNzNcdWZmNWNcMDc0XHVmZjVjXDA3NVx1ZmY1Y1wxMDBcdWZmNWNcMTAxXHVmZjVjXDEwMlx1ZmY1Y1wxMDciICsKLSAgICAiXHVmZjVjXDExMFx1ZmY1Y1wxMTFcdWZmNWNcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY1YlwwMDRcdWZmNWIiICsKLSAgICAiXDAwNVx1ZmY1YlwwMDdcdWZmNWJcMDEwXHVmZjViXDAxMVx1ZmY1YlwwMTJcdWZmNWJcMDEzXHVmZjViXDAxNCIgKwotICAgICJcdWZmNWJcMDE1XHVmZjViXDAxNlx1ZmY1YlwwMTdcdWZmNWJcMDIwXHVmZjViXDAyMVx1ZmY1YlwwMjJcdWZmNWIiICsKLSAgICAiXDAyM1x1ZmY1YlwwMjRcdWZmNWJcMDI1XHVmZjViXDAzMlx1ZmY1YlwwMzVcdWZmNWJcMDUzXHVmZjViXDA1NCIgKwotICAgICJcdWZmNWJcMDU1XHVmZjViXDA1Nlx1ZmY1YlwwNTdcdWZmNWJcMDYwXHVmZjViXDA2MVx1ZmY1YlwwNjJcdWZmNWIiICsKLSAgICAiXDA2M1x1ZmY1YlwwNjRcdWZmNWJcMDY1XHVmZjViXDA2Nlx1ZmY1YlwwNjdcdWZmNWJcMDcxXHVmZjViXDA3MyIgKwotICAgICJcdWZmNWJcMDc0XHVmZjViXDA3NVx1ZmY1YlwxMDBcdWZmNWJcMTAxXHVmZjViXDEwMlx1ZmY1YlwxMDdcdWZmNWIiICsKLSAgICAiXDExMFx1ZmY1YlwxMTFcdWZmNWJcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE2NlwwMDFcMDAyXDAwMCIgKwotICAgICJcMTMwXDAwMlx1ZmY2YVwwMDRcdWZmNmFcMDA1XHVmZjZhXDAwN1x1ZmY2YVwwMTBcdWZmNmFcMDExXHVmZjZhIiArCi0gICAgIlwwMTJcdWZmNmFcMDEzXHVmZjZhXDAxNFx1ZmY2YVwwMTVcdWZmNmFcMDE2XHVmZjZhXDAxN1x1ZmY2YVwwMjAiICsKLSAgICAiXHVmZjZhXDAyMVx1ZmY2YVwwMjJcdWZmNmFcMDIzXHVmZjZhXDAyNFx1ZmY2YVwwMjVcdWZmNmFcMDMyXHVmZjZhIiArCi0gICAgIlwwMzVcdWZmNmFcMDUzXHVmZjZhXDA1NFx1ZmY2YVwwNTVcdWZmNmFcMDU2XHVmZjZhXDA1N1x1ZmY2YVwwNjAiICsKLSAgICAiXHVmZjZhXDA2MVx1ZmY2YVwwNjJcdWZmNmFcMDYzXHVmZjZhXDA2NFx1ZmY2YVwwNjVcdWZmNmFcMDY2XHVmZjZhIiArCi0gICAgIlwwNjdcdWZmNmFcMDcxXHVmZjZhXDA3M1x1ZmY2YVwwNzRcdWZmNmFcMDc1XHVmZjZhXDEwMFx1ZmY2YVwxMDEiICsKLSAgICAiXHVmZjZhXDEwMlx1ZmY2YVwxMDdcdWZmNmFcMTEwXHVmZjZhXDExMVx1ZmY2YVwwMDFcMDAyXDAwMFwxNDYiICsKLSAgICAiXDAxMlwyMzNcMDM2XDIzMlwwMzdcMjQwXDA0MFwyNTJcMDQxXDI0MVwwNDJcMjM3XDA0MyIgKwotICAgICJcMjM2XDA0NFwyNTBcMDQ1XDIyNlwwNDZcMjQ2XDA0N1wyNDRcMDUwXDIyNVwwNTFcMjQyIiArCi0gICAgIlwwNTJcMjQzXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjYiICsKLSAgICAiXDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNSIgKwotICAgICJcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0IiArCi0gICAgIlwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlwxMzIiICsKLSAgICAiXDExM1wxMjZcMTE0XDI1M1wxMTVcMjQ3XDExNlwyNTFcMTE3XDIyN1wxMjBcMjM0XDEyMSIgKwotICAgICJcMjMwXDEyMlwyNDVcMTIzXDIzNVwxMjRcMTUzXDEzMVwxMjNcMDAxXDAwMlwwMDBcMDA2IiArCi0gICAgIlwwMzJcMjY0XDEwMVx1MDE2OVwwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMSIgKwotICAgICJcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxIiArCi0gICAgIlwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDMiICsKLSAgICAiXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NiIgKwotICAgICJcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2IiArCi0gICAgIlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzUiICsKLSAgICAiXDA3NlwxMDZcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMTU3XDEwNCIgKwotICAgICJcMDQ2XDEwNVwxNDdcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyIiArCi0gICAgIlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjEiICsKLSAgICAiXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNCIgKwotICAgICJcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAyMFwwMDJcdWZmZjVcMDA1XHVmZmY1XDAwNyIgKwotICAgICJcdWZmZjVcMDMyXHVmZmY1XDEwMFx1ZmZmNVwxMDFcdWZmZjVcMTA3XHVmZmY1XDAwMVwwMDJcMDAwXDE0NiIgKwotICAgICJcMDEyXHVmZmFlXDAzNlx1ZmZhZVwwMzdcdWZmYWVcMDQwXHVmZmFlXDA0MVx1ZmZhZVwwNDJcdWZmYWVcMDQzIiArCi0gICAgIlx1ZmZhZVwwNDRcdWZmYWVcMDQ1XHVmZmFlXDA0Nlx1ZmZhZVwwNDdcdWZmYWVcMDUwXHVmZmFlXDA1MVx1ZmZhZSIgKwotICAgICJcMDUyXHVmZmFlXDA2MVx1ZmZhZVwwNjJcdWZmYWVcMDYzXHVmZmFlXDA2NFx1ZmZhZVwwNjVcdWZmYWVcMDY2IiArCi0gICAgIlx1ZmZhZVwwNjdcdWZmYWVcMDcwXHVmZmFlXDA3MVx1ZmZhZVwwNzNcdWZmYWVcMDc0XHVmZmFlXDA3NVx1ZmZhZSIgKwotICAgICJcMDc2XHVmZmFlXDA3N1x1ZmZhZVwxMDBcdWZmYWVcMTAxXHVmZmFlXDEwMlx1ZmZhZVwxMDNcdWZmYWVcMTA0IiArCi0gICAgIlx1ZmZhZVwxMDVcdWZmYWVcMTA2XHVmZmFlXDEwN1x1ZmZhZVwxMTBcdWZmYWVcMTExXHVmZmFlXDExMlx1ZmZhZSIgKwotICAgICJcMTEzXHVmZmFlXDExNFx1ZmZhZVwxMTVcdWZmYWVcMTE2XHVmZmFlXDExN1x1ZmZhZVwxMjBcdWZmYWVcMTIxIiArCi0gICAgIlx1ZmZhZVwxMjJcdWZmYWVcMTIzXHVmZmFlXDEyNFx1ZmZhZVwxMzFcdWZmYWVcMDAxXDAwMlwwMDBcMTQ2IiArCi0gICAgIlwwMTJcdWZmYWNcMDM2XHVmZmFjXDAzN1x1ZmZhY1wwNDBcdWZmYWNcMDQxXHVmZmFjXDA0Mlx1ZmZhY1wwNDMiICsKLSAgICAiXHVmZmFjXDA0NFx1ZmZhY1wwNDVcdWZmYWNcMDQ2XHVmZmFjXDA0N1x1ZmZhY1wwNTBcdWZmYWNcMDUxXHVmZmFjIiArCi0gICAgIlwwNTJcdWZmYWNcMDYxXHVmZmFjXDA2Mlx1ZmZhY1wwNjNcdWZmYWNcMDY0XHVmZmFjXDA2NVx1ZmZhY1wwNjYiICsKLSAgICAiXHVmZmFjXDA2N1x1ZmZhY1wwNzBcdWZmYWNcMDcxXHVmZmFjXDA3M1x1ZmZhY1wwNzRcdWZmYWNcMDc1XHVmZmFjIiArCi0gICAgIlwwNzZcdWZmYWNcMDc3XHVmZmFjXDEwMFx1ZmZhY1wxMDFcdWZmYWNcMTAyXHVmZmFjXDEwM1x1ZmZhY1wxMDQiICsKLSAgICAiXHVmZmFjXDEwNVx1ZmZhY1wxMDZcdWZmYWNcMTA3XHVmZmFjXDExMFx1ZmZhY1wxMTFcdWZmYWNcMTEyXHVmZmFjIiArCi0gICAgIlwxMTNcdWZmYWNcMTE0XHVmZmFjXDExNVx1ZmZhY1wxMTZcdWZmYWNcMTE3XHVmZmFjXDEyMFx1ZmZhY1wxMjEiICsKLSAgICAiXHVmZmFjXDEyMlx1ZmZhY1wxMjNcdWZmYWNcMTI0XHVmZmFjXDEzMVx1ZmZhY1wwMDFcMDAyXDAwMFwxNDYiICsKLSAgICAiXDAxMlx1ZmZiMVwwMzZcdWZmYjFcMDM3XHVmZmIxXDA0MFx1ZmZiMVwwNDFcdWZmYjFcMDQyXHVmZmIxXDA0MyIgKwotICAgICJcdWZmYjFcMDQ0XHVmZmIxXDA0NVx1ZmZiMVwwNDZcdWZmYjFcMDQ3XHVmZmIxXDA1MFx1ZmZiMVwwNTFcdWZmYjEiICsKLSAgICAiXDA1Mlx1ZmZiMVwwNjFcdWZmYjFcMDYyXHVmZmIxXDA2M1x1ZmZiMVwwNjRcdWZmYjFcMDY1XHVmZmIxXDA2NiIgKwotICAgICJcdWZmYjFcMDY3XHVmZmIxXDA3MFx1ZmZiMVwwNzFcdWZmYjFcMDczXHVmZmIxXDA3NFx1ZmZiMVwwNzVcdWZmYjEiICsKLSAgICAiXDA3Nlx1ZmZiMVwwNzdcdWZmYjFcMTAwXHVmZmIxXDEwMVx1ZmZiMVwxMDJcdWZmYjFcMTAzXHVmZmIxXDEwNCIgKwotICAgICJcdWZmYjFcMTA1XHVmZmIxXDEwNlx1ZmZiMVwxMDdcdWZmYjFcMTEwXHVmZmIxXDExMVx1ZmZiMVwxMTJcdWZmYjEiICsKLSAgICAiXDExM1x1ZmZiMVwxMTRcdWZmYjFcMTE1XHVmZmIxXDExNlx1ZmZiMVwxMTdcdWZmYjFcMTIwXHVmZmIxXDEyMSIgKwotICAgICJcdWZmYjFcMTIyXHVmZmIxXDEyM1x1ZmZiMVwxMjRcdWZmYjFcMTMxXHVmZmIxXDAwMVwwMDJcMDAwXDAwNCIgKwotICAgICJcMDcyXHUwMTZmXDAwMVwwMDJcMDAwXDE0NlwwMTJcMjMzXDAzNlwyMzJcMDM3XDI0MFwwNDAiICsKLSAgICAiXDI1MlwwNDFcMjQxXDA0MlwyMzdcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NiIgKwotICAgICJcMDQ3XDI0NFwwNTBcMjI1XDA1MVwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzIiArCi0gICAgIlwwNjdcMDY0XDEwMlwwNjVcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjMiICsKLSAgICAiXDA3M1wxMzNcMDc0XDE1NFwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMSIgKwotICAgICJcMTcxXDEwMlwxNzVcMTAzXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0IiArCi0gICAgIlwxMTBcMTczXDExMVwxNDNcMTEyXDEzMlwxMTNcMTI2XDExNFwyNTNcMTE1XDI0N1wxMTYiICsKLSAgICAiXDI1MVwxMTdcMjI3XDEyMFwyMzRcMTIxXDIzMFwxMjJcMjQ1XDEyM1wyMzVcMTI0XDE1MyIgKwotICAgICJcMTMxXDEyM1wwMDFcMDAyXDAwMFwxMTRcMDAyXHVmZmQ0XDAwNVx1ZmZkNFwwMDdcdWZmZDRcMDEwIiArCi0gICAgIlx1ZmZkNFwwMTFcdWZmZDRcMDEyXHVmZmQ0XDAxM1x1ZmZkNFwwMTRcdWZmZDRcMDE1XHVmZmQ0XDAxNlx1ZmZkNCIgKwotICAgICJcMDE3XHVmZmQ0XDAyMFx1ZmZkNFwwMjFcdWZmZDRcMDIyXHVmZmQ0XDAyM1x1ZmZkNFwwMzJcdWZmZDRcMDUzIiArCi0gICAgIlx1ZmZkNFwwNTRcdWZmZDRcMDU1XHVmZmQ0XDA1Nlx1ZmZkNFwwNTdcdWZmZDRcMDYwXHVmZmQ0XDA2MVx1ZmZkNCIgKwotICAgICJcMDYyXHVmZmQ0XDA2M1x1ZmZkNFwwNjRcdWZmZDRcMDY1XHVmZmQ0XDA2Nlx1ZmZkNFwwNjdcdWZmZDRcMDcxIiArCi0gICAgIlx1ZmZkNFwwNzVcdWZmZDRcMTAwXHVmZmQ0XDEwMVx1ZmZkNFwxMDJcdWZmZDRcMTA3XHVmZmQ0XDExMFx1ZmZkNCIgKwotICAgICJcMTExXHVmZmQ0XDAwMVwwMDJcMDAwXDEyMFwwMDJcdWZmODNcMDA1XHVmZjgzXDAwN1x1ZmY4M1wwMTAiICsKLSAgICAiXHVmZjgzXDAxMVx1ZmY4M1wwMTJcdWZmODNcMDEzXHVmZjgzXDAxNFx1ZmY4M1wwMTVcdWZmODNcMDE2XHVmZjgzIiArCi0gICAgIlwwMTdcdWZmODNcMDIwXHVmZjgzXDAyMVx1ZmY4M1wwMjJcdWZmODNcMDIzXHVmZjgzXDAzMlx1ZmY4M1wwMzUiICsKLSAgICAiXHUwMTcyXDA1M1x1ZmY4M1wwNTRcdWZmODNcMDU1XHVmZjgzXDA1Nlx1ZmY4M1wwNTdcdWZmODNcMDYwXHVmZjgzIiArCi0gICAgIlwwNjFcdWZmODNcMDYyXHVmZjgzXDA2M1x1ZmY4M1wwNjRcdWZmODNcMDY1XHVmZjgzXDA2Nlx1ZmY4M1wwNjciICsKLSAgICAiXHVmZjgzXDA3MVx1ZmY4M1wwNzNcdWZmODNcMDc1XHVmZjgzXDEwMFx1ZmY4M1wxMDFcdWZmODNcMTAyXHVmZjgzIiArCi0gICAgIlwxMDdcdWZmODNcMTEwXHVmZjgzXDExMVx1ZmY4M1wwMDFcMDAyXDAwMFwxMTZcMDAyXHVmZjgyXDAwNSIgKwotICAgICJcdWZmODJcMDA3XHVmZjgyXDAxMFx1ZmY4MlwwMTFcdWZmODJcMDEyXHVmZjgyXDAxM1x1ZmY4MlwwMTRcdWZmODIiICsKLSAgICAiXDAxNVx1ZmY4MlwwMTZcdWZmODJcMDE3XHVmZjgyXDAyMFx1ZmY4MlwwMjFcdWZmODJcMDIyXHVmZjgyXDAyMyIgKwotICAgICJcdWZmODJcMDMyXHVmZjgyXDA1M1x1ZmY4MlwwNTRcdWZmODJcMDU1XHVmZjgyXDA1Nlx1ZmY4MlwwNTdcdWZmODIiICsKLSAgICAiXDA2MFx1ZmY4MlwwNjFcdWZmODJcMDYyXHVmZjgyXDA2M1x1ZmY4MlwwNjRcdWZmODJcMDY1XHVmZjgyXDA2NiIgKwotICAgICJcdWZmODJcMDY3XHVmZjgyXDA3MVx1ZmY4MlwwNzNcdWZmODJcMDc1XHVmZjgyXDEwMFx1ZmY4MlwxMDFcdWZmODIiICsKLSAgICAiXDEwMlx1ZmY4MlwxMDdcdWZmODJcMTEwXHVmZjgyXDExMVx1ZmY4MlwwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmZiM1wwMDRcdWZmYjNcMDA1XHVmZmIzXDAwN1x1ZmZiM1wwMTBcdWZmYjNcMDExXHVmZmIzXDAxMlx1ZmZiMyIgKwotICAgICJcMDEzXHVmZmIzXDAxNFx1ZmZiM1wwMTVcdWZmYjNcMDE2XHVmZmIzXDAxN1x1ZmZiM1wwMjBcdWZmYjNcMDIxIiArCi0gICAgIlx1ZmZiM1wwMjJcdWZmYjNcMDIzXHVmZmIzXDAyNFx1ZmZiM1wwMjVcdWZmYjNcMDMyXHVmZmIzXDA1M1x1ZmZiMyIgKwotICAgICJcMDU0XHVmZmIzXDA1NVx1ZmZiM1wwNTZcdWZmYjNcMDU3XHVmZmIzXDA2MFx1ZmZiM1wwNjFcdWZmYjNcMDYyIiArCi0gICAgIlx1ZmZiM1wwNjNcdWZmYjNcMDY0XHVmZmIzXDA2NVx1ZmZiM1wwNjZcdWZmYjNcMDY3XHVmZmIzXDA3MVx1ZmZiMyIgKwotICAgICJcMDczXHVmZmIzXDA3NFx1ZmZiM1wwNzVcdWZmYjNcMTAwXHVmZmIzXDEwMVx1ZmZiM1wxMDJcdWZmYjNcMTA3IiArCi0gICAgIlx1ZmZiM1wxMTBcdWZmYjNcMTExXHVmZmIzXDAwMVwwMDJcMDAwXDE0NlwwMTJcdWZmYTRcMDM2XHVmZmE0IiArCi0gICAgIlwwMzdcdWZmYTRcMDQwXHVmZmE0XDA0MVx1ZmZhNFwwNDJcdWZmYTRcMDQzXHVmZmE0XDA0NFx1ZmZhNFwwNDUiICsKLSAgICAiXHVmZmE0XDA0Nlx1ZmZhNFwwNDdcdWZmYTRcMDUwXHVmZmE0XDA1MVx1ZmZhNFwwNTJcdWZmYTRcMDYxXHVmZmE0IiArCi0gICAgIlwwNjJcdWZmYTRcMDYzXHVmZmE0XDA2NFx1ZmZhNFwwNjVcdWZmYTRcMDY2XHVmZmE0XDA2N1x1ZmZhNFwwNzAiICsKLSAgICAiXHVmZmE0XDA3MVx1ZmZhNFwwNzNcdWZmYTRcMDc0XHVmZmE0XDA3NVx1ZmZhNFwwNzZcdWZmYTRcMDc3XHVmZmE0IiArCi0gICAgIlwxMDBcdWZmYTRcMTAxXHVmZmE0XDEwMlx1ZmZhNFwxMDNcdWZmYTRcMTA0XHVmZmE0XDEwNVx1ZmZhNFwxMDYiICsKLSAgICAiXHVmZmE0XDEwN1x1ZmZhNFwxMTBcdWZmYTRcMTExXHVmZmE0XDExMlx1ZmZhNFwxMTNcdWZmYTRcMTE0XHVmZmE0IiArCi0gICAgIlwxMTVcdWZmYTRcMTE2XHVmZmE0XDExN1x1ZmZhNFwxMjBcdWZmYTRcMTIxXHVmZmE0XDEyMlx1ZmZhNFwxMjMiICsKLSAgICAiXHVmZmE0XDEyNFx1ZmZhNFwxMzFcdWZmYTRcMDAxXDAwMlwwMDBcMjAwXDAwNlwxMDFcMDEwXDA3NiIgKwotICAgICJcMDExXDEzNFwwMTJcMTA3XDAyNFwwMjJcMDI1XDAwNlwwMjdcMDcwXDAzMFwxMTdcMDMzIiArCi0gICAgIlwwNzFcMDM0XDEyMFwwMzZcMDQwXDAzN1wxNTZcMDQwXDE0NVwwNDFcMDQ1XDA0MlwwMDQiICsKLSAgICAiXDA0M1wwNDFcMDQ0XDAxMFwwNDVcMDIwXDA0NlwwMTJcMDQ3XDAzMVwwNTBcMTEwXDA1MSIgKwotICAgICJcMDY2XDA1MlwwNjFcMDYxXDExMVwwNjJcMDc3XDA2M1wwNjdcMDY0XDEwMlwwNjVcMTI1IiArCi0gICAgIlwwNjZcMDcyXDA2N1wwNTBcMDcwXDE1NVwwNzFcMDIzXDA3M1wxMzNcMDc0XDE1NFwwNzUiICsKLSAgICAiXDEzNVwwNzZcMjAzXDA3N1wxNDJcMTAwXDExM1wxMDFcMTcxXDEwMlwxNzVcMTAzXDIwNSIgKwotICAgICJcMTA0XDIwMVwxMDVcMjA0XDEwNlwwNTJcMTA3XDExNFwxMTBcMTczXDExMVwxNDNcMTEyIiArCi0gICAgIlwxMzJcMTEzXDEyNlwxMTRcMDI0XDExNVwwMTZcMTE2XDA0N1wxMTdcMTI0XDEyMFwxNDEiICsKLSAgICAiXDEyMVwwNTZcMTIyXDA1MVwxMjNcMDU1XDEyNFwxNTNcMTI1XDAzNFwxMjZcMDM1XDEyNyIgKwotICAgICJcMTA0XDEzMFwxNjdcMTMxXDEyM1wwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2IiArCi0gICAgIlwwMTFcMTM0XDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzMiICsKLSAgICAiXDA3MVwwMzRcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNCIgKwotICAgICJcMDQzXDA0MVwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxIiArCi0gICAgIlwwNjZcMDUyXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjUiICsKLSAgICAiXDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NSIgKwotICAgICJcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1IiArCi0gICAgIlwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTIiICsKLSAgICAiXDEzMlwxMTNcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MSIgKwotICAgICJcMTIxXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3IiArCi0gICAgIlwxMDRcMTMwXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDIwMFwwMDZcMTAxXDAxMFwwNzYiICsKLSAgICAiXDAxMVwxMzRcMDEyXDEwN1wwMjRcMDIyXDAyNVwwMDZcMDI3XDA3MFwwMzBcMTE3XDAzMyIgKwotICAgICJcMDcxXDAzNFwxMjBcMDM2XDA0MFwwMzdcMTU2XDA0MFwxNDVcMDQxXDA0NVwwNDJcMDA0IiArCi0gICAgIlwwNDNcMDQxXDA0NFwwMTBcMDQ1XDAyMFwwNDZcMDEyXDA0N1wwMzFcMDUwXDExMFwwNTEiICsKLSAgICAiXDA2NlwwNTJcMDYxXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNSIgKwotICAgICJcMDY2XDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1IiArCi0gICAgIlwxMzVcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDUiICsKLSAgICAiXDEwNFwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMiIgKwotICAgICJcMTMyXDExM1wxMjZcMTE0XDAyNFwxMTVcMDE2XDExNlwwNDdcMTE3XDEyNFwxMjBcMTQxIiArCi0gICAgIlwxMjFcMDU2XDEyMlwwNTFcMTIzXDA1NVwxMjRcMTUzXDEyNVwwMzRcMTI2XDAzNVwxMjciICsKLSAgICAiXDEwNFwxMzBcMTY3XDEzMVwxMjNcMDAxXDAwMlwwMDBcMTAwXDAwMlx1ZmZlNVwwMDVcdWZmZTUiICsKLSAgICAiXDAwN1x1ZmZlNVwwMTBcdWZmZTVcMDExXHVmZmU1XDAxMlx1MDEwMVwwMTRcdWZmZTVcMDE1XHVmZmU1XDAxNiIgKwotICAgICJcdWZmZTVcMDE3XHVmZmU1XDAyMFx1ZmZlNVwwMjFcdWZmZTVcMDIyXHVmZmU1XDAyM1x1ZmZlNVwwMzJcdWZmZTUiICsKLSAgICAiXDA1M1x1ZmZlNVwwNTRcdWZmZTVcMDU1XHVmZmU1XDA1Nlx1ZmZlNVwwNTdcdWZmZTVcMDYwXHVmZmU1XDA2MSIgKwotICAgICJcdTAxMDNcMDYyXHUwMTA0XDA2M1x1MDEwMlwwNzVcdWZmZTVcMTAwXHVmZmU1XDEwMVx1ZmZlNVwxMDJcdWZmZTUiICsKLSAgICAiXDEwN1x1ZmZlNVwxMTBcdWZmZTVcMTExXHVmZmU1XDAwMVwwMDJcMDAwXDEwMFwwMDJcdWZmZTZcMDA1IiArCi0gICAgIlx1ZmZlNlwwMDdcdWZmZTZcMDEwXHVmZmU2XDAxMVx1ZmZlNlwwMTJcdTAxMDFcMDE0XHVmZmU2XDAxNVx1ZmZlNiIgKwotICAgICJcMDE2XHVmZmU2XDAxN1x1ZmZlNlwwMjBcdWZmZTZcMDIxXHVmZmU2XDAyMlx1ZmZlNlwwMjNcdWZmZTZcMDMyIiArCi0gICAgIlx1ZmZlNlwwNTNcdWZmZTZcMDU0XHVmZmU2XDA1NVx1ZmZlNlwwNTZcdWZmZTZcMDU3XHVmZmU2XDA2MFx1ZmZlNiIgKwotICAgICJcMDYxXHUwMTAzXDA2Mlx1MDEwNFwwNjNcdTAxMDJcMDc1XHVmZmU2XDEwMFx1ZmZlNlwxMDFcdWZmZTZcMTAyIiArCi0gICAgIlx1ZmZlNlwxMDdcdWZmZTZcMTEwXHVmZmU2XDExMVx1ZmZlNlwwMDFcMDAyXDAwMFwwNjZcMDAyXHVmZmU4IiArCi0gICAgIlwwMDVcdWZmZThcMDA3XHVmZmU4XDAxMFx1MDE3NlwwMTFcdTAxNzdcMDE0XHVmZmU4XDAxNVx1ZmZlOFwwMTYiICsKLSAgICAiXHVmZmU4XDAxN1x1ZmZlOFwwMjBcdWZmZThcMDIxXHVmZmU4XDAyMlx1ZmZlOFwwMjNcdWZmZThcMDMyXHVmZmU4IiArCi0gICAgIlwwNTNcdWZmZThcMDU0XHVmZmU4XDA1NVx1ZmZlOFwwNTZcdWZmZThcMDU3XHVmZmU4XDA2MFx1ZmZlOFwwNzUiICsKLSAgICAiXHVmZmU4XDEwMFx1ZmZlOFwxMDFcdWZmZThcMTA3XHVmZmU4XDExMFx1ZmZlOFwxMTFcdWZmZThcMDAxXDAwMiIgKwotICAgICJcMDAwXDAwNFwwMDdcdTAxN2NcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY2ZVwwMDRcdWZmNmVcMDA1IiArCi0gICAgIlx1ZmY2ZVwwMDdcdWZmNmVcMDEwXHVmZjZlXDAxMVx1ZmY2ZVwwMTJcdWZmNmVcMDEzXHVmZjZlXDAxNFx1ZmY2ZSIgKwotICAgICJcMDE1XHVmZjZlXDAxNlx1ZmY2ZVwwMTdcdWZmNmVcMDIwXHVmZjZlXDAyMVx1ZmY2ZVwwMjJcdWZmNmVcMDIzIiArCi0gICAgIlx1ZmY2ZVwwMjRcdWZmNmVcMDI1XHVmZjZlXDAzMlx1ZmY2ZVwwMzVcdWZmNmVcMDUzXHVmZjZlXDA1NFx1ZmY2ZSIgKwotICAgICJcMDU1XHVmZjZlXDA1Nlx1ZmY2ZVwwNTdcdWZmNmVcMDYwXHVmZjZlXDA2MVx1ZmY2ZVwwNjJcdWZmNmVcMDYzIiArCi0gICAgIlx1ZmY2ZVwwNjRcdWZmNmVcMDY1XHVmZjZlXDA2Nlx1ZmY2ZVwwNjdcdWZmNmVcMDcxXHVmZjZlXDA3M1x1ZmY2ZSIgKwotICAgICJcMDc0XHVmZjZlXDA3NVx1ZmY2ZVwxMDBcdWZmNmVcMTAxXHVmZjZlXDEwMlx1ZmY2ZVwxMDdcdWZmNmVcMTEwIiArCi0gICAgIlx1ZmY2ZVwxMTFcdWZmNmVcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiZFwwMDVcdWZmYmRcMDA3XHVmZmJkIiArCi0gICAgIlwwMTBcdWZmYmRcMDExXHVmZmJkXDAxMlx1ZmZiZFwwMTNcdWZmYmRcMDE0XHVmZmJkXDAxNVx1ZmZiZFwwMTYiICsKLSAgICAiXHVmZmJkXDAxN1x1ZmZiZFwwMjBcdWZmYmRcMDIxXHVmZmJkXDAyMlx1ZmZiZFwwMjNcdWZmYmRcMDI0XDM3NSIgKwotICAgICJcMDI1XDM3NlwwMzJcdWZmYmRcMDUzXHVmZmJkXDA1NFx1ZmZiZFwwNTVcdWZmYmRcMDU2XHVmZmJkXDA1NyIgKwotICAgICJcdWZmYmRcMDYwXHVmZmJkXDA2MVx1ZmZiZFwwNjJcdWZmYmRcMDYzXHVmZmJkXDA2NFx1ZmZiZFwwNjVcdWZmYmQiICsKLSAgICAiXDA2Nlx1ZmZiZFwwNjdcdWZmYmRcMDcxXHVmZmJkXDA3M1x1ZmZiZFwwNzRcdWZmYmRcMDc1XHVmZmJkXDEwMCIgKwotICAgICJcdWZmYmRcMTAxXHVmZmJkXDEwMlx1ZmZiZFwxMDdcdWZmYmRcMTEwXHVmZmJkXDExMVx1ZmZiZFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTQ2XDAxMlx1ZmZhYVwwMzZcdWZmYWFcMDM3XHVmZmFhXDA0MFx1ZmZhYVwwNDFcdWZmYWFcMDQyIiArCi0gICAgIlx1ZmZhYVwwNDNcdWZmYWFcMDQ0XHVmZmFhXDA0NVx1ZmZhYVwwNDZcdWZmYWFcMDQ3XHVmZmFhXDA1MFx1ZmZhYSIgKwotICAgICJcMDUxXHVmZmFhXDA1Mlx1ZmZhYVwwNjFcdWZmYWFcMDYyXHVmZmFhXDA2M1x1ZmZhYVwwNjRcdWZmYWFcMDY1IiArCi0gICAgIlx1ZmZhYVwwNjZcdWZmYWFcMDY3XHVmZmFhXDA3MFx1ZmZhYVwwNzFcdWZmYWFcMDczXHVmZmFhXDA3NFx1ZmZhYSIgKwotICAgICJcMDc1XHVmZmFhXDA3Nlx1ZmZhYVwwNzdcdWZmYWFcMTAwXHVmZmFhXDEwMVx1ZmZhYVwxMDJcdWZmYWFcMTAzIiArCi0gICAgIlx1ZmZhYVwxMDRcdWZmYWFcMTA1XHVmZmFhXDEwNlx1ZmZhYVwxMDdcdWZmYWFcMTEwXHVmZmFhXDExMVx1ZmZhYSIgKwotICAgICJcMTEyXHVmZmFhXDExM1x1ZmZhYVwxMTRcdWZmYWFcMTE1XHVmZmFhXDExNlx1ZmZhYVwxMTdcdWZmYWFcMTIwIiArCi0gICAgIlx1ZmZhYVwxMjFcdWZmYWFcMTIyXHVmZmFhXDEyM1x1ZmZhYVwxMjRcdWZmYWFcMTMxXHVmZmFhXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMTBcMDA3XHUwMTgzXDEyMlx1MDE4NFwxMjNcdTAxODJcMDAxXDAwMlwwMDBcMDA0XDAwNyIgKwotICAgICJcdTAxODZcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE4NVwwMDFcMDAyXDAwMFwwMDRcMDA2XHUwMTU0IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjZkXDAwNFx1ZmY2ZFwwMDVcdWZmNmRcMDA3XHVmZjZkXDAxMCIgKwotICAgICJcdWZmNmRcMDExXHVmZjZkXDAxMlx1ZmY2ZFwwMTNcdWZmNmRcMDE0XHVmZjZkXDAxNVx1ZmY2ZFwwMTZcdWZmNmQiICsKLSAgICAiXDAxN1x1ZmY2ZFwwMjBcdWZmNmRcMDIxXHVmZjZkXDAyMlx1ZmY2ZFwwMjNcdWZmNmRcMDI0XHVmZjZkXDAyNSIgKwotICAgICJcdWZmNmRcMDMyXHVmZjZkXDAzNVx1ZmY2ZFwwNTNcdWZmNmRcMDU0XHVmZjZkXDA1NVx1ZmY2ZFwwNTZcdWZmNmQiICsKLSAgICAiXDA1N1x1ZmY2ZFwwNjBcdWZmNmRcMDYxXHVmZjZkXDA2Mlx1ZmY2ZFwwNjNcdWZmNmRcMDY0XHVmZjZkXDA2NSIgKwotICAgICJcdWZmNmRcMDY2XHVmZjZkXDA2N1x1ZmY2ZFwwNzFcdWZmNmRcMDczXHVmZjZkXDA3NFx1ZmY2ZFwwNzVcdWZmNmQiICsKLSAgICAiXDEwMFx1ZmY2ZFwxMDFcdWZmNmRcMTAyXHVmZjZkXDEwN1x1ZmY2ZFwxMTBcdWZmNmRcMTExXHVmZjZkXDAwMSIgKwotICAgICJcMDAyXDAwMFwwMDRcMDA2XHUwMTVhXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNmJcMDA0XHVmZjZiIiArCi0gICAgIlwwMDVcdWZmNmJcMDA3XHVmZjZiXDAxMFx1ZmY2YlwwMTFcdWZmNmJcMDEyXHVmZjZiXDAxM1x1ZmY2YlwwMTQiICsKLSAgICAiXHVmZjZiXDAxNVx1ZmY2YlwwMTZcdWZmNmJcMDE3XHVmZjZiXDAyMFx1ZmY2YlwwMjFcdWZmNmJcMDIyXHVmZjZiIiArCi0gICAgIlwwMjNcdWZmNmJcMDI0XHVmZjZiXDAyNVx1ZmY2YlwwMzJcdWZmNmJcMDM1XHVmZjZiXDA1M1x1ZmY2YlwwNTQiICsKLSAgICAiXHVmZjZiXDA1NVx1ZmY2YlwwNTZcdWZmNmJcMDU3XHVmZjZiXDA2MFx1ZmY2YlwwNjFcdWZmNmJcMDYyXHVmZjZiIiArCi0gICAgIlwwNjNcdWZmNmJcMDY0XHVmZjZiXDA2NVx1ZmY2YlwwNjZcdWZmNmJcMDY3XHVmZjZiXDA3MVx1ZmY2YlwwNzMiICsKLSAgICAiXHVmZjZiXDA3NFx1ZmY2YlwwNzVcdWZmNmJcMTAwXHVmZjZiXDEwMVx1ZmY2YlwxMDJcdWZmNmJcMTA3XHVmZjZiIiArCi0gICAgIlwxMTBcdWZmNmJcMTExXHVmZjZiXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNmNcMDA0XHVmZjZjXDAwNSIgKwotICAgICJcdWZmNmNcMDA3XHVmZjZjXDAxMFx1ZmY2Y1wwMTFcdWZmNmNcMDEyXHVmZjZjXDAxM1x1ZmY2Y1wwMTRcdWZmNmMiICsKLSAgICAiXDAxNVx1ZmY2Y1wwMTZcdWZmNmNcMDE3XHVmZjZjXDAyMFx1ZmY2Y1wwMjFcdWZmNmNcMDIyXHVmZjZjXDAyMyIgKwotICAgICJcdWZmNmNcMDI0XHVmZjZjXDAyNVx1ZmY2Y1wwMzJcdWZmNmNcMDM1XHVmZjZjXDA1M1x1ZmY2Y1wwNTRcdWZmNmMiICsKLSAgICAiXDA1NVx1ZmY2Y1wwNTZcdWZmNmNcMDU3XHVmZjZjXDA2MFx1ZmY2Y1wwNjFcdWZmNmNcMDYyXHVmZjZjXDA2MyIgKwotICAgICJcdWZmNmNcMDY0XHVmZjZjXDA2NVx1ZmY2Y1wwNjZcdWZmNmNcMDY3XHVmZjZjXDA3MVx1ZmY2Y1wwNzNcdWZmNmMiICsKLSAgICAiXDA3NFx1ZmY2Y1wwNzVcdWZmNmNcMTAwXHVmZjZjXDEwMVx1ZmY2Y1wxMDJcdWZmNmNcMTA3XHVmZjZjXDExMCIgKwotICAgICJcdWZmNmNcMTExXHVmZjZjXDAwMVwwMDJcMDAwXDAwNFwwNzBcdTAxODhcMDAxXDAwMlwwMDBcMTQ2IiArCi0gICAgIlwwMTJcMjMzXDAzNlwyMzJcMDM3XDI0MFwwNDBcdTAxMjRcMDQxXDI0MVwwNDJcMjM3XDA0MyIgKwotICAgICJcMjM2XDA0NFwyNTBcMDQ1XDIyNlwwNDZcMjQ2XDA0N1wyNDRcMDUwXDIyNVwwNTFcMjQyIiArCi0gICAgIlwwNTJcMjQzXDA2MVwxMTFcMDYyXDA3N1wwNjNcMDY3XDA2NFwxMDJcMDY1XDEyNVwwNjYiICsKLSAgICAiXDA3MlwwNjdcMDUwXDA3MFwxNTVcMDcxXDAyM1wwNzNcMTMzXDA3NFwxNTRcMDc1XDEzNSIgKwotICAgICJcMDc2XDIwM1wwNzdcMTQyXDEwMFwxMTNcMTAxXDE3MVwxMDJcMTc1XDEwM1wyMDVcMTA0IiArCi0gICAgIlwyMDFcMTA1XDIwNFwxMDZcMDUyXDEwN1wxMTRcMTEwXDE3M1wxMTFcMTQzXDExMlx1MDE0NiIgKwotICAgICJcMTEzXHUwMTQ1XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjEiICsKLSAgICAiXDA1NlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMzFcMTIzXDAwMVwwMDJcMDAwXDExMCIgKwotICAgICJcMDAyXHVmZmQ4XDAwNVx1ZmZkOFwwMDdcdWZmZDhcMDEwXHVmZmQ4XDAxMVx1ZmZkOFwwMTJcdWZmZDhcMDEzIiArCi0gICAgIlx1ZmZkOFwwMTRcdWZmZDhcMDE1XHVmZmQ4XDAxNlx1ZmZkOFwwMTdcdWZmZDhcMDIwXHVmZmQ4XDAyMVx1ZmZkOCIgKwotICAgICJcMDIyXHVmZmQ4XDAyM1x1ZmZkOFwwMzJcdWZmZDhcMDUzXHVmZmQ4XDA1NFx1ZmZkOFwwNTVcdWZmZDhcMDU2IiArCi0gICAgIlx1ZmZkOFwwNTdcdWZmZDhcMDYwXHVmZmQ4XDA2MVx1ZmZkOFwwNjJcdWZmZDhcMDYzXHVmZmQ4XDA2NFx1ZmZkOCIgKwotICAgICJcMDY1XHVmZmQ4XDA2Nlx1ZmZkOFwwNzVcdWZmZDhcMTAwXHVmZmQ4XDEwMVx1ZmZkOFwxMDJcdWZmZDhcMTA3IiArCi0gICAgIlx1ZmZkOFwxMTBcdWZmZDhcMTExXHVmZmQ4XDAwMVwwMDJcMDAwXDAwNFwwNzJcdTAxOGJcMDAxXDAwMiIgKwotICAgICJcMDAwXDE0NlwwMTJcMjMzXDAzNlwyMzJcMDM3XDI0MFwwNDBcMjUyXDA0MVwyNDFcMDQyIiArCi0gICAgIlwyMzdcMDQzXDIzNlwwNDRcMjUwXDA0NVwyMjZcMDQ2XDI0NlwwNDdcMjQ0XDA1MFwyMjUiICsKLSAgICAiXDA1MVwyNDJcMDUyXDI0M1wwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NSIgKwotICAgICJcMTI1XDA2NlwwNzJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0IiArCi0gICAgIlwwNzVcMTM1XDA3NlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDMiICsKLSAgICAiXDIwNVwxMDRcMjAxXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0MyIgKwotICAgICJcMTEyXDEzMlwxMTNcMTI2XDExNFwyNTNcMTE1XDI0N1wxMTZcMjUxXDExN1wyMjdcMTIwIiArCi0gICAgIlwyMzRcMTIxXDIzMFwxMjJcMjQ1XDEyM1wyMzVcMTI0XDE1M1wxMzFcMTIzXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMTZcMDAyXHVmZmQyXDAwNVx1ZmZkMlwwMDdcdWZmZDJcMDEwXHVmZmQyXDAxMVx1ZmZkMlwwMTIiICsKLSAgICAiXHVmZmQyXDAxM1x1ZmZkMlwwMTRcdWZmZDJcMDE1XHVmZmQyXDAxNlx1ZmZkMlwwMTdcdWZmZDJcMDIwXHVmZmQyIiArCi0gICAgIlwwMjFcdWZmZDJcMDIyXHVmZmQyXDAyM1x1ZmZkMlwwMzJcdWZmZDJcMDUzXHVmZmQyXDA1NFx1ZmZkMlwwNTUiICsKLSAgICAiXHVmZmQyXDA1Nlx1ZmZkMlwwNTdcdWZmZDJcMDYwXHVmZmQyXDA2MVx1ZmZkMlwwNjJcdWZmZDJcMDYzXHVmZmQyIiArCi0gICAgIlwwNjRcdWZmZDJcMDY1XHVmZmQyXDA2Nlx1ZmZkMlwwNjdcdWZmZDJcMDcxXHVmZmQyXDA3M1x1ZmZkMlwwNzUiICsKLSAgICAiXHVmZmQyXDEwMFx1ZmZkMlwxMDFcdWZmZDJcMTAyXHVmZmQyXDEwN1x1ZmZkMlwxMTBcdWZmZDJcMTExXHVmZmQyIiArCi0gICAgIlwwMDFcMDAyXDAwMFwwMDRcMDAyXDAwMFwwMDFcMDAyXDAwMFwxNDZcMDEyXHVmZmE1XDAzNiIgKwotICAgICJcdWZmYTVcMDM3XHVmZmE1XDA0MFx1ZmZhNVwwNDFcdWZmYTVcMDQyXHVmZmE1XDA0M1x1ZmZhNVwwNDRcdWZmYTUiICsKLSAgICAiXDA0NVx1ZmZhNVwwNDZcdWZmYTVcMDQ3XHVmZmE1XDA1MFx1ZmZhNVwwNTFcdWZmYTVcMDUyXHVmZmE1XDA2MSIgKwotICAgICJcdWZmYTVcMDYyXHVmZmE1XDA2M1x1ZmZhNVwwNjRcdWZmYTVcMDY1XHVmZmE1XDA2Nlx1ZmZhNVwwNjdcdWZmYTUiICsKLSAgICAiXDA3MFx1ZmZhNVwwNzFcdWZmYTVcMDczXHVmZmE1XDA3NFx1ZmZhNVwwNzVcdWZmYTVcMDc2XHVmZmE1XDA3NyIgKwotICAgICJcdWZmYTVcMTAwXHVmZmE1XDEwMVx1ZmZhNVwxMDJcdWZmYTVcMTAzXHVmZmE1XDEwNFx1ZmZhNVwxMDVcdWZmYTUiICsKLSAgICAiXDEwNlx1ZmZhNVwxMDdcdWZmYTVcMTEwXHVmZmE1XDExMVx1ZmZhNVwxMTJcdWZmYTVcMTEzXHVmZmE1XDExNCIgKwotICAgICJcdWZmYTVcMTE1XHVmZmE1XDExNlx1ZmZhNVwxMTdcdWZmYTVcMTIwXHVmZmE1XDEyMVx1ZmZhNVwxMjJcdWZmYTUiICsKLSAgICAiXDEyM1x1ZmZhNVwxMjRcdWZmYTVcMTMxXHVmZmE1XDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmYTdcMDA0IiArCi0gICAgIlx1ZmZhN1wwMDVcdWZmYTdcMDA3XHVmZmE3XDAxMFx1ZmZhN1wwMTFcdWZmYTdcMDEyXHVmZmE3XDAxM1x1ZmZhNyIgKwotICAgICJcMDE0XHVmZmE3XDAxNVx1ZmZhN1wwMTZcdWZmYTdcMDE3XHVmZmE3XDAyMFx1ZmZhN1wwMjFcdWZmYTdcMDIyIiArCi0gICAgIlx1ZmZhN1wwMjNcdWZmYTdcMDI0XHVmZmE3XDAyNVx1ZmZhN1wwMzJcdWZmYTdcMDUzXHVmZmE3XDA1NFx1ZmZhNyIgKwotICAgICJcMDU1XHVmZmE3XDA1Nlx1ZmZhN1wwNTdcdWZmYTdcMDYwXHVmZmE3XDA2MVx1ZmZhN1wwNjJcdWZmYTdcMDYzIiArCi0gICAgIlx1ZmZhN1wwNjRcdWZmYTdcMDY1XHVmZmE3XDA2Nlx1ZmZhN1wwNjdcdWZmYTdcMDcxXHVmZmE3XDA3M1x1ZmZhNyIgKwotICAgICJcMDc0XHVmZmE3XDA3NVx1ZmZhN1wxMDBcdWZmYTdcMTAxXHVmZmE3XDEwMlx1ZmZhN1wxMDdcdWZmYTdcMTEwIiArCi0gICAgIlx1ZmZhN1wxMTFcdWZmYTdcMDAxXDAwMlwwMDBcMTQ2XDAxMlx1ZmZhYlwwMzZcdWZmYWJcMDM3XHVmZmFiIiArCi0gICAgIlwwNDBcdWZmYWJcMDQxXHVmZmFiXDA0Mlx1ZmZhYlwwNDNcdWZmYWJcMDQ0XHVmZmFiXDA0NVx1ZmZhYlwwNDYiICsKLSAgICAiXHVmZmFiXDA0N1x1ZmZhYlwwNTBcdWZmYWJcMDUxXHVmZmFiXDA1Mlx1ZmZhYlwwNjFcdWZmYWJcMDYyXHVmZmFiIiArCi0gICAgIlwwNjNcdWZmYWJcMDY0XHVmZmFiXDA2NVx1ZmZhYlwwNjZcdWZmYWJcMDY3XHVmZmFiXDA3MFx1ZmZhYlwwNzEiICsKLSAgICAiXHVmZmFiXDA3M1x1ZmZhYlwwNzRcdWZmYWJcMDc1XHVmZmFiXDA3Nlx1ZmZhYlwwNzdcdWZmYWJcMTAwXHVmZmFiIiArCi0gICAgIlwxMDFcdWZmYWJcMTAyXHVmZmFiXDEwM1x1ZmZhYlwxMDRcdWZmYWJcMTA1XHVmZmFiXDEwNlx1ZmZhYlwxMDciICsKLSAgICAiXHVmZmFiXDExMFx1ZmZhYlwxMTFcdWZmYWJcMTEyXHVmZmFiXDExM1x1ZmZhYlwxMTRcdWZmYWJcMTE1XHVmZmFiIiArCi0gICAgIlwxMTZcdWZmYWJcMTE3XHVmZmFiXDEyMFx1ZmZhYlwxMjFcdWZmYWJcMTIyXHVmZmFiXDEyM1x1ZmZhYlwxMjQiICsKLSAgICAiXHVmZmFiXDEzMVx1ZmZhYlwwMDFcMDAyXDAwMFwyMDBcMDA2XDEwMVwwMTBcMDc2XDAxMVwxMzQiICsKLSAgICAiXDAxMlwxMDdcMDI0XDAyMlwwMjVcMDA2XDAyN1wwNzBcMDMwXDExN1wwMzNcMDcxXDAzNCIgKwotICAgICJcMTIwXDAzNlwwNDBcMDM3XDE1NlwwNDBcMTQ1XDA0MVwwNDVcMDQyXDAwNFwwNDNcMDQxIiArCi0gICAgIlwwNDRcMDEwXDA0NVwwMjBcMDQ2XDAxMlwwNDdcMDMxXDA1MFwxMTBcMDUxXDA2NlwwNTIiICsKLSAgICAiXDA2MVwwNjFcMTExXDA2MlwwNzdcMDYzXDA2N1wwNjRcMTAyXDA2NVwxMjVcMDY2XDA3MiIgKwotICAgICJcMDY3XDA1MFwwNzBcMTU1XDA3MVwwMjNcMDczXDEzM1wwNzRcMTU0XDA3NVwxMzVcMDc2IiArCi0gICAgIlwyMDNcMDc3XDE0MlwxMDBcMTEzXDEwMVwxNzFcMTAyXDE3NVwxMDNcMjA1XDEwNFwyMDEiICsKLSAgICAiXDEwNVwyMDRcMTA2XDA1MlwxMDdcMTE0XDExMFwxNzNcMTExXDE0M1wxMTJcMTMyXDExMyIgKwotICAgICJcMTI2XDExNFwwMjRcMTE1XDAxNlwxMTZcMDQ3XDExN1wxMjRcMTIwXDE0MVwxMjFcMDU2IiArCi0gICAgIlwxMjJcMDUxXDEyM1wwNTVcMTI0XDE1M1wxMjVcMDM0XDEyNlwwMzVcMTI3XDEwNFwxMzAiICsKLSAgICAiXDE2N1wxMzFcMTIzXDAwMVwwMDJcMDAwXDAyNFwwMDJcdWZmZjBcMDA1XHVmZmYwXDAwN1x1ZmZmMCIgKwotICAgICJcMDMyXHVmZmYwXDEwMFx1ZmZmMFwxMDFcdWZmZjBcMTA3XHVmZmYwXDExMFwyMDBcMTExXHVmZmYwXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMjRcMDAyXHVmZmJjXDAwNVx1ZmZiY1wwMDdcdWZmYmNcMDEwXHVmZmJjXDAxMVx1ZmZiYyIgKwotICAgICJcMDEyXHVmZmJjXDAxM1x1ZmZiY1wwMTRcdWZmYmNcMDE1XHVmZmJjXDAxNlx1ZmZiY1wwMTdcdWZmYmNcMDIwIiArCi0gICAgIlx1ZmZiY1wwMjFcdWZmYmNcMDIyXHVmZmJjXDAyM1x1ZmZiY1wwMjRcMzc1XDAyNVwzNzZcMDMyXHVmZmJjIiArCi0gICAgIlwwNTNcdWZmYmNcMDU0XHVmZmJjXDA1NVx1ZmZiY1wwNTZcdWZmYmNcMDU3XHVmZmJjXDA2MFx1ZmZiY1wwNjEiICsKLSAgICAiXHVmZmJjXDA2Mlx1ZmZiY1wwNjNcdWZmYmNcMDY0XHVmZmJjXDA2NVx1ZmZiY1wwNjZcdWZmYmNcMDY3XHVmZmJjIiArCi0gICAgIlwwNzFcdWZmYmNcMDczXHVmZmJjXDA3NFx1ZmZiY1wwNzVcdWZmYmNcMTAwXHVmZmJjXDEwMVx1ZmZiY1wxMDIiICsKLSAgICAiXHVmZmJjXDEwN1x1ZmZiY1wxMTBcdWZmYmNcMTExXHVmZmJjXDAwMVwwMDJcMDAwXDE0NlwwMTJcdWZmYWQiICsKLSAgICAiXDAzNlx1ZmZhZFwwMzdcdWZmYWRcMDQwXHVmZmFkXDA0MVx1ZmZhZFwwNDJcdWZmYWRcMDQzXHVmZmFkXDA0NCIgKwotICAgICJcdWZmYWRcMDQ1XHVmZmFkXDA0Nlx1ZmZhZFwwNDdcdWZmYWRcMDUwXHVmZmFkXDA1MVx1ZmZhZFwwNTJcdWZmYWQiICsKLSAgICAiXDA2MVx1ZmZhZFwwNjJcdWZmYWRcMDYzXHVmZmFkXDA2NFx1ZmZhZFwwNjVcdWZmYWRcMDY2XHVmZmFkXDA2NyIgKwotICAgICJcdWZmYWRcMDcwXHVmZmFkXDA3MVx1ZmZhZFwwNzNcdWZmYWRcMDc0XHVmZmFkXDA3NVx1ZmZhZFwwNzZcdWZmYWQiICsKLSAgICAiXDA3N1x1ZmZhZFwxMDBcdWZmYWRcMTAxXHVmZmFkXDEwMlx1ZmZhZFwxMDNcdWZmYWRcMTA0XHVmZmFkXDEwNSIgKwotICAgICJcdWZmYWRcMTA2XHVmZmFkXDEwN1x1ZmZhZFwxMTBcdWZmYWRcMTExXHVmZmFkXDExMlx1ZmZhZFwxMTNcdWZmYWQiICsKLSAgICAiXDExNFx1ZmZhZFwxMTVcdWZmYWRcMTE2XHVmZmFkXDExN1x1ZmZhZFwxMjBcdWZmYWRcMTIxXHVmZmFkXDEyMiIgKwotICAgICJcdWZmYWRcMTIzXHVmZmFkXDEyNFx1ZmZhZFwxMzFcdWZmYWRcMDAxXDAwMiIgfSk7Ci0KLSAgLyoqIEFjY2VzcyB0byBwYXJzZS1hY3Rpb24gdGFibGUuICovCi0gIHB1YmxpYyBzaG9ydFtdW10gYWN0aW9uX3RhYmxlKCkge3JldHVybiBfYWN0aW9uX3RhYmxlO30KLQotICAvKiogPGNvZGU+cmVkdWNlX2dvdG88L2NvZGU+IHRhYmxlLiAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0W11bXSBfcmVkdWNlX3RhYmxlID0gCi0gICAgdW5wYWNrRnJvbVN0cmluZ3MobmV3IFN0cmluZ1tdIHsKLSAgICAiXDAwMFx1MDE5MlwwMDBcMTc0XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwIiArCi0gICAgIlwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzM1wwMzYiICsKLSAgICAiXDAzNlwxNTdcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NCIgKwotICAgICJcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyIiArCi0gICAgIlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxXDA2MVwwNzRcMDYyXDAyNlwwNjUiICsKLSAgICAiXDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwXDA2MVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0MyIgKwotICAgICJcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyIiArCi0gICAgIlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjIiICsKLSAgICAiXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDExNFwwMTJcMTE1XDExNVwxMTZcMDM1XDExNyIgKwotICAgICJcMDY0XDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTIwXDAwM1wxMzdcMDA1XDA0MVwwMDYiICsKLSAgICAiXDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMSIgKwotICAgICJcMDMyXDEzNVwwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0IiArCi0gICAgIlwxNjNcMDQ1XDE3NlwwNDZcdTAxOTJcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNCIgKwotICAgICJcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzIiArCi0gICAgIlwwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDQiICsKLSAgICAiXDExMlwxMzBcMTEzXDEyMFwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDQ2XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExIiArCi0gICAgIlwwMDdcMTUwXDAyMVx1MDEyNFwwMjNcMDYzXDA0MFx1MDE4ZVwwNzFcMTYwXDA3MlwwNTdcMTAzIiArCi0gICAgIlwwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDQiICsKLSAgICAiXDExMlwxMzBcMTEzXDEyMFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDEyMFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMiIgKwotICAgICJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzdcMTYxXDA0MFwxNjdcMDQxIiArCi0gICAgIlwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcdTAxN2NcMDcxXDE2MCIgKwotICAgICJcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwIiArCi0gICAgIlwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzMiICsKLSAgICAiXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjJcMDI3XDEyMyIgKwotICAgICJcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDA0NlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMSIgKwotICAgICJcMDA3XDE1MFwwMjFcdTAxMjRcMDIzXDA2M1wwNDBcdTAxNzJcMDcxXDE2MFwwNzJcMDU3XDEwMyIgKwotICAgICJcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0IiArCi0gICAgIlwxMTJcMTMwXDExM1wxMjBcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwNFwwMzRcdTAxNTgiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDEwXDAyN1x1MDEzOFwwNjNcdTAxMzdcMDY0XHUwMTMzXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDRcMTI1XHUwMTI1IiArCi0gICAgIlwwMDFcMDAxXDAwMFwwNDZcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMjEiICsKLSAgICAiXHUwMTI0XDAyM1wwNjNcMDQwXHUwMTIyXDA3MVwxNjBcMDcyXDA1N1wxMDNcMDI0XDEwNFwxNTEiICsKLSAgICAiXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExMyIgKwotICAgICJcMTIwXDAwMVwwMDFcMDAwXDAxNlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwIiArCi0gICAgIlwwMjFcMjUzXDAyMlx1MDEyMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDEyNlwwMDNcMTM3IiArCi0gICAgIlwwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjUiICsKLSAgICAiXDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNiIgKwotICAgICJcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcdTAxMjBcMDcxXDE2MFwwNzIiICsKLSAgICAiXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNCIgKwotICAgICJcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3IiArCi0gICAgIlwxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjBcMTQ3XDEyMVwxNDUiICsKLSAgICAiXDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDA0XDAzNCIgKwotICAgICJcdTAxMWZcMDAxXDAwMVwwMDBcMTcyXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTAiICsKLSAgICAiXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzMyIgKwotICAgICJcdTAxMWNcMDM2XDE1N1wwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzciICsKLSAgICAiXDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NCIgKwotICAgICJcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYxXDA3NFwwNjJcMDI2IiArCi0gICAgIlwwNjVcMTc1XDA2NlwwMDZcMDY3XDA2MlwwNzBcMDYxXDA3MVwxNjBcMDcyXDA1N1wwNzMiICsKLSAgICAiXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NCIgKwotICAgICJcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwIiArCi0gICAgIlwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTE1XDExNVwxMTZcMDM1XDExN1wwNjQiICsKLSAgICAiXDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDEyNlwwMDMiICsKLSAgICAiXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2MyIgKwotICAgICJcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyIiArCi0gICAgIlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMzczXDA3MVwxNjAiICsKLSAgICAiXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMCIgKwotICAgICJcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczIiArCi0gICAgIlwxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTIwXDE0N1wxMjEiICsKLSAgICAiXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwNFwwMzRcMjExXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTUyXDAwM1wxMzdcMDA1XDA0MVwwMDYiICsKLSAgICAiXDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMSIgKwotICAgICJcMDMyXDEzNVwwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0IiArCi0gICAgIlwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDIiICsKLSAgICAiXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYyXDAyNlwwNjdcMDYyXDA3MCIgKwotICAgICJcMjAxXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwIiArCi0gICAgIlwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDUiICsKLSAgICAiXDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMCIgKwotICAgICJcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTM2XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwNyIgKwotICAgICJcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1IiArCi0gICAgIlwwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDUiICsKLSAgICAiXDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwyMTBcMDU1XDAzMiIgKwotICAgICJcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3IiArCi0gICAgIlwxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjUiICsKLSAgICAiXDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDEyMCIgKwotICAgICJcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDEzNlwwMDNcMTM3IiArCi0gICAgIlwwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjUiICsKLSAgICAiXDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNiIgKwotICAgICJcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzIiArCi0gICAgIlwwNTZcMDU0XDIwN1wwNTVcMDMyXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTQiICsKLSAgICAiXDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwMyIgKwotICAgICJcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0IiArCi0gICAgIlwxMTJcMTMwXDExM1wxMjBcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDRcMTI0XDIxMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE3MlwwMDNcMTM3XDAwNVwwNDFcMDA2IiArCi0gICAgIlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzEiICsKLSAgICAiXDAzMlwxMzVcMDMzXDIxNFwwMzZcMTU3XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MiIgKwotICAgICJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTJcMDE0IiArCi0gICAgIlwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1N1wxMjZcMDYwXDE3MVwwNjEiICsKLSAgICAiXDA3NFwwNjJcMDI2XDA2NVwxNzVcMDY2XDAwNlwwNjdcMDYyXDA3MFwwNjFcMDcxXDE2MCIgKwotICAgICJcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwIiArCi0gICAgIlwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzMiICsKLSAgICAiXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMTVcMTE1XDExNiIgKwotICAgICJcMDM1XDExN1wwNjRcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDE3MFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDciICsKLSAgICAiXDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNSIgKwotICAgICJcMDM2XDE1N1wwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0IiArCi0gICAgIlwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDIiICsKLSAgICAiXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYxXDIxN1wwNjJcMDI2XDA2NSIgKwotICAgICJcMTc1XDA2NlwwMDZcMDY3XDA2MlwwNzBcMDYxXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzIiArCi0gICAgIlwwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDIiICsKLSAgICAiXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MiIgKwotICAgICJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTE1XDExNVwxMTZcMDM1XDExN1wwNjRcMTIwIiArCi0gICAgIlwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE3MFwwMDNcMTM3XDAwNSIgKwotICAgICJcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwIiArCi0gICAgIlwwMjZcMDMxXDAzMlwxMzVcMDM2XDE1N1wwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDIiICsKLSAgICAiXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNCIgKwotICAgICJcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYxIiArCi0gICAgIlwyMjJcMDYyXDAyNlwwNjVcMTc1XDA2NlwwMDZcMDY3XDA2MlwwNzBcMDYxXDA3MVwxNjAiICsKLSAgICAiXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMCIgKwotICAgICJcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczIiArCi0gICAgIlwxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTE1XDExNVwxMTYiICsKLSAgICAiXDAzNVwxMTdcMDY0XDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMTZcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3IiArCi0gICAgIlwxNTBcMDIxXDI1M1wwMjJcMjMwXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMTcwXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyIiArCi0gICAgIlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzNlwxNTdcMDM3XDE2MVwwNDAiICsKLSAgICAiXDE2N1wwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyNyIgKwotICAgICJcMDQ3XDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3IiArCi0gICAgIlwxMjZcMDYwXDE3MVwwNjFcMjU1XDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2N1wwNjIiICsKLSAgICAiXDA3MFwwNjFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NiIgKwotICAgICJcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxIiArCi0gICAgIlwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTMiICsKLSAgICAiXDEyMFwxMTVcMTE1XDExNlwwMzVcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyNyIgKwotICAgICJcMTIzXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDIwXDAwM1wxMzdcMDA1IiArCi0gICAgIlwwNDFcMDA2XDExMVwwMDdcMTUwXDAyMVwyNTNcMDIyXDI2MFwwMzVcMjU3XDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE3MFwwMDNcMTM3XDAwNSIgKwotICAgICJcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwIiArCi0gICAgIlwwMjZcMDMxXDAzMlwxMzVcMDM2XDE1N1wwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDIiICsKLSAgICAiXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNCIgKwotICAgICJcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYxIiArCi0gICAgIlwyNjJcMDYyXDAyNlwwNjVcMTc1XDA2NlwwMDZcMDY3XDA2MlwwNzBcMDYxXDA3MVwxNjAiICsKLSAgICAiXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMCIgKwotICAgICJcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczIiArCi0gICAgIlwxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTE1XDExNVwxMTYiICsKLSAgICAiXDAzNVwxMTdcMDY0XDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTcwXDAwM1wxMzdcMDA1IiArCi0gICAgIlwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTAiICsKLSAgICAiXDAyNlwwMzFcMDMyXDEzNVwwMzZcMTU3XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MiIgKwotICAgICJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTJcMDE0IiArCi0gICAgIlwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1N1wxMjZcMDYwXDE3MVwwNjEiICsKLSAgICAiXDI2NVwwNjJcMDI2XDA2NVwxNzVcMDY2XDAwNlwwNjdcMDYyXDA3MFwwNjFcMDcxXDE2MCIgKwotICAgICJcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwIiArCi0gICAgIlwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzMiICsKLSAgICAiXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMTVcMTE1XDExNiIgKwotICAgICJcMDM1XDExN1wwNjRcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAxNlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDciICsKLSAgICAiXDE1MFwwMjFcMjUzXDAyMlwyNjdcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE3MCIgKwotICAgICJcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzIiArCi0gICAgIlwwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM2XDE1N1wwMzdcMTYxXDA0MFwxNjciICsKLSAgICAiXDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0NyIgKwotICAgICJcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2IiArCi0gICAgIlwwNjBcMTcxXDA2MVwyNzFcMDYyXDAyNlwwNjVcMTc1XDA2NlwwMDZcMDY3XDA2MlwwNzAiICsKLSAgICAiXDA2MVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMCIgKwotICAgICJcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1IiArCi0gICAgIlwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjAiICsKLSAgICAiXDExNVwxMTVcMTE2XDAzNVwxMTdcMDY0XDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyMyIgKwotICAgICJcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTcyIiArCi0gICAgIlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjMiICsKLSAgICAiXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzNcMjc0XDAzNlwxNTdcMDM3XDE2MSIgKwotICAgICJcMDQwXDE2N1wwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2IiArCi0gICAgIlwxMjdcMDQ3XDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDMiICsKLSAgICAiXDA1N1wxMjZcMDYwXDE3MVwwNjFcMDc0XDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2NyIgKwotICAgICJcMDYyXDA3MFwwNjFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyIiArCi0gICAgIlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDQiICsKLSAgICAiXDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMCIgKwotICAgICJcMTEzXDEyMFwxMTVcMTE1XDExNlwwMzVcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyIiArCi0gICAgIlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwxNzBcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMSIgKwotICAgICJcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM2XDE1N1wwMzdcMTYxIiArCi0gICAgIlwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDYiICsKLSAgICAiXDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0MyIgKwotICAgICJcMDU3XDEyNlwwNjBcMTcxXDA2MVwyNzdcMDYyXDAyNlwwNjVcMTc1XDA2NlwwMDZcMDY3IiArCi0gICAgIlwwNjJcMDcwXDA2MVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTIiICsKLSAgICAiXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNCIgKwotICAgICJcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwIiArCi0gICAgIlwxMTNcMTIwXDExNVwxMTVcMTE2XDAzNVwxMTdcMDY0XDEyMFwxNDdcMTIxXDE0NVwxMjIiICsKLSAgICAiXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzBcMDAzXDEzNyIgKwotICAgICJcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1IiArCi0gICAgIlwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzNlwxNTdcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTMiICsKLSAgICAiXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MiIgKwotICAgICJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxIiArCi0gICAgIlwwNjFcMzAxXDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwXDA2MVwwNzEiICsKLSAgICAiXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NSIgKwotICAgICJcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2IiArCi0gICAgIlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDExNVwxMTUiICsKLSAgICAiXDExNlwwMzVcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAyMFwwMDNcMTM3IiArCi0gICAgIlwwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTZcMzA3XDAxN1wzMDZcMDIxXDMxMFwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDE2XDAwM1wxMzdcMDA1IiArCi0gICAgIlwwNDFcMDA2XDExMVwwMDdcMTUwXDAxM1wzMTNcMDIxXDMxNFwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDZcMDA1XDMyM1wwMTBcMzI3XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwNlwwMDRcMzcxXDAwNVwzNzJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDExNiIgKwotICAgICJcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzIiArCi0gICAgIlwwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTMiICsKLSAgICAiXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwzNzdcMDcxXDE2MFwwNzJcMDU3XDA3MyIgKwotICAgICJcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0IiArCi0gICAgIlwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTAiICsKLSAgICAiXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMSIgKwotICAgICJcMDAwXDExNlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxIiArCi0gICAgIlwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzdcMTYxXDA0MFwxNjciICsKLSAgICAiXDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjNcMDQ1XDM3NlwwNzFcMTYwXDA3MiIgKwotICAgICJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0IiArCi0gICAgIlwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDciICsKLSAgICAiXDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDEyMlwwMjdcMTIzXDA3MiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNDJcMDAzIiArCi0gICAgIlwxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjMiICsKLSAgICAiXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MiIgKwotICAgICJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTJcMDE0IiArCi0gICAgIlwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcdTAxMGJcMDYwXDE3MVwwNzFcMTYwXDA3MiIgKwotICAgICJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0IiArCi0gICAgIlwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDciICsKLSAgICAiXDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDEyMFwxNDdcMTIxXDE0NSIgKwotICAgICJcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDE0MlwwMDNcMTM3XDAwNVwwNDFcMDA2IiArCi0gICAgIlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzEiICsKLSAgICAiXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NCIgKwotICAgICJcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyIiArCi0gICAgIlwwNTVcMDMyXDA1Nlx1MDEwYVwwNjBcMTcxXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NCIgKwotICAgICJcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2IiArCi0gICAgIlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTEiICsKLSAgICAiXDEwNFwxMTJcMTMwXDExM1wxMjBcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MiIgKwotICAgICJcMDAxXDAwMVwwMDBcMTQyXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwIiArCi0gICAgIlwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjEiICsKLSAgICAiXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NiIgKwotICAgICJcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcdTAxMDkiICsKLSAgICAiXDA2MFwxNzFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NiIgKwotICAgICJcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxIiArCi0gICAgIlwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTMiICsKLSAgICAiXDEyMFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDE0MiIgKwotICAgICJcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzIiArCi0gICAgIlwwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTMiICsKLSAgICAiXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MiIgKwotICAgICJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1Nlx1MDEwNFwwNjBcMTcxXDA3MVwxNjAiICsKLSAgICAiXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1XDEwMCIgKwotICAgICJcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDZcMDczIiArCi0gICAgIlwxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTIwXDE0N1wxMjEiICsKLSAgICAiXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE0MCIgKwotICAgICJcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzIiArCi0gICAgIlwwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTMiICsKLSAgICAiXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MiIgKwotICAgICJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA2MFx1MDEwOFwwNzFcMTYwXDA3MlwwNTciICsKLSAgICAiXDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMSIgKwotICAgICJcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxIiArCi0gICAgIlwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDEyMFwxNDdcMTIxXDE0NVwxMjIiICsKLSAgICAiXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDE0MFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMSIgKwotICAgICJcMDA3XDE1MFwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyIiArCi0gICAgIlwxMzVcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTNcMDQyXDEzNlwwNDNcMDc3XDA0NFwxNjMiICsKLSAgICAiXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MlwwMTRcMDUzXDA1NlwwNTRcMDQyXDA1NSIgKwotICAgICJcMDMyXDA2MFx1MDEwN1wwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTIiICsKLSAgICAiXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNCIgKwotICAgICJcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwIiArCi0gICAgIlwxMTNcMTIwXDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDRcMDA1XHUwMTEwXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDE2XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDIxIiArCi0gICAgIlwyNTNcMDIyXHUwMTEyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzBcMDAzXDEzNyIgKwotICAgICJcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1IiArCi0gICAgIlwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzNlwxNTdcMDM3XDE2MVwwNDBcMTY3XDA0MVwwNTMiICsKLSAgICAiXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDdcMDEzXDA1MiIgKwotICAgICJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNlwwNjBcMTcxIiArCi0gICAgIlwwNjFcdTAxMTRcMDYyXDAyNlwwNjVcMTc1XDA2NlwwMDZcMDY3XDA2MlwwNzBcMDYxXDA3MSIgKwotICAgICJcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMFwwNzdcMTY1IiArCi0gICAgIlwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1XDAyNVwxMDYiICsKLSAgICAiXDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjBcMTE1XDExNSIgKwotICAgICJcMTE2XDAzNVwxMTdcMDY0XDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzJcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTEiICsKLSAgICAiXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMSIgKwotICAgICJcdTAxMTZcMDMyXDEzNVwwMzZcMTU3XDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MlwxMzYiICsKLSAgICAiXDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTJcMDE0XDA1MyIgKwotICAgICJcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1N1wxMjZcMDYwXDE3MVwwNjFcdTAxMTciICsKLSAgICAiXDA2MlwwMjZcMDY1XDE3NVwwNjZcMDA2XDA2N1wwNjJcMDcwXDA2MVwwNzFcMTYwXDA3MiIgKwotICAgICJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0IiArCi0gICAgIlwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDciICsKLSAgICAiXDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDExNVwxMTVcMTE2XDAzNSIgKwotICAgICJcMTE3XDA2NFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzAiICsKLSAgICAiXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyXDAyMyIgKwotICAgICJcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzNlwxNTdcMDM3XDE2MVwwNDBcMTY3IiArCi0gICAgIlwwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyN1wwNDciICsKLSAgICAiXDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3XDEyNiIgKwotICAgICJcMDYwXDE3MVwwNjFcdTAxMWJcMDYyXDAyNlwwNjVcMTc1XDA2NlwwMDZcMDY3XDA2MlwwNzAiICsKLSAgICAiXDA2MVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMCIgKwotICAgICJcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1IiArCi0gICAgIlwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjAiICsKLSAgICAiXDExNVwxMTVcMTE2XDAzNVwxMTdcMDY0XDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyMyIgKwotICAgICJcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwNFwxMjQiICsKLSAgICAiXDIxMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMTUwXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3MyIgKwotICAgICJcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwIiArCi0gICAgIlwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjciICsKLSAgICAiXDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1NyIgKwotICAgICJcMTI2XDA2MFwxNzFcMDYyXDAyNlwwNjdcdTAxM2NcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDMiICsKLSAgICAiXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMiIgKwotICAgICJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyIiArCi0gICAgIlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjMiICsKLSAgICAiXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMTUwXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwIiArCi0gICAgIlwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjEiICsKLSAgICAiXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NiIgKwotICAgICJcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzIiArCi0gICAgIlwwNTdcMTI2XDA2MFwxNzFcMDYyXDAyNlwwNjdcdTAxM2JcMDcxXDE2MFwwNzJcMDU3XDA3MyIgKwotICAgICJcMTQzXDA3NFwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0IiArCi0gICAgIlwxMDJcMDE2XDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTAiICsKLSAgICAiXDE2MlwxMTFcMTA0XDExMlwxMzBcMTEzXDEyMFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyNyIgKwotICAgICJcMTIzXDA3MlwwMDFcMDAxXDAwMFwxNTBcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3IiArCi0gICAgIlwxNTBcMDEwXDE3M1wwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzUiICsKLSAgICAiXDAzN1wxNjFcMDQwXDE2N1wwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NSIgKwotICAgICJcMTc2XDA0NlwxMjdcMDQ3XDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyIiArCi0gICAgIlwwNTZcMDQzXDA1N1wxMjZcMDYwXDE3MVwwNjJcMDI2XDA2N1x1MDEzYVwwNzFcMTYwXDA3MiIgKwotICAgICJcMDU3XDA3M1wxNDNcMDc0XDExNFwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0IiArCi0gICAgIlwxMDFcMTY0XDEwMlwwMTZcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDciICsKLSAgICAiXDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDEyMFwxNDdcMTIxXDE0NSIgKwotICAgICJcMTIyXDAyN1wxMjNcMDcyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDQ2XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwNyIgKwotICAgICJcMTUwXDAyMFx1MDE0M1wwMjFcdTAxNDZcMDMwXHUwMTQwXDA1MVx1MDE0MlwwNzJcdTAxNDFcMTAzXDAyNCIgKwotICAgICJcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyIiArCi0gICAgIlwxMzBcMTEzXDEyMFwwMDFcMDAxXDAwMFwwMDRcMDI0XHUwMTRjXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMjBcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTUiICsKLSAgICAiXHUwMTUwXDAxN1x1MDE1MVwwMjFcMzEwXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMjBcMDAzXDEzN1wwMDVcMDQxXDAwNiIgKwotICAgICJcMTExXDAwN1wxNTBcMDExXHUwMTU0XDAxNFx1MDE1NVwwMjFcdTAxNTZcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDA0XDEyNFwyMTJcMDAxXDAwMVwwMDBcMDIwXDAwM1wxMzdcMDA1XDA0MSIgKwotICAgICJcMDA2XDExMVwwMDdcMTUwXDAxMlx1MDE1Y1wwMTRcdTAxNWRcMDIxXHUwMTU2XDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAxNlwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMyIgKwotICAgICJcdTAxNjBcMDIxXDMxNFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMjBcMDAzXDEzN1wwMDVcMDQxIiArCi0gICAgIlwwMDZcMTExXDAwN1wxNTBcMDIxXDI1M1wwMjJcMjYwXDAzNVx1MDE2N1wwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDE3MFwwMDNcMTM3XDAwNVwwNDFcMDA2XDExMVwwMDdcMTUwIiArCi0gICAgIlwwMTBcMTczXDAyMVwxMDJcMDIzXDA2M1wwMjVcMDEwXDAyNlwwMzFcMDMyXDEzNVwwMzYiICsKLSAgICAiXDE1N1wwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2MyIgKwotICAgICJcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1IiArCi0gICAgIlwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYxXHUwMTY5XDA2MlwwMjZcMDY1XDE3NSIgKwotICAgICJcMDY2XDAwNlwwNjdcMDYyXDA3MFwwNjFcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0IiArCi0gICAgIlwxMTRcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTYiICsKLSAgICAiXDEwM1wwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMSIgKwotICAgICJcMTA0XDExMlwxMzBcMTEzXDEyMFwxMTVcMTE1XDExNlwwMzVcMTE3XDA2NFwxMjBcMTQ3IiArCi0gICAgIlwxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDIwXDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDIwIiArCi0gICAgIlx1MDE3MFwwMjFcdTAxNDZcMDUwXHUwMTZmXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwxNDZcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczIiArCi0gICAgIlwwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDAiICsKLSAgICAiXDE2N1wwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyNyIgKwotICAgICJcMDQ3XDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3IiArCi0gICAgIlwxMjZcMDYwXDE3MVwwNjJcdTAxNzlcMDcxXDE2MFwwNzJcMDU3XDA3M1wxNDNcMDc0XDExNCIgKwotICAgICJcMDc1XDA1MlwwNzZcMDIwXDA3N1wxNjVcMTAwXDAwNFwxMDFcMTY0XDEwMlwwMTZcMTAzIiArCi0gICAgIlwwMjRcMTA0XDE1MVwxMDVcMDI1XDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDQiICsKLSAgICAiXDExMlwxMzBcMTEzXDEyMFwxMjBcMTQ3XDEyMVwxNDVcMTIyXDAyN1wxMjNcMDcyXDAwMSIgKwotICAgICJcMDAxXDAwMFwxNDRcMDAzXDEzN1wwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMTBcMTczIiArCi0gICAgIlwwMjFcMTAyXDAyM1wwNjNcMDI1XDAxMFwwMjZcMDMxXDAzMlwxMzVcMDM3XDE2MVwwNDAiICsKLSAgICAiXDE2N1wwNDFcMDUzXDA0MlwxMzZcMDQzXDA3N1wwNDRcMTYzXDA0NVwxNzZcMDQ2XDEyNyIgKwotICAgICJcMDQ3XDAxM1wwNTJcMDE0XDA1M1wwNTZcMDU0XDA0MlwwNTVcMDMyXDA1NlwwNDNcMDU3IiArCi0gICAgIlx1MDE3OFwwNjBcMTcxXDA3MVwxNjBcMDcyXDA1N1wwNzNcMTQzXDA3NFwxMTRcMDc1XDA1MiIgKwotICAgICJcMDc2XDAyMFwwNzdcMTY1XDEwMFwwMDRcMTAxXDE2NFwxMDJcMDE2XDEwM1wwMjRcMTA0IiArCi0gICAgIlwxNTFcMTA1XDAyNVwxMDZcMDczXDEwN1wxMjFcMTEwXDE2MlwxMTFcMTA0XDExMlwxMzAiICsKLSAgICAiXDExM1wxMjBcMTIwXDE0N1wxMjFcMTQ1XDEyMlwwMjdcMTIzXDA3MlwwMDFcMDAxXDAwMCIgKwotICAgICJcMTQ0XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDEwXDE3M1wwMjFcMTAyIiArCi0gICAgIlwwMjNcMDYzXDAyNVwwMTBcMDI2XDAzMVwwMzJcMTM1XDAzN1wxNjFcMDQwXDE2N1wwNDEiICsKLSAgICAiXDA1M1wwNDJcMTM2XDA0M1wwNzdcMDQ0XDE2M1wwNDVcMTc2XDA0NlwxMjdcMDQ3XDAxMyIgKwotICAgICJcMDUyXDAxNFwwNTNcMDU2XDA1NFwwNDJcMDU1XDAzMlwwNTZcMDQzXDA1N1x1MDE3N1wwNjAiICsKLSAgICAiXDE3MVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0XDA3NVwwNTJcMDc2XDAyMCIgKwotICAgICJcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDNcMDI0XDEwNFwxNTFcMTA1IiArCi0gICAgIlwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNFwxMTJcMTMwXDExM1wxMjAiICsKLSAgICAiXDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwNlwxMTFcdTAxN2ZcMTEzXHUwMTgwXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDQ2XDAwM1wxMzdcMDA1XDA0MVwwMDZcMTExXDAwN1wxNTBcMDIwXHUwMTQzXDAyMSIgKwotICAgICJcdTAxNDZcMDMwXHUwMTQwXDA1MVx1MDE4OFwwNzJcdTAxNDFcMTAzXDAyNFwxMDRcMTUxXDEwNVwwMjUiICsKLSAgICAiXDEwNlwwNzNcMTA3XDEyMVwxMTBcMTYyXDExMVwxMDRcMTEyXDEzMFwxMTNcMTIwXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAyMFwwMDNcMTM3IiArCi0gICAgIlwwMDVcMDQxXDAwNlwxMTFcMDA3XDE1MFwwMjBcdTAxNzBcMDIxXHUwMTQ2XDA1MFx1MDE4YlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTU0XDAwM1wxMzdcMDA1IiArCi0gICAgIlwwNDFcMDA2XDExMVwwMDdcMTUwXDAxMFwxNzNcMDIxXDEwMlwwMjNcMDYzXDAyNVwwMTAiICsKLSAgICAiXDAyNlwwMzFcMDMyXDEzNVwwMzdcMTYxXDA0MFwxNjdcMDQxXDA1M1wwNDJcMTM2XDA0MyIgKwotICAgICJcMDc3XDA0NFwxNjNcMDQ1XDE3NlwwNDZcMTI3XDA0N1wwMTNcMDUyXDAxNFwwNTNcMDU2IiArCi0gICAgIlwwNTRcMDQyXDA1NVwwMzJcMDU2XDA0M1wwNTdcMTI2XDA2MFwxNzFcMDYyXDAyNlwwNjUiICsKLSAgICAiXHUwMTkxXDA2N1wwNjJcMDcwXDA2MVwwNzFcMTYwXDA3MlwwNTdcMDczXDE0M1wwNzRcMTE0IiArCi0gICAgIlwwNzVcMDUyXDA3NlwwMjBcMDc3XDE2NVwxMDBcMDA0XDEwMVwxNjRcMTAyXDAxNlwxMDMiICsKLSAgICAiXDAyNFwxMDRcMTUxXDEwNVwwMjVcMTA2XDA3M1wxMDdcMTIxXDExMFwxNjJcMTExXDEwNCIgKwotICAgICJcMTEyXDEzMFwxMTNcMTIwXDEyMFwxNDdcMTIxXDE0NVwxMjJcMDI3XDEyM1wwNzJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiIiB9KTsKLQotICAvKiogQWNjZXNzIHRvIDxjb2RlPnJlZHVjZV9nb3RvPC9jb2RlPiB0YWJsZS4gKi8KLSAgcHVibGljIHNob3J0W11bXSByZWR1Y2VfdGFibGUoKSB7cmV0dXJuIF9yZWR1Y2VfdGFibGU7fQotCi0gIC8qKiBJbnN0YW5jZSBvZiBhY3Rpb24gZW5jYXBzdWxhdGlvbiBjbGFzcy4gKi8KLSAgcHJvdGVjdGVkIENVUCRYUGF0aEN1cCRhY3Rpb25zIGFjdGlvbl9vYmo7Ci0KLSAgLyoqIEFjdGlvbiBlbmNhcHN1bGF0aW9uIG9iamVjdCBpbml0aWFsaXplci4gKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdF9hY3Rpb25zKCkKLSAgICB7Ci0gICAgICBhY3Rpb25fb2JqID0gbmV3IENVUCRYUGF0aEN1cCRhY3Rpb25zKHRoaXMpOwotICAgIH0KLQotICAvKiogSW52b2tlIGEgdXNlciBzdXBwbGllZCBwYXJzZSBhY3Rpb24uICovCi0gIHB1YmxpYyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCBkb19hY3Rpb24oCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYWN0X251bSwKLSAgICBqYXZhX2N1cC5ydW50aW1lLmxyX3BhcnNlciBwYXJzZXIsCi0gICAgamF2YS51dGlsLlN0YWNrICAgICAgICAgICAgc3RhY2ssCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgdG9wKQotICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCi0gIHsKLSAgICAvKiBjYWxsIGNvZGUgaW4gZ2VuZXJhdGVkIGNsYXNzICovCi0gICAgcmV0dXJuIGFjdGlvbl9vYmouQ1VQJFhQYXRoQ3VwJGRvX2FjdGlvbihhY3RfbnVtLCBwYXJzZXIsIHN0YWNrLCB0b3ApOwotICB9Ci0KLSAgLyoqIEluZGljYXRlcyBzdGFydCBzdGF0ZS4gKi8KLSAgcHVibGljIGludCBzdGFydF9zdGF0ZSgpIHtyZXR1cm4gMDt9Ci0gIC8qKiBJbmRpY2F0ZXMgc3RhcnQgcHJvZHVjdGlvbi4gKi8KLSAgcHVibGljIGludCBzdGFydF9wcm9kdWN0aW9uKCkge3JldHVybiAxO30KLQotICAvKiogPGNvZGU+RU9GPC9jb2RlPiBTeW1ib2wgaW5kZXguICovCi0gIHB1YmxpYyBpbnQgRU9GX3N5bSgpIHtyZXR1cm4gMDt9Ci0KLSAgLyoqIDxjb2RlPmVycm9yPC9jb2RlPiBTeW1ib2wgaW5kZXguICovCi0gIHB1YmxpYyBpbnQgZXJyb3Jfc3ltKCkge3JldHVybiAxO30KLQotCi0KLQotcHVibGljIHZvaWQgcmVwb3J0X2Vycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgaW5mbykgewotCVN0cmluZyBlcnIgPSAiUGFyc2VyIGVycm9yOiAiOwotCi0JWFBhdGhGbGV4IGxleGVyID0gKFhQYXRoRmxleCkgZ2V0U2Nhbm5lcigpOwotCi0JZXJyICs9ICJsaW5lICIgKyBsZXhlci5saW5lbm8oKTsKLQllcnIgKz0gIiBjb2wgIiArIGxleGVyLmNvbG5vKCk7Ci0JZXJyICs9ICI6ICIgKyBsZXhlci55eXRleHQoKTsKLQotCQotCXRocm93IG5ldyBDdXBFcnJvcihlcnIpOwotfQotCi19Ci0KLS8qKiBDdXAgZ2VuZXJhdGVkIGNsYXNzIHRvIGVuY2Fwc3VsYXRlIHVzZXIgc3VwcGxpZWQgYWN0aW9uIGNvZGUuKi8KLWNsYXNzIENVUCRYUGF0aEN1cCRhY3Rpb25zIHsKLSAgcHJpdmF0ZSBmaW5hbCBYUGF0aEN1cCBwYXJzZXI7Ci0KLSAgLyoqIENvbnN0cnVjdG9yICovCi0gIENVUCRYUGF0aEN1cCRhY3Rpb25zKFhQYXRoQ3VwIHBhcnNlcikgewotICAgIHRoaXMucGFyc2VyID0gcGFyc2VyOwotICB9Ci0KLSAgLyoqIE1ldGhvZCB3aXRoIHRoZSBhY3R1YWwgZ2VuZXJhdGVkIGFjdGlvbiBjb2RlLiAqLwotICBwdWJsaWMgZmluYWwgamF2YV9jdXAucnVudGltZS5TeW1ib2wgQ1VQJFhQYXRoQ3VwJGRvX2FjdGlvbigKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkYWN0X251bSwKLSAgICBqYXZhX2N1cC5ydW50aW1lLmxyX3BhcnNlciBDVVAkWFBhdGhDdXAkcGFyc2VyLAotICAgIGphdmEudXRpbC5TdGFjayAgICAgICAgICAgIENVUCRYUGF0aEN1cCRzdGFjaywKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkdG9wKQotICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCi0gICAgewotICAgICAgLyogU3ltYm9sIG9iamVjdCBmb3IgcmV0dXJuIGZyb20gYWN0aW9ucyAqLwotICAgICAgamF2YV9jdXAucnVudGltZS5TeW1ib2wgQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgLyogc2VsZWN0IHRoZSBhY3Rpb24gYmFzZWQgb24gdGhlIGFjdGlvbiBudW1iZXIgKi8KLSAgICAgIHN3aXRjaCAoQ1VQJFhQYXRoQ3VwJGFjdF9udW0pCi0gICAgICAgIHsKLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNzA6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBNT0QgTlQkMCBTVEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLSAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIFJFU1VMVCBmcm9tIE5UJDAKLSAgICAgICAgICAgICAgaWYgKCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlICE9IG51bGwgKQotICAgICAgICAgICAgICAgIFJFU1VMVCA9IChTdHJpbmcpICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IG4wbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbjByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4wID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiKiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY5OiAvLyBOVCQwIDo6PSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgT2JqZWN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJtb2QiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woODMvKk5UJDAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjg6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBJRElWIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaWRpdiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY3OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gRElWIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGl2Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjY6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBPUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjU6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBBTkQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2NDogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IEVMU0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlbHNlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjM6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBUSEVOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidGhlbiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjYyOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gRVZFUlkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJldmVyeSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjYxOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gU09NRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNvbWUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2MDogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IFNBVElTRklFUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNhdGlzZmllcyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU5OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gUkVUVVJOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygicmV0dXJuIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTg6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBJTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImluIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTc6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBGT1IgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb3IiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI1NjogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IElTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI1NTogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IENBU1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTQ6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBDQVNUQUJMRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNhc3RhYmxlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTM6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBUUkVBVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFzIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTI6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBPRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9mIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTE6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBJTlNUQU5DRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImluc3RhbmNlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTA6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBFWENFUFQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJleGNlcHQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0OTogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IElOVEVSU0VDVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImludGVyc2VjdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ4OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gVU5JT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ1bmlvbiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ3OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gQU5DRVNUT1JfT1JfU0VMRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yLW9yLXNlbGYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0NjogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IFBSRUNFRElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInByZWNlZGluZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ1OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gUFJFQ0VESU5HX1NJQkxJTkcgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgID0gbmV3IFN0cmluZygicHJlY2VkaW5nLXNpYmxpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0NDogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IEFOQ0VTVE9SIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYW5jZXN0b3IiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0MzogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IFBBUkVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInBhcmVudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQyOiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gTkFNRVNQQUNFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygibmFtZXNwYWNlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDE6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBGT0xMT1dJTkcgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb2xsb3dpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0MDogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IEZPTExPV0lOR19TSUJMSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nLXNpYmxpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzOTogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IERFU0NFTkRBTlRfT1JfU0VMRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImRlc2NlbmRhbnQtb2Ytc2VsZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM4OiAvLyBVbnF1YWxpZmllZE5DTmFtZSA6Oj0gU0VMRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNlbGYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNC8qVW5xdWFsaWZpZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzNzogLy8gVW5xdWFsaWZpZWROQ05hbWUgOjo9IERFU0NFTkRBTlQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzY6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBDSElMRCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNoaWxkIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzU6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBUTyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInRvIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKlVucXVhbGlmaWVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzQ6IC8vIFVucXVhbGlmaWVkTkNOYW1lIDo6PSBOQ05BTUUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypVbnF1YWxpZmllZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjMzOiAvLyBOQ05hbWUgOjo9IFNUQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCIqIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjMyOiAvLyBOQ05hbWUgOjo9IE1PRCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm1vZCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzMTogLy8gTkNOYW1lIDo6PSBUWVBFU1dJVENIIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidHlwZXN3aXRjaCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzMDogLy8gTkNOYW1lIDo6PSBURVhUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidGV4dCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyOTogLy8gTkNOYW1lIDo6PSBTQ0hFTUFfRUxFTUVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNjaGVtYS1lbGVtZW50Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjI4OiAvLyBOQ05hbWUgOjo9IFNDSEVNQV9BVFRSSUJVVEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzY2hlbWEtYXR0cmlidXRlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjI3OiAvLyBOQ05hbWUgOjo9IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcm9jZXNzaW5nLWluc3RydWN0aW9uIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjI2OiAvLyBOQ05hbWUgOjo9IE5PREUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJub2RlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjI1OiAvLyBOQ05hbWUgOjo9IElURU0gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpdGVtIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjI0OiAvLyBOQ05hbWUgOjo9IEVNUFRZX1NFUVVFTkNFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZW1wdHktc2VxdWVuY2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjM6IC8vIE5DTmFtZSA6Oj0gRUxFTUVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImVsZW1lbnQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjI6IC8vIE5DTmFtZSA6Oj0gRE9DVU1FTlRfTk9ERSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImRvY3VtZW50LW5vZGUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjE6IC8vIE5DTmFtZSA6Oj0gQ09NTUVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNvbW1lbnQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjA6IC8vIE5DTmFtZSA6Oj0gSURJViAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImlkaXYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTk6IC8vIE5DTmFtZSA6Oj0gRElWIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGl2Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE4OiAvLyBOQ05hbWUgOjo9IE9SIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygib3IiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTc6IC8vIE5DTmFtZSA6Oj0gQU5EIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYW5kIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE2OiAvLyBOQ05hbWUgOjo9IEVMU0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlbHNlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE1OiAvLyBOQ05hbWUgOjo9IFRIRU4gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0aGVuIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE0OiAvLyBOQ05hbWUgOjo9IElGIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaWYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTM6IC8vIE5DTmFtZSA6Oj0gRVZFUlkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJldmVyeSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxMjogLy8gTkNOYW1lIDo6PSBTT01FIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygic29tZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxMTogLy8gTkNOYW1lIDo6PSBTQVRJU0ZJRVMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzYXRpc2ZpZXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTA6IC8vIE5DTmFtZSA6Oj0gUkVUVVJOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygicmV0dXJuIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjA5OiAvLyBOQ05hbWUgOjo9IElOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaW4iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDg6IC8vIE5DTmFtZSA6Oj0gRk9SIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjA3OiAvLyBOQ05hbWUgOjo9IElTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDY6IC8vIE5DTmFtZSA6Oj0gQ0FTVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNhc3QiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDU6IC8vIE5DTmFtZSA6Oj0gQ0FTVEFCTEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0YWJsZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwNDogLy8gTkNOYW1lIDo6PSBUUkVBVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFzIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjAzOiAvLyBOQ05hbWUgOjo9IE9GIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygib2YiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDI6IC8vIE5DTmFtZSA6Oj0gSU5TVEFOQ0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnN0YW5jZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwMTogLy8gTkNOYW1lIDo6PSBFWENFUFQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJleGNlcHQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDA6IC8vIE5DTmFtZSA6Oj0gSU5URVJTRUNUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaW50ZXJzZWN0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk5OiAvLyBOQ05hbWUgOjo9IFVOSU9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidW5pb24iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTg6IC8vIE5DTmFtZSA6Oj0gQU5DRVNUT1JfT1JfU0VMRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yLW9yLXNlbGYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTc6IC8vIE5DTmFtZSA6Oj0gUFJFQ0VESU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygicHJlY2VkaW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk2OiAvLyBOQ05hbWUgOjo9IFBSRUNFRElOR19TSUJMSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUICA9IG5ldyBTdHJpbmcoInByZWNlZGluZy1zaWJsaW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk1OiAvLyBOQ05hbWUgOjo9IEFOQ0VTVE9SIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYW5jZXN0b3IiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTQ6IC8vIE5DTmFtZSA6Oj0gUEFSRU5UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygicGFyZW50Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTkzOiAvLyBOQ05hbWUgOjo9IE5BTUVTUEFDRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm5hbWVzcGFjZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5MjogLy8gTkNOYW1lIDo6PSBGT0xMT1dJTkcgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb2xsb3dpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTE6IC8vIE5DTmFtZSA6Oj0gRk9MTE9XSU5HX1NJQkxJTkcgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb2xsb3dpbmctc2libGluZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5MDogLy8gTkNOYW1lIDo6PSBERVNDRU5EQU5UX09SX1NFTEYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50LW9mLXNlbGYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODk6IC8vIE5DTmFtZSA6Oj0gU0VMRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNlbGYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODg6IC8vIE5DTmFtZSA6Oj0gQVRUUklCVVRFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYXR0cmlidXRlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg3OiAvLyBOQ05hbWUgOjo9IERFU0NFTkRBTlQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg2OiAvLyBOQ05hbWUgOjo9IENISUxEIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiY2hpbGQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMy8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODU6IC8vIE5DTmFtZSA6Oj0gVE8gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0byIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4NDogLy8gTkNOYW1lIDo6PSBOQ05BTUUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4MzogLy8gVW5xdWFsaWZpZWRMb2NhbFBhcnQgOjo9IFVucXVhbGlmaWVkTkNOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNS8qVW5xdWFsaWZpZWRMb2NhbFBhcnQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4MjogLy8gTG9jYWxQYXJ0IDo6PSBOQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypMb2NhbFBhcnQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4MTogLy8gUHJlZml4IDo6PSBOQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypQcmVmaXgqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4MDogLy8gUU5hbWUgOjo9IFByZWZpeCBDT0xPTiBMb2NhbFBhcnQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlTdHJpbmcgcCA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBsID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFFOYW1lKHAsbCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE1LypRTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc5OiAvLyBRTmFtZSA6Oj0gVW5xdWFsaWZpZWRMb2NhbFBhcnQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbCA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBRTmFtZShsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTUvKlFOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzg6IC8vIFZhck5hbWUgOjo9IFFOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTYvKlZhck5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3NzogLy8gU3RyaW5nTGl0ZXJhbCA6Oj0gU1RSSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgcyA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmdMaXRlcmFsKHMpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2LypTdHJpbmdMaXRlcmFsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzY6IC8vIERvdWJsZUxpdGVyYWwgOjo9IERPVUJMRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG91YmxlTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRG91YmxlIGQgPSAoRG91YmxlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRG91YmxlTGl0ZXJhbChkLmRvdWJsZVZhbHVlKCkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2NC8qRG91YmxlTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc1OiAvLyBEZWNpbWFsTGl0ZXJhbCA6Oj0gREVDSU1BTCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGVjaW1hbExpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IGRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBkcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUJpZ0RlY2ltYWwgZCA9IChCaWdEZWNpbWFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRGVjaW1hbExpdGVyYWwoZCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYyLypEZWNpbWFsTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc0OiAvLyBJbnRlZ2VyTGl0ZXJhbCA6Oj0gSU5URUdFUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlckxpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IGlsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBpcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUJpZ0ludGVnZXIgaSA9IChCaWdJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlckxpdGVyYWwoaSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYzLypJbnRlZ2VyTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTczOiAvLyBUeXBlTmFtZSA6Oj0gUU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg5LypUeXBlTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTcyOiAvLyBFbGVtZW50TmFtZSA6Oj0gUU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxMC8qRWxlbWVudE5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3MTogLy8gQXR0cmlidXRlTmFtZSA6Oj0gUU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxMy8qQXR0cmlidXRlTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTcwOiAvLyBFbGVtZW50RGVjbGFyYXRpb24gOjo9IEVsZW1lbnROYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNy8qRWxlbWVudERlY2xhcmF0aW9uKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjk6IC8vIFNjaGVtYUVsZW1lbnRUZXN0IDo6PSBTQ0hFTUFfRUxFTUVOVCBMUEFSIEVsZW1lbnREZWNsYXJhdGlvbiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTY2hlbWFFbGVtVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgZSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFNjaGVtYUVsZW1UZXN0KGUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3My8qU2NoZW1hRWxlbWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2ODogLy8gRWxlbWVudE5hbWVPcldpbGRjYXJkIDo6PSBTVEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbnVsbDsgLyogWFhYICovIAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDgvKkVsZW1lbnROYW1lT3JXaWxkY2FyZCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY3OiAvLyBFbGVtZW50TmFtZU9yV2lsZGNhcmQgOjo9IEVsZW1lbnROYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgZSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gZTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woOC8qRWxlbWVudE5hbWVPcldpbGRjYXJkKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjY6IC8vIEVsZW1lbnRUZXN0IDo6PSBFTEVNRU5UIExQQVIgRWxlbWVudE5hbWVPcldpbGRjYXJkIENPTU1BIFR5cGVOYW1lIFFVRVNUSU9OTUFSSyBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBBdHRyRWxlbVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC00KSkucmlnaHQ7Ci0JCVFOYW1lIGUgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTQpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIHQgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJCi0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoZSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdChlLHdpbGQsdCx0cnVlKTsKLQkJCSAgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzEvKkVsZW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTYpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjU6IC8vIEVsZW1lbnRUZXN0IDo6PSBFTEVNRU5UIExQQVIgRWxlbWVudE5hbWVPcldpbGRjYXJkIENPTU1BIFR5cGVOYW1lIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF0dHJFbGVtVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJUU5hbWUgZSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgdCA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihlID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEVsZW1lbnRUZXN0KGUsd2lsZCx0KTsKLQkJCSAgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzEvKkVsZW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjQ6IC8vIEVsZW1lbnRUZXN0IDo6PSBFTEVNRU5UIExQQVIgRWxlbWVudE5hbWVPcldpbGRjYXJkIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF0dHJFbGVtVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgZSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihlID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEVsZW1lbnRUZXN0KGUsd2lsZCk7Ci0JCQkgIAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcxLypFbGVtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTYzOiAvLyBFbGVtZW50VGVzdCA6Oj0gRUxFTUVOVCBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF0dHJFbGVtVGVzdCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEVsZW1lbnRUZXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcxLypFbGVtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTYyOiAvLyBBdHRyaWJ1dGVEZWNsYXJhdGlvbiA6Oj0gQXR0cmlidXRlTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDExLypBdHRyaWJ1dGVEZWNsYXJhdGlvbiovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTYxOiAvLyBTY2hlbWFBdHRyaWJ1dGVUZXN0IDo6PSBTQ0hFTUFfQVRUUklCVVRFIExQQVIgQXR0cmlidXRlRGVjbGFyYXRpb24gUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2NoZW1hQXR0clRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVFOYW1lIGEgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTY2hlbWFBdHRyVGVzdChhKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzIvKlNjaGVtYUF0dHJpYnV0ZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2MDogLy8gQXR0cmliTmFtZU9yV2lsZGNhcmQgOjo9IFNUQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBudWxsOyAvKiBYWFggKi8gCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTIvKkF0dHJpYk5hbWVPcldpbGRjYXJkKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTk6IC8vIEF0dHJpYk5hbWVPcldpbGRjYXJkIDo6PSBBdHRyaWJ1dGVOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgYSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gYTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTIvKkF0dHJpYk5hbWVPcldpbGRjYXJkKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTg6IC8vIEF0dHJpYnV0ZVRlc3QgOjo9IEFUVFJJQlVURSBMUEFSIEF0dHJpYk5hbWVPcldpbGRjYXJkIENPTU1BIFR5cGVOYW1lIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF0dHJpYnV0ZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkucmlnaHQ7Ci0JCVFOYW1lIGEgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVFOYW1lIHQgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJCi0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoYSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBBdHRyaWJ1dGVUZXN0KGEsd2lsZCx0KTsKLQkJCSAgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjkvKkF0dHJpYnV0ZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1NzogLy8gQXR0cmlidXRlVGVzdCA6Oj0gQVRUUklCVVRFIExQQVIgQXR0cmliTmFtZU9yV2lsZGNhcmQgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQXR0cmlidXRlVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgYSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihhID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEF0dHJpYnV0ZVRlc3QoYSx3aWxkKTsKLQkJCSAgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjkvKkF0dHJpYnV0ZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1NjogLy8gQXR0cmlidXRlVGVzdCA6Oj0gQVRUUklCVVRFIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQXR0cmlidXRlVGVzdCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEF0dHJpYnV0ZVRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjkvKkF0dHJpYnV0ZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1NTogLy8gUElUZXN0IDo6PSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIExQQVIgU3RyaW5nTGl0ZXJhbCBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQSVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVN0cmluZ0xpdGVyYWwgcyA9IChTdHJpbmdMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUElUZXN0KHMuc3RyaW5nKCkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2OC8qUElUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTQ6IC8vIFBJVGVzdCA6Oj0gUFJPQ0VTU0lOR19JTlNUUlVDVElPTiBMUEFSIE5DTmFtZSBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQSVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFBJVGVzdChuKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjgvKlBJVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTUzOiAvLyBQSVRlc3QgOjo9IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQSVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBQSVRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjgvKlBJVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTUyOiAvLyBDb21tZW50VGVzdCA6Oj0gQ09NTUVOVCBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgQ29tbWVudFRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjcvKkNvbW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTE6IC8vIFRleHRUZXN0IDo6PSBURVhUIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVGV4dFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBUZXh0VGVzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2Ni8qVGV4dFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1MDogLy8gRG9jdW1lbnRUZXN0IDo6PSBET0NVTUVOVF9OT0RFIExQQVIgU2NoZW1hRWxlbWVudFRlc3QgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG9jdW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlTY2hlbWFFbGVtVGVzdCBlID0gKFNjaGVtYUVsZW1UZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRG9jdW1lbnRUZXN0KERvY3VtZW50VGVzdC5TQ0hFTUFfRUxFTUVOVCxlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjUvKkRvY3VtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ5OiAvLyBEb2N1bWVudFRlc3QgOjo9IERPQ1VNRU5UX05PREUgTFBBUiBFbGVtZW50VGVzdCBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEb2N1bWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUF0dHJFbGVtVGVzdCBlID0gKEF0dHJFbGVtVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IERvY3VtZW50VGVzdChEb2N1bWVudFRlc3QuRUxFTUVOVCxlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjUvKkRvY3VtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ4OiAvLyBEb2N1bWVudFRlc3QgOjo9IERPQ1VNRU5UX05PREUgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEb2N1bWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBEb2N1bWVudFRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjUvKkRvY3VtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ3OiAvLyBBbnlLaW5kVGVzdCA6Oj0gTk9ERSBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEFueUtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgQW55S2luZFRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzAvKkFueUtpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDY6IC8vIEtpbmRUZXN0IDo6PSBBbnlLaW5kVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUFueUtpbmRUZXN0IG4gPSAoQW55S2luZFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ1OiAvLyBLaW5kVGVzdCA6Oj0gVGV4dFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlUZXh0VGVzdCBuID0gKFRleHRUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0NDogLy8gS2luZFRlc3QgOjo9IENvbW1lbnRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQ29tbWVudFRlc3QgbiA9IChDb21tZW50VGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDM6IC8vIEtpbmRUZXN0IDo6PSBQSVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlQSVRlc3QgbiA9IChQSVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQyOiAvLyBLaW5kVGVzdCA6Oj0gU2NoZW1hQXR0cmlidXRlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVNjaGVtYUF0dHJUZXN0IG4gPSAoU2NoZW1hQXR0clRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQxOiAvLyBLaW5kVGVzdCA6Oj0gU2NoZW1hRWxlbWVudFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTY2hlbWFFbGVtVGVzdCBuID0gKFNjaGVtYUVsZW1UZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0MDogLy8gS2luZFRlc3QgOjo9IEF0dHJpYnV0ZVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlBdHRyaWJ1dGVUZXN0IG4gPSAoQXR0cmlidXRlVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzk6IC8vIEtpbmRUZXN0IDo6PSBFbGVtZW50VGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUF0dHJFbGVtVGVzdCBuID0gKEF0dHJFbGVtVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzg6IC8vIEtpbmRUZXN0IDo6PSBEb2N1bWVudFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlEb2N1bWVudFRlc3QgbiA9IChEb2N1bWVudFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM3OiAvLyBBdG9taWNUeXBlIDo6PSBRTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE0LypBdG9taWNUeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzY6IC8vIEl0ZW1UeXBlIDo6PSBJVEVNIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSXRlbVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJdGVtVHlwZShJdGVtVHlwZS5JVEVNLG51bGwpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMi8qSXRlbVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzNTogLy8gSXRlbVR5cGUgOjo9IEtpbmRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJdGVtVHlwZSBSRVNVTFQgPSBudWxsOwotCQlpbnQga2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGtyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJS2luZFRlc3QgayA9IChLaW5kVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEl0ZW1UeXBlKEl0ZW1UeXBlLktJTkRURVNULGspOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMi8qSXRlbVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzNDogLy8gSXRlbVR5cGUgOjo9IEF0b21pY1R5cGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEl0ZW1UeXBlIFJFU1VMVCA9IG51bGw7Ci0JCWludCBxbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBxID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSXRlbVR5cGUoSXRlbVR5cGUuUU5BTUUscSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIyLypJdGVtVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTMzOiAvLyBPY2N1cnJlbmNlSW5kaWNhdG9yIDo6PSBQTFVTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihTZXF1ZW5jZVR5cGUuUExVUyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE4LypPY2N1cnJlbmNlSW5kaWNhdG9yKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzI6IC8vIE9jY3VycmVuY2VJbmRpY2F0b3IgOjo9IFNUQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFNlcXVlbmNlVHlwZS5TVEFSKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTgvKk9jY3VycmVuY2VJbmRpY2F0b3IqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzMTogLy8gT2NjdXJyZW5jZUluZGljYXRvciA6Oj0gUVVFU1RJT05NQVJLIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihTZXF1ZW5jZVR5cGUuUVVFU1RJT04pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOC8qT2NjdXJyZW5jZUluZGljYXRvciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTMwOiAvLyBTZXF1ZW5jZVR5cGUgOjo9IEVNUFRZX1NFUVVFTkNFIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2VxdWVuY2VUeXBlIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgU2VxdWVuY2VUeXBlKFNlcXVlbmNlVHlwZS5FTVBUWSwgbnVsbCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM5LypTZXF1ZW5jZVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyOTogLy8gU2VxdWVuY2VUeXBlIDo6PSBJdGVtVHlwZSBPY2N1cnJlbmNlSW5kaWNhdG9yIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTZXF1ZW5jZVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUl0ZW1UeXBlIHQgPSAoSXRlbVR5cGUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IGlsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBpcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUludGVnZXIgaSA9IChJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU2VxdWVuY2VUeXBlKGkuaW50VmFsdWUoKSwgdCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM5LypTZXF1ZW5jZVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyODogLy8gU2VxdWVuY2VUeXBlIDo6PSBJdGVtVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2VxdWVuY2VUeXBlIFJFU1VMVCA9IG51bGw7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlJdGVtVHlwZSB0ID0gKEl0ZW1UeXBlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU2VxdWVuY2VUeXBlKFNlcXVlbmNlVHlwZS5OT05FLCB0KTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzkvKlNlcXVlbmNlVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTI3OiAvLyBTaW5nbGVUeXBlIDo6PSBBdG9taWNUeXBlIFFVRVNUSU9OTUFSSyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2luZ2xlVHlwZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgdCA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFNpbmdsZVR5cGUodCx0cnVlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzgvKlNpbmdsZVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyNjogLy8gU2luZ2xlVHlwZSA6Oj0gQXRvbWljVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2luZ2xlVHlwZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgdCA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFNpbmdsZVR5cGUodCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM4LypTaW5nbGVUeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjU6IC8vIEZ1bmN0aW9uQ2FsbE1pZGRsZSA6Oj0gRnVuY3Rpb25DYWxsTWlkZGxlIENPTU1BIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBjcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gYyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCSAgIGMuYWRkKGUpOwotCQkJICAgUkVTVUxUID0gYzsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIzLypGdW5jdGlvbkNhbGxNaWRkbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyNDogLy8gRnVuY3Rpb25DYWxsTWlkZGxlIDo6PSBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCSAgIENvbGxlY3Rpb24gYyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCSAgIGMuYWRkKGUpOwotCQkJICAgUkVTVUxUID0gYzsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIzLypGdW5jdGlvbkNhbGxNaWRkbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyMzogLy8gRnVuY3Rpb25DYWxsIDo6PSBRTmFtZSBMUEFSIEZ1bmN0aW9uQ2FsbE1pZGRsZSBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGdW5jdGlvbkNhbGwgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gYSA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCQotCQkJICAgUkVTVUxUID0gbmV3IEZ1bmN0aW9uQ2FsbChuLGEpOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjAvKkZ1bmN0aW9uQ2FsbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTIyOiAvLyBGdW5jdGlvbkNhbGwgOjo9IFFOYW1lIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRnVuY3Rpb25DYWxsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCQotCQkJICAgUkVTVUxUID0gbmV3IEZ1bmN0aW9uQ2FsbChuLG5ldyBBcnJheUxpc3QoKSk7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2MC8qRnVuY3Rpb25DYWxsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjE6IC8vIENvbnRleHRJdGVtRXhwciA6Oj0gRE9UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDbnR4SXRlbUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBDbnR4SXRlbUV4cHIoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTkvKkNvbnRleHRJdGVtRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTIwOiAvLyBQYXJlbnRoZXNpemVkRXhwciA6Oj0gTFBBUiBFeHByIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gZSA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBlOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNC8qUGFyZW50aGVzaXplZEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExOTogLy8gUGFyZW50aGVzaXplZEV4cHIgOjo9IExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEFycmF5TGlzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNC8qUGFyZW50aGVzaXplZEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExODogLy8gVmFyUmVmIDo6PSBET0xMQVIgVmFyTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVmFyUmVmIFJFU1VMVCA9IG51bGw7Ci0JCWludCB2bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgdnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSB2ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgVmFyUmVmKHYpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1OC8qVmFyUmVmKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTc6IC8vIE51bWVyaWNMaXRlcmFsIDo6PSBEb3VibGVMaXRlcmFsIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOdW1lcmljTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRG91YmxlTGl0ZXJhbCBuID0gKERvdWJsZUxpdGVyYWwpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYxLypOdW1lcmljTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTE2OiAvLyBOdW1lcmljTGl0ZXJhbCA6Oj0gRGVjaW1hbExpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE51bWVyaWNMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlEZWNpbWFsTGl0ZXJhbCBuID0gKERlY2ltYWxMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2MS8qTnVtZXJpY0xpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExNTogLy8gTnVtZXJpY0xpdGVyYWwgOjo9IEludGVnZXJMaXRlcmFsIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOdW1lcmljTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJSW50ZWdlckxpdGVyYWwgbiA9IChJbnRlZ2VyTGl0ZXJhbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjEvKk51bWVyaWNMaXRlcmFsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTQ6IC8vIExpdGVyYWwgOjo9IFN0cmluZ0xpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIExpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZ0xpdGVyYWwgbiA9IChTdHJpbmdMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ny8qTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTEzOiAvLyBMaXRlcmFsIDo6PSBOdW1lcmljTGl0ZXJhbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJTnVtZXJpY0xpdGVyYWwgbiA9IChOdW1lcmljTGl0ZXJhbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTcvKkxpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExMjogLy8gUHJpbWFyeUV4cHIgOjo9IEZ1bmN0aW9uQ2FsbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUHJpbWFyeUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUZ1bmN0aW9uQ2FsbCBuID0gKEZ1bmN0aW9uQ2FsbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjkvKlByaW1hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTE6IC8vIFByaW1hcnlFeHByIDo6PSBDb250ZXh0SXRlbUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFByaW1hcnlFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDbnR4SXRlbUV4cHIgbiA9IChDbnR4SXRlbUV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI5LypQcmltYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTEwOiAvLyBQcmltYXJ5RXhwciA6Oj0gUGFyZW50aGVzaXplZEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFByaW1hcnlFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGUgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFBhckV4cHIoZSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI5LypQcmltYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTA5OiAvLyBQcmltYXJ5RXhwciA6Oj0gVmFyUmVmIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQcmltYXJ5RXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJVmFyUmVmIG4gPSAoVmFyUmVmKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyOS8qUHJpbWFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwODogLy8gUHJpbWFyeUV4cHIgOjo9IExpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFByaW1hcnlFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlMaXRlcmFsIG4gPSAoTGl0ZXJhbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjkvKlByaW1hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDc6IC8vIFByZWRpY2F0ZSA6Oj0gTEJSQUNLRVQgRXhwciBSQlJBQ0tFVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBlID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IGU7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDgyLypQcmVkaWNhdGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwNjogLy8gUHJlZGljYXRlTGlzdCA6Oj0gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBBcnJheUxpc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjYvKlByZWRpY2F0ZUxpc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDU6IC8vIFByZWRpY2F0ZUxpc3QgOjo9IFByZWRpY2F0ZUxpc3QgUHJlZGljYXRlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBjbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgY3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkgICBjLmFkZChwKTsKLQkJCSAgIFJFU1VMVCA9IGM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNi8qUHJlZGljYXRlTGlzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTA0OiAvLyBGaWx0ZXJFeHByIDo6PSBQcmltYXJ5RXhwciBQcmVkaWNhdGVMaXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGaWx0ZXJFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVByaW1hcnlFeHByIHBlID0gKFByaW1hcnlFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGUgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEZpbHRlckV4cHIocGUsIGUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg4MS8qRmlsdGVyRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTAzOiAvLyBXaWxkY2FyZCA6Oj0gU1RBUiBDT0xPTiBOQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBRTmFtZSgiKiIsIG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxNy8qV2lsZGNhcmQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwMjogLy8gV2lsZGNhcmQgOjo9IFNUQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgUU5hbWUoIioiLCIqIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE3LypXaWxkY2FyZCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTAxOiAvLyBOYW1lVGVzdCA6Oj0gV2lsZGNhcmQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5hbWVUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgTmFtZVRlc3Qobik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU1LypOYW1lVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTAwOiAvLyBOYW1lVGVzdCA6Oj0gUU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5hbWVUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgTmFtZVRlc3Qobik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU1LypOYW1lVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTk6IC8vIE5vZGVUZXN0IDo6PSBOYW1lVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU5hbWVUZXN0IG4gPSAoTmFtZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMwLypOb2RlVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTg6IC8vIE5vZGVUZXN0IDo6PSBLaW5kVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUtpbmRUZXN0IG4gPSAoS2luZFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMwLypOb2RlVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTc6IC8vIEFiYnJldlJldmVyc2VTdGVwIDo6PSBET1RET1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFJldmVyc2VTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgUmV2ZXJzZVN0ZXAoUmV2ZXJzZVN0ZXAuRE9URE9ULG51bGwpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzMi8qQWJicmV2UmV2ZXJzZVN0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk2OiAvLyBSZXZlcnNlQXhpcyA6Oj0gQU5DRVNUT1JfT1JfU0VMRiBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5BTkNFU1RPUl9PUl9TRUxGKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTkvKlJldmVyc2VBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5NTogLy8gUmV2ZXJzZUF4aXMgOjo9IFBSRUNFRElORyBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5QUkVDRURJTkcpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOS8qUmV2ZXJzZUF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk0OiAvLyBSZXZlcnNlQXhpcyA6Oj0gUFJFQ0VESU5HX1NJQkxJTkcgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuUFJFQ0VESU5HX1NJQkxJTkcpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOS8qUmV2ZXJzZUF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDkzOiAvLyBSZXZlcnNlQXhpcyA6Oj0gQU5DRVNUT1IgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuQU5DRVNUT1IpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOS8qUmV2ZXJzZUF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDkyOiAvLyBSZXZlcnNlQXhpcyA6Oj0gUEFSRU5UIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLlBBUkVOVCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE5LypSZXZlcnNlQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTE6IC8vIFJldmVyc2VTdGVwIDo6PSBBYmJyZXZSZXZlcnNlU3RlcCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUmV2ZXJzZVN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVJldmVyc2VTdGVwIG4gPSAoUmV2ZXJzZVN0ZXApKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMxLypSZXZlcnNlU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTA6IC8vIFJldmVyc2VTdGVwIDo6PSBSZXZlcnNlQXhpcyBOb2RlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUmV2ZXJzZVN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUludGVnZXIgYSA9IChJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlOb2RlVGVzdCBuID0gKE5vZGVUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSAgUkVTVUxUID0gbmV3IFJldmVyc2VTdGVwKGEuaW50VmFsdWUoKSwgbik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMxLypSZXZlcnNlU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODk6IC8vIEFiYnJldkZvcndhcmRTdGVwIDo6PSBOb2RlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRm9yd2FyZFN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU5vZGVUZXN0IG4gPSAoTm9kZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBGb3J3YXJkU3RlcChGb3J3YXJkU3RlcC5OT05FLCBuKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzQvKkFiYnJldkZvcndhcmRTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4ODogLy8gQWJicmV2Rm9yd2FyZFN0ZXAgOjo9IEFUX1NZTSBOb2RlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRm9yd2FyZFN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU5vZGVUZXN0IG4gPSAoTm9kZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBGb3J3YXJkU3RlcChGb3J3YXJkU3RlcC5BVF9TWU0sIG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNC8qQWJicmV2Rm9yd2FyZFN0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDg3OiAvLyBGb3J3YXJkQXhpcyA6Oj0gTkFNRVNQQUNFIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLk5BTUVTUEFDRSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIwLypGb3J3YXJkQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODY6IC8vIEZvcndhcmRBeGlzIDo6PSBGT0xMT1dJTkcgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuRk9MTE9XSU5HKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4NTogLy8gRm9yd2FyZEF4aXMgOjo9IEZPTExPV0lOR19TSUJMSU5HIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkZPTExPV0lOR19TSUJMSU5HKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4NDogLy8gRm9yd2FyZEF4aXMgOjo9IERFU0NFTkRBTlRfT1JfU0VMRiBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5ERVNDRU5EQU5UX09SX1NFTEYpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDgzOiAvLyBGb3J3YXJkQXhpcyA6Oj0gU0VMRiBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5TRUxGKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4MjogLy8gRm9yd2FyZEF4aXMgOjo9IEFUVFJJQlVURSBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5BVFRSSUJVVEUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDgxOiAvLyBGb3J3YXJkQXhpcyA6Oj0gREVTQ0VOREFOVCBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5ERVNDRU5EQU5UKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4MDogLy8gRm9yd2FyZEF4aXMgOjo9IENISUxEIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkNISUxEKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3OTogLy8gRm9yd2FyZFN0ZXAgOjo9IEFiYnJldkZvcndhcmRTdGVwIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGb3J3YXJkU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRm9yd2FyZFN0ZXAgbiA9IChGb3J3YXJkU3RlcCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzMvKkZvcndhcmRTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3ODogLy8gRm9yd2FyZFN0ZXAgOjo9IEZvcndhcmRBeGlzIE5vZGVUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGb3J3YXJkU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJSW50ZWdlciBhID0gKEludGVnZXIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU5vZGVUZXN0IG4gPSAoTm9kZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBGb3J3YXJkU3RlcChhLmludFZhbHVlKCksbik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMzLypGb3J3YXJkU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzc6IC8vIEF4aXNTdGVwIDo6PSBSZXZlcnNlU3RlcCBQcmVkaWNhdGVMaXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBBeGlzU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUmV2ZXJzZVN0ZXAgcyA9IChSZXZlcnNlU3RlcCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBBeGlzU3RlcChzLCBwKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woODAvKkF4aXNTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3NjogLy8gQXhpc1N0ZXAgOjo9IEZvcndhcmRTdGVwIFByZWRpY2F0ZUxpc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF4aXNTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCWludCBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlGb3J3YXJkU3RlcCBzID0gKEZvcndhcmRTdGVwKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHAgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEF4aXNTdGVwKHMsIHApOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg4MC8qQXhpc1N0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDc1OiAvLyBTdGVwRXhwciA6Oj0gRmlsdGVyRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RlcEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUZpbHRlckV4cHIgbiA9IChGaWx0ZXJFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNS8qU3RlcEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDc0OiAvLyBTdGVwRXhwciA6Oj0gQXhpc1N0ZXAgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0ZXBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlBeGlzU3RlcCBuID0gKEF4aXNTdGVwKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNS8qU3RlcEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDczOiAvLyBSZWxhdGl2ZVBhdGhFeHByIDo6PSBSZWxhdGl2ZVBhdGhFeHByIEZPUldBUkRfU0xBU0hTTEFTSCBTdGVwRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlYUGF0aEV4cHIgcCA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0ZXBFeHByIHMgPSAoU3RlcEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJcC5hZGRfdGFpbCgyLHMpOwotCQkJCVJFU1VMVCA9IHA7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNi8qUmVsYXRpdmVQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzI6IC8vIFJlbGF0aXZlUGF0aEV4cHIgOjo9IFJlbGF0aXZlUGF0aEV4cHIgRk9SV0FSRF9TTEFTSCBTdGVwRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlYUGF0aEV4cHIgcCA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0ZXBFeHByIHMgPSAoU3RlcEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJcC5hZGRfdGFpbCgxLHMpOwotCQkJCVJFU1VMVCA9IHA7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNi8qUmVsYXRpdmVQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzE6IC8vIFJlbGF0aXZlUGF0aEV4cHIgOjo9IFN0ZXBFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0ZXBFeHByIHMgPSAoU3RlcEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBYUGF0aEV4cHIoMCwoU3RlcEV4cHIpcyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM2LypSZWxhdGl2ZVBhdGhFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3MDogLy8gUGF0aEV4cHIgOjo9IFJlbGF0aXZlUGF0aEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJWFBhdGhFeHByIG4gPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3OC8qUGF0aEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY5OiAvLyBQYXRoRXhwciA6Oj0gRk9SV0FSRF9TTEFTSFNMQVNIIFJlbGF0aXZlUGF0aEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJWFBhdGhFeHByIHAgPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCXAuc2V0X3NsYXNoZXMoMik7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc4LypQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjg6IC8vIFBhdGhFeHByIDo6PSBGT1JXQVJEX1NMQVNIIFJlbGF0aXZlUGF0aEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJWFBhdGhFeHByIHAgPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCXAuc2V0X3NsYXNoZXMoMSk7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc4LypQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjc6IC8vIFBhdGhFeHByIDo6PSBGT1JXQVJEX1NMQVNIIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBYUGF0aEV4cHIoMSxudWxsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzgvKlBhdGhFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2NjogLy8gTm9kZUNvbXAgOjo9IEdSRUFURVJfR1JFQVRFUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HUkVBVEVSX0dSRUFURVIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMS8qTm9kZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY1OiAvLyBOb2RlQ29tcCA6Oj0gTEVTU19MRVNTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFU1NfTEVTUyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIxLypOb2RlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjQ6IC8vIE5vZGVDb21wIDo6PSBJUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5JUyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIxLypOb2RlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjM6IC8vIFZhbHVlQ29tcCA6Oj0gR0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR0UpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MC8qVmFsdWVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2MjogLy8gVmFsdWVDb21wIDo6PSBHVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HVCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUwLypWYWx1ZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDYxOiAvLyBWYWx1ZUNvbXAgOjo9IExFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTAvKlZhbHVlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjA6IC8vIFZhbHVlQ29tcCA6Oj0gTFQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTFQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MC8qVmFsdWVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1OTogLy8gVmFsdWVDb21wIDo6PSBORSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5ORSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUwLypWYWx1ZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDU4OiAvLyBWYWx1ZUNvbXAgOjo9IEVRIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkVRKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTAvKlZhbHVlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTc6IC8vIEdlbmVyYWxDb21wIDo6PSBHUkVBVEVSRVFVQUwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1JFQVRFUkVRVUFMKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDkvKkdlbmVyYWxDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1NjogLy8gR2VuZXJhbENvbXAgOjo9IEdSRUFURVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1JFQVRFUik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ5LypHZW5lcmFsQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTU6IC8vIEdlbmVyYWxDb21wIDo6PSBMRVNTRVFVQUwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTEVTU0VRVUFMKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDkvKkdlbmVyYWxDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1NDogLy8gR2VuZXJhbENvbXAgOjo9IExFU1NUSEFOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFU1NUSEFOKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDkvKkdlbmVyYWxDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1MzogLy8gR2VuZXJhbENvbXAgOjo9IE5PVEVRVUFMUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5OT1RFUVVBTFMpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OS8qR2VuZXJhbENvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDUyOiAvLyBHZW5lcmFsQ29tcCA6Oj0gRVFVQUxTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkVRVUFMUyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ5LypHZW5lcmFsQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTE6IC8vIFZhbHVlRXhwciA6Oj0gUGF0aEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJWFBhdGhFeHByIG4gPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3OS8qVmFsdWVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1MDogLy8gVW5hcnlFeHByIDo6PSBQTFVTIFVuYXJ5RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBhID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBQbHVzRXhwcihhKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzcvKlVuYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDk6IC8vIFVuYXJ5RXhwciA6Oj0gTUlOVVMgVW5hcnlFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGEgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IE1pbnVzRXhwcihhKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzcvKlVuYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDg6IC8vIFVuYXJ5RXhwciA6Oj0gVmFsdWVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlYUGF0aEV4cHIgbiA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM3LypVbmFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQ3OiAvLyBDYXN0RXhwciA6Oj0gVW5hcnlFeHByIENBU1QgQVMgU2luZ2xlVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVNpbmdsZVR5cGUgciA9IChTaW5nbGVUeXBlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQ2FzdEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQzLypDYXN0RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDY6IC8vIENhc3RFeHByIDo6PSBVbmFyeUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0My8qQ2FzdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQ1OiAvLyBDYXN0YWJsZUV4cHIgOjo9IENhc3RFeHByIENBU1RBQkxFIEFTIFNpbmdsZVR5cGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTaW5nbGVUeXBlIHIgPSAoU2luZ2xlVHlwZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IENhc3RhYmxlRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDEvKkNhc3RhYmxlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDQ6IC8vIENhc3RhYmxlRXhwciA6Oj0gQ2FzdEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0MS8qQ2FzdGFibGVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0MzogLy8gVHJlYXRFeHByIDo6PSBDYXN0YWJsZUV4cHIgVFJFQVQgQVMgU2VxdWVuY2VUeXBlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU2VxdWVuY2VUeXBlIHIgPSAoU2VxdWVuY2VUeXBlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgVHJlYXRBc0V4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQwLypUcmVhdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQyOiAvLyBUcmVhdEV4cHIgOjo9IENhc3RhYmxlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQwLypUcmVhdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQxOiAvLyBJbnN0YW5jZW9mRXhwciA6Oj0gVHJlYXRFeHByIElOU1RBTkNFIE9GIFNlcXVlbmNlVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVNlcXVlbmNlVHlwZSByID0gKFNlcXVlbmNlVHlwZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEluc3RPZkV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQyLypJbnN0YW5jZW9mRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDA6IC8vIEluc3RhbmNlb2ZFeHByIDo6PSBUcmVhdEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Mi8qSW5zdGFuY2VvZkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM5OiAvLyBJbnRlcnNlY3RFeGNlcHRFeHByIDo6PSBJbnRlcnNlY3RFeGNlcHRFeHByIEVYQ0VQVCBJbnN0YW5jZW9mRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRXhjZXB0RXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDYvKkludGVyc2VjdEV4Y2VwdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM4OiAvLyBJbnRlcnNlY3RFeGNlcHRFeHByIDo6PSBJbnRlcnNlY3RFeGNlcHRFeHByIElOVEVSU0VDVCBJbnN0YW5jZW9mRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZXJzZWN0RXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDYvKkludGVyc2VjdEV4Y2VwdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM3OiAvLyBJbnRlcnNlY3RFeGNlcHRFeHByIDo6PSBJbnN0YW5jZW9mRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ2LypJbnRlcnNlY3RFeGNlcHRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzNjogLy8gVW5pb25FeHByIDo6PSBVbmlvbkV4cHIgUElQRSBJbnRlcnNlY3RFeGNlcHRFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBQaXBlRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDQvKlVuaW9uRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzU6IC8vIFVuaW9uRXhwciA6Oj0gVW5pb25FeHByIFVOSU9OIEludGVyc2VjdEV4Y2VwdEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFVuaW9uRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDQvKlVuaW9uRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzQ6IC8vIFVuaW9uRXhwciA6Oj0gSW50ZXJzZWN0RXhjZXB0RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ0LypVbmlvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDMzOiAvLyBNdWx0aXBsaWNhdGl2ZUV4cHIgOjo9IE11bHRpcGxpY2F0aXZlRXhwciBNT0QgVW5pb25FeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBNb2RFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NS8qTXVsdGlwbGljYXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzMjogLy8gTXVsdGlwbGljYXRpdmVFeHByIDo6PSBNdWx0aXBsaWNhdGl2ZUV4cHIgSURJViBVbmlvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IElEaXZFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NS8qTXVsdGlwbGljYXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzMTogLy8gTXVsdGlwbGljYXRpdmVFeHByIDo6PSBNdWx0aXBsaWNhdGl2ZUV4cHIgRElWIFVuaW9uRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRGl2RXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDUvKk11bHRpcGxpY2F0aXZlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzA6IC8vIE11bHRpcGxpY2F0aXZlRXhwciA6Oj0gTXVsdGlwbGljYXRpdmVFeHByIFNUQVIgVW5pb25FeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBNdWxFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NS8qTXVsdGlwbGljYXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyOTogLy8gTXVsdGlwbGljYXRpdmVFeHByIDo6PSBVbmlvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NS8qTXVsdGlwbGljYXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyODogLy8gQWRkaXRpdmVFeHByIDo6PSBBZGRpdGl2ZUV4cHIgTUlOVVMgTXVsdGlwbGljYXRpdmVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdWJFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OC8qQWRkaXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNzogLy8gQWRkaXRpdmVFeHByIDo6PSBBZGRpdGl2ZUV4cHIgUExVUyBNdWx0aXBsaWNhdGl2ZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEFkZEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ4LypBZGRpdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2OiAvLyBBZGRpdGl2ZUV4cHIgOjo9IE11bHRpcGxpY2F0aXZlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ4LypBZGRpdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI1OiAvLyBSYW5nZUV4cHIgOjo9IEFkZGl0aXZlRXhwciBUTyBBZGRpdGl2ZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFJhbmdlRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTMvKlJhbmdlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ6IC8vIFJhbmdlRXhwciA6Oj0gQWRkaXRpdmVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTMvKlJhbmdlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM6IC8vIENvbXBhcmlzb25FeHByIDo6PSBSYW5nZUV4cHIgTm9kZUNvbXAgUmFuZ2VFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJSW50ZWdlciB0ID0gKEludGVnZXIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQ21wRXhwcihsLCByLCB0LmludFZhbHVlKCkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1NC8qQ29tcGFyaXNvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyOiAvLyBDb21wYXJpc29uRXhwciA6Oj0gUmFuZ2VFeHByIEdlbmVyYWxDb21wIFJhbmdlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUludGVnZXIgdCA9IChJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IENtcEV4cHIobCwgciwgdC5pbnRWYWx1ZSgpKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTQvKkNvbXBhcmlzb25FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTogLy8gQ29tcGFyaXNvbkV4cHIgOjo9IFJhbmdlRXhwciBWYWx1ZUNvbXAgUmFuZ2VFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJSW50ZWdlciB0ID0gKEludGVnZXIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQ21wRXhwcihsLCByLCB0LmludFZhbHVlKCkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1NC8qQ29tcGFyaXNvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwOiAvLyBDb21wYXJpc29uRXhwciA6Oj0gUmFuZ2VFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTQvKkNvbXBhcmlzb25FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTogLy8gQW5kRXhwciA6Oj0gQW5kRXhwciBBTkQgQ29tcGFyaXNvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEFuZEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUxLypBbmRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODogLy8gQW5kRXhwciA6Oj0gQ29tcGFyaXNvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MS8qQW5kRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc6IC8vIE9yRXhwciA6Oj0gT3JFeHByIE9SIEFuZEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IE9yRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTIvKk9yRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY6IC8vIE9yRXhwciA6Oj0gQW5kRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUyLypPckV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1OiAvLyBJZkV4cHIgOjo9IElGIExQQVIgRXhwciBSUEFSIFRIRU4gRXhwclNpbmdsZSBFTFNFIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIElmRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgZXhwc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdDsKLQkJaW50IGV4cHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBleHBzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgdCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IElmRXhwcihleHBzLCB0LCBlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzcvKklmRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC03KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ6IC8vIFF1YW50aWZpZWRFeHByTWlkZGxlIDo6PSBRdWFudGlmaWVkRXhwck1pZGRsZSBDT01NQSBET0xMQVIgVmFyTmFtZSBJTiBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdDsKLQkJaW50IHBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcHMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLnZhbHVlOwotCQlpbnQgdmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHZyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJUU5hbWUgdiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI3LypRdWFudGlmaWVkRXhwck1pZGRsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM6IC8vIFF1YW50aWZpZWRFeHByTWlkZGxlIDo6PSBWYXJOYW1lIElOIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IHZsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB2cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIHYgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCUNvbGxlY3Rpb24gcGFpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBhaXJzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwYWlyczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI3LypRdWFudGlmaWVkRXhwck1pZGRsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTI6IC8vIFF1YW50aWZpZWRFeHByIDo6PSBFVkVSWSBET0xMQVIgUXVhbnRpZmllZEV4cHJNaWRkbGUgU0FUSVNGSUVTIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFF1YW50aWZpZWRFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwYWlyc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHBhaXJzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcGFpcnMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJUXVhbnRpZmllZEV4cHIgcWUgPSBuZXcgUXVhbnRpZmllZEV4cHIoUXVhbnRpZmllZEV4cHIuQUxMLAotCQkJCQkJCQkgICAgICAgcGFpcnMsIGUpOwotCQkJCVJFU1VMVCA9IHFlOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzYvKlF1YW50aWZpZWRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTQpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTogLy8gUXVhbnRpZmllZEV4cHIgOjo9IFNPTUUgRE9MTEFSIFF1YW50aWZpZWRFeHByTWlkZGxlIFNBVElTRklFUyBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRdWFudGlmaWVkRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGFpcnNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBwYWlyc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHBhaXJzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCVF1YW50aWZpZWRFeHByIHFlID0gbmV3IFF1YW50aWZpZWRFeHByKFF1YW50aWZpZWRFeHByLlNPTUUsCi0JCQkJCQkJCSAgICAgICBwYWlycywgZSk7Ci0JCQkJUkVTVUxUID0gcWU7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3Ni8qUXVhbnRpZmllZEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwOiAvLyBTaW1wbGVGb3JDbGF1c2UgOjo9IFNpbXBsZUZvckNsYXVzZSBDT01NQSBET0xMQVIgVmFyTmFtZSBJTiBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdDsKLQkJaW50IHBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcHMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLnZhbHVlOwotCQlpbnQgdmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHZyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJUU5hbWUgdiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI4LypTaW1wbGVGb3JDbGF1c2UqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk6IC8vIFNpbXBsZUZvckNsYXVzZSA6Oj0gRk9SIERPTExBUiBWYXJOYW1lIElOIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IHZsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB2cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIHYgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCUNvbGxlY3Rpb24gcGFpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBhaXJzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwYWlyczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI4LypTaW1wbGVGb3JDbGF1c2UqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDg6IC8vIEZvckV4cHIgOjo9IFNpbXBsZUZvckNsYXVzZSBSRVRVUk4gRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRm9yRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGFpcnNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBwYWlyc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHBhaXJzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCUZvckV4cHIgZmV4cCA9IG5ldyBGb3JFeHByKHBhaXJzLGUpOwotCQkJCVJFU1VMVCA9IGZleHA7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3NS8qRm9yRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzogLy8gRXhwclNpbmdsZSA6Oj0gT3JFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDcvKkV4cHJTaW5nbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY6IC8vIEV4cHJTaW5nbGUgOjo9IElmRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJSWZFeHByIG4gPSAoSWZFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Ny8qRXhwclNpbmdsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTogLy8gRXhwclNpbmdsZSA6Oj0gUXVhbnRpZmllZEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVF1YW50aWZpZWRFeHByIG4gPSAoUXVhbnRpZmllZEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ3LypFeHByU2luZ2xlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0OiAvLyBFeHByU2luZ2xlIDo6PSBGb3JFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlGb3JFeHByIG4gPSAoRm9yRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDcvKkV4cHJTaW5nbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM6IC8vIEV4cHIgOjo9IEV4cHIgQ09NTUEgRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgZXhwcnNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBleHByc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGV4cHJzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGV4bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXhyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBleCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSAKLQkJCQlleHBycy5hZGQoZXgpOwotCQkJCVJFU1VMVCA9IGV4cHJzOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjUvKkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI6IC8vIEV4cHIgOjo9IEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGV4bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXhyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBleCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSAKLQkJCQlDb2xsZWN0aW9uIGV4cHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJZXhwcy5hZGQoZXgpOwotCQkJCVJFU1VMVCA9IGV4cHM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNS8qRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTogLy8gJFNUQVJUIDo6PSBYUGF0aCBFT0YgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE9iamVjdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgc3RhcnRfdmFsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgc3RhcnRfdmFscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVhQYXRoIHN0YXJ0X3ZhbCA9IChYUGF0aCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlSRVNVTFQgPSBzdGFydF92YWw7Ci0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMC8qJFNUQVJUKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgLyogQUNDRVBUICovCi0gICAgICAgICAgQ1VQJFhQYXRoQ3VwJHBhcnNlci5kb25lX3BhcnNpbmcoKTsKLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDA6IC8vIFhQYXRoIDo6PSBFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZXhwc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGV4cHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBleHBzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBYUGF0aChleHBzKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzQvKlhQYXRoKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAiSW52YWxpZCBhY3Rpb24gbnVtYmVyIGZvdW5kIGluIGludGVybmFsIHBhcnNlIHRhYmxlIik7Ci0KLSAgICAgICAgfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc3NzBlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqCi0gKiBUaGlzIGVycm9yIGlzIHRocm93biB3aGVuIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGFuIFhQYXRoIGV4Y2VwdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIFhQYXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNjYyNDYzMTc5MjA4NzMwMzIwOUw7Ci0JcHJpdmF0ZSBTdHJpbmcgX3JlYXNvbjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBYUGF0aEVycm9yCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgSXMgdGhlIHJlYXNvbiB3aHkgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93bi4KLQkgKi8KLQlwdWJsaWMgWFBhdGhFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCV9yZWFzb24gPSByZWFzb247Ci0JfQotCi0JLyoqCi0JICogVGhlIHJlYXNvbiB3aHkgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93bi4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSByZWFzb24gd2h5IHRoZSBlcnJvciBoYXMgYmVlbiB0aHJvdy4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHJlYXNvbigpIHsKLQkJcmV0dXJuIF9yZWFzb247Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEZsZXguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhGbGV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMGU3MDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEZsZXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMTkgKzAsMCBAQAotLyogVGhlIGZvbGxvd2luZyBjb2RlIHdhcyBnZW5lcmF0ZWQgYnkgSkZsZXggMS40LjMgb24gMTIvMTQvMDkgMjowMiBBTSAqLwotCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0vLyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAqCi0vLyAqIENvbnRyaWJ1dG9yczoKLS8vICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLS8vICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA5ODcgLSBmaXhlZCBsaXRlcmFsIGlzc3VlcyBmb3IgaW50ZWdlciBhbmQgZGVjaW1hbAotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4MzIxNCAtIGZpeCBJRiBUSEVOIEVMU0UgcGFyc2luZyBhbmQgdXBkYXRlIGdyYW1tYXJzCi0vLyAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg2MDYxICAgY29ycmVjdCBoYW5kbGluZyBvZiBxdW90ZWQgc3RyaW5nIAotLy8gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyOTc3MDcgLSBNaXNzaW5nIHRoZSBlbXB0eS1zZXF1ZW5jZSgpIHR5cGUKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IGphdmFfY3VwLnJ1bnRpbWUuKjsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYSBzY2FubmVyIGdlbmVyYXRlZCBieSAKLSAqIDxhIGhyZWY9Imh0dHA6Ly93d3cuamZsZXguZGUvIj5KRmxleDwvYT4gMS40LjMKLSAqIG9uIDEyLzE0LzA5IDI6MDIgQU0gZnJvbSB0aGUgc3BlY2lmaWNhdGlvbiBmaWxlCi0gKiA8dHQ+L1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLTMuNU01L29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy94cGF0aC5sZXg8L3R0PgotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhGbGV4IGltcGxlbWVudHMgamF2YV9jdXAucnVudGltZS5TY2FubmVyIHsKLQotICAvKiogVGhpcyBjaGFyYWN0ZXIgZGVub3RlcyB0aGUgZW5kIG9mIGZpbGUgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWVlFT0YgPSAtMTsKLQotICAvKiogaW5pdGlhbCBzaXplIG9mIHRoZSBsb29rYWhlYWQgYnVmZmVyICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaWl9CVUZGRVJTSVpFID0gMTYzODQ7Ci0KLSAgLyoqIGxleGljYWwgc3RhdGVzICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlZSU5JVElBTCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1FTlQgPSAyOwotCi0gIC8qKgotICAgKiBaWl9MRVhTVEFURVtsXSBpcyB0aGUgc3RhdGUgaW4gdGhlIERGQSBmb3IgdGhlIGxleGljYWwgc3RhdGUgbAotICAgKiBaWl9MRVhTVEFURVtsKzFdIGlzIHRoZSBzdGF0ZSBpbiB0aGUgREZBIGZvciB0aGUgbGV4aWNhbCBzdGF0ZSBsCi0gICAqICAgICAgICAgICAgICAgICAgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKLSAgICogbCBpcyBvZiB0aGUgZm9ybSBsID0gMiprLCBrIGEgbm9uIG5lZ2F0aXZlIGludGVnZXIKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaWl9MRVhTVEFURVtdID0geyAKLSAgICAgMCwgIDAsICAxLCAxCi0gIH07Ci0KLSAgLyoqIAotICAgKiBUcmFuc2xhdGVzIGNoYXJhY3RlcnMgdG8gY2hhcmFjdGVyIGNsYXNzZXMKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaWl9DTUFQX1BBQ0tFRCA9IAotICAgICJcMTFcMFwxXDFcMVwxXDJcMFwxXDFcMjJcMFwxXDFcMVwyMlwxXDJcMVwwIisKLSAgICAiXDFcMzBcMlwwXDFcM1wxXDEyXDFcMTZcMVwxN1wxXDdcMVwyN1wxXDExXDFcNSIrCi0gICAgIlwxXDI1XDEyXDRcMVwxM1wxXDBcMVwyM1wxXDIxXDFcMjRcMVwzMVwxXDI2XDRcMTAiKwotICAgICJcMVw2XDI1XDEwXDFcMTRcMVwwXDFcMTVcMVwwXDFcMTBcMVwwXDFcNDJcMVw0NSIrCi0gICAgIlwxXDMyXDFcMzZcMVwzN1wxXDQ3XDFcNTJcMVwzM1wxXDM0XDJcMTBcMVwzNVwxXDUzIisKLSAgICAiXDFcNDFcMVw1MFwxXDU0XDFcNTVcMVw0NFwxXDQwXDFcNDNcMVw0NlwxXDU2XDFcNTEiKwotICAgICJcMVw1N1wxXDYwXDFcMTBcMVwwXDFcMjBcdWZmODNcMCI7Ci0KLSAgLyoqIAotICAgKiBUcmFuc2xhdGVzIGNoYXJhY3RlcnMgdG8gY2hhcmFjdGVyIGNsYXNzZXMKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgW10gWlpfQ01BUCA9IHp6VW5wYWNrQ01hcChaWl9DTUFQX1BBQ0tFRCk7Ci0KLSAgLyoqIAotICAgKiBUcmFuc2xhdGVzIERGQSBzdGF0ZXMgdG8gYWN0aW9uIHN3aXRjaCBsYWJlbHMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gWlpfQUNUSU9OID0genpVbnBhY2tBY3Rpb24oKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfQUNUSU9OX1BBQ0tFRF8wID0KLSAgICAiXDJcMFwxXDFcMVwyXDJcMVwxXDNcMVw0XDFcNVwxXDYiKwotICAgICJcMVw3XDFcMTBcMVwxMVwxXDEyXDFcMTNcMVwxNFwxXDE1XDFcMTYiKwotICAgICJcMVwxN1wxXDFcMVwyMFwxXDIxXDFcMjJcMVwyM1wxXDI0XDFcMjUiKwotICAgICJcMVwyNlwyMFw1XDJcMlwxXDBcMVwyN1wxXDBcMVwyN1wxXDMwIisKLSAgICAiXDFcMFwxXDMxXDFcMzJcMVwzM1wxXDM0XDFcMzVcMVwzNlwxXDM3IisKLSAgICAiXDFcNDBcMVw0MVw0XDVcMVw0MlwxXDQzXDFcNVwxXDQ0XDFcNDUiKwotICAgICJcMVw0Nlw1XDVcMVw0N1w2XDVcMVw1MFwyXDVcMVw1MVw1XDUiKwotICAgICJcMVw1Mlw0XDVcMVw1M1wxXDU0XDFcNTVcMVw1NlwzXDVcMVw1NyIrCi0gICAgIlwxXDYwXDFcNjFcMVwwXDdcNVwxXDYyXDE2XDVcMVw2M1wxMFw1IisKLSAgICAiXDFcNjRcMVw2NVw0XDVcMVw2NlwxXDVcMVw2N1wyXDVcMVw3MCIrCi0gICAgIlwzXDVcMVw3MVw0XDVcMVw3MlwxXDVcMVw3M1wxXDVcMVw3NCIrCi0gICAgIlwyXDVcMVw3NVwxXDc2XDEwXDVcMVw3N1wxMFw1XDFcMTAwXDZcNSIrCi0gICAgIlwxXDEwMVwyXDVcMVwxMDJcMTRcNVwxXDEwM1w2XDVcMVwxMDRcMVw1IisKLSAgICAiXDFcMTA1XDNcNVwxXDEwNlw0XDVcMVwxMDdcMTJcNVwxXDExMFwxXDExMSIrCi0gICAgIlwxMFw1XDFcMTEyXDVcNVwxXDExM1w1XDVcMVwxMTRcMVwxMTVcMVw1IisKLSAgICAiXDFcMTE2XDFcNVwxXDExN1wxXDEyMFwxXDVcMVwxMjFcNVw1XDFcMTIyIisKLSAgICAiXDI2XDVcMVwxMjNcMTBcNVwxXDEyNFwxXDEyNVwxNFw1XDFcMTI2XDFcMTI3IisKLSAgICAiXDRcNVwxXDEzMFwxXDEzMVwxXDVcMVwxMzJcNFw1XDFcMTMzIjsKLQotICBwcml2YXRlIHN0YXRpYyBpbnQgW10genpVbnBhY2tBY3Rpb24oKSB7Ci0gICAgaW50IFtdIHJlc3VsdCA9IG5ldyBpbnRbMzMzXTsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBvZmZzZXQgPSB6elVucGFja0FjdGlvbihaWl9BQ1RJT05fUEFDS0VEXzAsIG9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHp6VW5wYWNrQWN0aW9uKFN0cmluZyBwYWNrZWQsIGludCBvZmZzZXQsIGludCBbXSByZXN1bHQpIHsKLSAgICBpbnQgaSA9IDA7ICAgICAgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSBvZmZzZXQ7ICAvKiBpbmRleCBpbiB1bnBhY2tlZCBhcnJheSAqLwotICAgIGludCBsID0gcGFja2VkLmxlbmd0aCgpOwotICAgIHdoaWxlIChpIDwgbCkgewotICAgICAgaW50IGNvdW50ID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgaW50IHZhbHVlID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgZG8gcmVzdWx0W2orK10gPSB2YWx1ZTsgd2hpbGUgKC0tY291bnQgPiAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGo7Ci0gIH0KLQotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBhIHN0YXRlIHRvIGEgcm93IGluZGV4IGluIHRoZSB0cmFuc2l0aW9uIHRhYmxlCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gWlpfUk9XTUFQID0genpVbnBhY2tSb3dNYXAoKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfUk9XTUFQX1BBQ0tFRF8wID0KLSAgICAiXDBcMFwwXDYxXDBcMTQyXDBcMTQyXDBcMjIzXDBcMzA0XDBcMzY1XDBcdTAxMjYiKwotICAgICJcMFx1MDE1N1wwXDE0MlwwXDE0MlwwXHUwMTg4XDBcdTAxYjlcMFwxNDJcMFwxNDJcMFwxNDIiKwotICAgICJcMFwxNDJcMFwxNDJcMFwxNDJcMFx1MDFlYVwwXHUwMjFiXDBcdTAyNGNcMFx1MDI3ZFwwXDE0MiIrCi0gICAgIlwwXDE0MlwwXDE0MlwwXDE0MlwwXHUwMmFlXDBcdTAyZGZcMFx1MDMxMFwwXHUwMzQxXDBcdTAzNzIiKwotICAgICJcMFx1MDNhM1wwXHUwM2Q0XDBcdTA0MDVcMFx1MDQzNlwwXHUwNDY3XDBcdTA0OThcMFx1MDRjOVwwXHUwNGZhIisKLSAgICAiXDBcdTA1MmJcMFx1MDU1Y1wwXHUwNThkXDBcdTA1YmVcMFx1MDVlZlwwXDIyM1wwXHUwNjIwXDBcMzA0IisKLSAgICAiXDBcdTA2NTFcMFx1MDY4MlwwXHUwNmIzXDBcMTQyXDBcMTQyXDBcMTQyXDBcMTQyXDBcMTQyIisKLSAgICAiXDBcMTQyXDBcMTQyXDBcMTQyXDBcMTQyXDBcdTA2ZTRcMFx1MDcxNVwwXHUwNzQ2XDBcdTA3NzciKwotICAgICJcMFx1MDE1N1wwXHUwN2E4XDBcdTA3ZDlcMFx1MDE1N1wwXHUwMTU3XDBcdTAxNTdcMFx1MDgwYVwwXHUwODNiIisKLSAgICAiXDBcdTA4NmNcMFx1MDg5ZFwwXHUwOGNlXDBcdTAxNTdcMFx1MDhmZlwwXHUwOTMwXDBcdTA5NjFcMFx1MDk5MiIrCi0gICAgIlwwXHUwOWMzXDBcdTA5ZjRcMFx1MDE1N1wwXHUwYTI1XDBcdTBhNTZcMFx1MDE1N1wwXHUwYTg3XDBcdTBhYjgiKwotICAgICJcMFx1MGFlOVwwXHUwYjFhXDBcdTBiNGJcMFx1MDE1N1wwXHUwYjdjXDBcdTBiYWRcMFx1MGJkZVwwXHUwYzBmIisKLSAgICAiXDBcdTAxNTdcMFx1MDE1N1wwXHUwMTU3XDBcdTAxNTdcMFx1MGM0MFwwXHUwYzcxXDBcdTBjYTJcMFwxNDIiKwotICAgICJcMFwxNDJcMFx1MGNkM1wwXHUwY2QzXDBcdTBkMDRcMFx1MGQzNVwwXHUwZDY2XDBcdTBkOTdcMFx1MGRjOCIrCi0gICAgIlwwXHUwZGY5XDBcdTBlMmFcMFx1MDE1N1wwXHUwZTViXDBcdTBlOGNcMFx1MGViZFwwXHUwZWVlXDBcdTBmMWYiKwotICAgICJcMFx1MGY1MFwwXHUwZjgxXDBcdTBmYjJcMFx1MGZlM1wwXHUxMDE0XDBcdTEwNDVcMFx1MTA3NlwwXHUxMGE3IisKLSAgICAiXDBcdTEwZDhcMFx1MDE1N1wwXHUxMTA5XDBcdTExM2FcMFx1MTE2YlwwXHUxMTljXDBcdTExY2RcMFx1MTFmZSIrCi0gICAgIlwwXHUxMjJmXDBcdTEyNjBcMFx1MDE1N1wwXHUwMTU3XDBcdTEyOTFcMFx1MTJjMlwwXHUxMmYzXDBcdTEzMjQiKwotICAgICJcMFx1MTM1NVwwXHUxMzg2XDBcdTAxNTdcMFx1MTNiN1wwXHUxM2U4XDBcdTAxNTdcMFx1MTQxOVwwXHUxNDRhIisKLSAgICAiXDBcdTE0N2JcMFx1MDE1N1wwXHUxNGFjXDBcdTE0ZGRcMFx1MTUwZVwwXHUxNTNmXDBcdTAxNTdcMFx1MTU3MCIrCi0gICAgIlwwXHUwMTU3XDBcdTE1YTFcMFx1MDE1N1wwXHUxNWQyXDBcdTE2MDNcMFx1MDE1N1wwXHUwMTU3XDBcdTE2MzQiKwotICAgICJcMFx1MTY2NVwwXHUxNjk2XDBcdTE2YzdcMFx1MTZmOFwwXHUxNzI5XDBcdTE3NWFcMFx1MTc4YlwwXHUwMTU3IisKLSAgICAiXDBcdTE3YmNcMFx1MTdlZFwwXHUxODFlXDBcdTE4NGZcMFx1MTg4MFwwXHUxOGIxXDBcdTE4ZTJcMFx1MTkxMyIrCi0gICAgIlwwXHUwMTU3XDBcdTE5NDRcMFx1MTk3NVwwXHUxOWE2XDBcdTE5ZDdcMFx1MWEwOFwwXHUxYTM5XDBcdTAxNTciKwotICAgICJcMFx1MWE2YVwwXHUxYTliXDBcdTAxNTdcMFx1MWFjY1wwXHUxYWZkXDBcdTFiMmVcMFx1MWI1ZlwwXHUxYjkwIisKLSAgICAiXDBcdTFiYzFcMFx1MWJmMlwwXHUxYzIzXDBcdTFjNTRcMFx1MWM4NVwwXHUxY2I2XDBcdTFjZTdcMFx1MDE1NyIrCi0gICAgIlwwXHUxZDE4XDBcdTFkNDlcMFx1MWQ3YVwwXHUxZGFiXDBcdTFkZGNcMFx1MWUwZFwwXHUwMTU3XDBcdTFlM2UiKwotICAgICJcMFx1MDE1N1wwXHUxZTZmXDBcdTFlYTBcMFx1MWVkMVwwXHUwMTU3XDBcdTFmMDJcMFx1MWYzM1wwXHUxZjY0IisKLSAgICAiXDBcdTFmOTVcMFx1MDE1N1wwXHUxZmM2XDBcdTFmZjdcMFx1MjAyOFwwXHUyMDU5XDBcdTIwOGFcMFx1MjBiYiIrCi0gICAgIlwwXHUyMGVjXDBcdTIxMWRcMFx1MjE0ZVwwXHUyMTdmXDBcdTAxNTdcMFx1MDE1N1wwXHUyMWIwXDBcdTIxZTEiKwotICAgICJcMFx1MjIxMlwwXHUyMjQzXDBcdTIyNzRcMFx1MjJhNVwwXHUyMmQ2XDBcdTIzMDdcMFx1MjMzOFwwXHUyMzY5IisKLSAgICAiXDBcdTIzOWFcMFx1MjNjYlwwXHUyM2ZjXDBcdTI0MmRcMFx1MDE1N1wwXHUyNDVlXDBcdTI0OGZcMFx1MjRjMCIrCi0gICAgIlwwXHUyNGYxXDBcdTI1MjJcMFx1MDE1N1wwXHUwMTU3XDBcdTI1NTNcMFx1MDE1N1wwXHUyNTg0XDBcdTI1YjUiKwotICAgICJcMFx1MjVlNlwwXHUyNjE3XDBcdTI2NDhcMFx1MjY3OVwwXHUyNmFhXDBcdTI2ZGJcMFx1MjcwY1wwXHUyNzNkIisKLSAgICAiXDBcdTAxNTdcMFx1Mjc2ZVwwXHUyNzlmXDBcdTI3ZDBcMFx1MjgwMVwwXHUyODMyXDBcdTI4NjNcMFx1Mjg5NCIrCi0gICAgIlwwXHUyOGM1XDBcdTI4ZjZcMFx1MjkyN1wwXHUyOTU4XDBcdTI5ODlcMFx1MjliYVwwXHUyOWViXDBcdTJhMWMiKwotICAgICJcMFx1MmE0ZFwwXHUyYTdlXDBcdTJhYWZcMFx1MmFlMFwwXHUyYjExXDBcdTJiNDJcMFx1MmI3M1wwXHUwMTU3IisKLSAgICAiXDBcdTJiYTRcMFx1MmJkNVwwXHUyYzA2XDBcdTJjMzdcMFx1MmM2OFwwXHUyYzk5XDBcdTJjY2FcMFx1MmNmYiIrCi0gICAgIlwwXHUwMTU3XDBcdTAxNTdcMFx1MmQyY1wwXHUyZDVkXDBcdTJkOGVcMFx1MmRiZlwwXHUyZGYwXDBcdTJlMjEiKwotICAgICJcMFx1MmU1MlwwXHUyZTgzXDBcdTJlYjRcMFx1MmVlNVwwXHUyZjE2XDBcdTJmNDdcMFx1MDE1N1wwXHUwMTU3IisKLSAgICAiXDBcdTJmNzhcMFx1MmZhOVwwXHUyZmRhXDBcdTMwMGJcMFx1MDE1N1wwXHUwMTU3XDBcdTMwM2NcMFx1MDE1NyIrCi0gICAgIlwwXHUzMDZkXDBcdTMwOWVcMFx1MzBjZlwwXHUzMTAwXDBcdTAxNTciOwotCi0gIHByaXZhdGUgc3RhdGljIGludCBbXSB6elVucGFja1Jvd01hcCgpIHsKLSAgICBpbnQgW10gcmVzdWx0ID0gbmV3IGludFszMzNdOwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIG9mZnNldCA9IHp6VW5wYWNrUm93TWFwKFpaX1JPV01BUF9QQUNLRURfMCwgb2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgenpVbnBhY2tSb3dNYXAoU3RyaW5nIHBhY2tlZCwgaW50IG9mZnNldCwgaW50IFtdIHJlc3VsdCkgewotICAgIGludCBpID0gMDsgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSBvZmZzZXQ7ICAvKiBpbmRleCBpbiB1bnBhY2tlZCBhcnJheSAqLwotICAgIGludCBsID0gcGFja2VkLmxlbmd0aCgpOwotICAgIHdoaWxlIChpIDwgbCkgewotICAgICAgaW50IGhpZ2ggPSBwYWNrZWQuY2hhckF0KGkrKykgPDwgMTY7Ci0gICAgICByZXN1bHRbaisrXSA9IGhpZ2ggfCBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgfQotICAgIHJldHVybiBqOwotICB9Ci0KLSAgLyoqIAotICAgKiBUaGUgdHJhbnNpdGlvbiB0YWJsZSBvZiB0aGUgREZBCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gWlpfVFJBTlMgPSB6elVucGFja1RyYW5zKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX1RSQU5TX1BBQ0tFRF8wID0KLSAgICAiXDFcM1wxXDRcMVw1XDFcNlwxXDdcMVwxMFwxXDExXDFcMTIiKwotICAgICJcMVwxMVwxXDEzXDFcMTRcMVwxNVwxXDE2XDFcMTdcMVwyMFwxXDIxIisKLSAgICAiXDFcMjJcMVwyM1wxXDI0XDFcMjVcMVwyNlwxXDI3XDFcMzBcMVwzMSIrCi0gICAgIlwxXDMyXDFcMzNcMVwzNFwxXDExXDFcMzVcMVwzNlwxXDM3XDFcNDAiKwotICAgICJcMVw0MVwxXDQyXDFcNDNcMVw0NFwxXDQ1XDFcMTFcMVw0NlwxXDQ3IisKLSAgICAiXDFcNTBcMVwxMVwxXDUxXDFcNTJcMVw1M1w0XDExXDEyXDRcMVw1NCIrCi0gICAgIlwxXDU1XDQ1XDRcNjFcMFwyXDU2XDFcNTdcNTZcNTZcM1w2MFwxXDYxIisKLSAgICAiXDU1XDYwXDRcMFwxXDdcMVw2MlwxXDYzXDMwXDBcMVw2M1wyNVwwIisKLSAgICAiXDFcNjJcMVw2NFw1N1wwXDNcMTFcMVwwXDJcMTFcMjBcMFwyN1wxMSIrCi0gICAgIlwxM1wwXDFcNjVcNjBcMFwxXDY2XDY2XDBcMVw2N1w2MFwwXDFcNzAiKwotICAgICJcMVwwXDFcNzFcNTZcMFwxXDcyXDJcMFwxXDczXDYxXDBcMVw3NCIrCi0gICAgIlwzN1wwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDExXDFcNzVcNlwxMSIrCi0gICAgIlwxXDc2XDVcMTFcMVw3N1wxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDRcMTFcMVwxMDBcMVwxMVwxXDEwMVwxXDEwMlwxXDExXDFcMTAzIisKLSAgICAiXDNcMTFcMVwxMDRcMTFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMTA1XDNcMTFcMVwxMDZcMTVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwyXDExXDFcMTA3XDJcMTFcMVwxMTBcMTBcMTFcMVwxMTEiKwotICAgICJcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExXDFcMTEyIisKLSAgICAiXDE1XDExXDFcMTEzXDFcMTFcMVwxMTRcMVwxMTVcMVwxMTZcMVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDFcMTE3XDRcMTFcMVwxMjBcMlwxMSIrCi0gICAgIlwxXDEyMVw1XDExXDFcMTIyXDEwXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXDEyM1wyXDExXDFcMTI0XDVcMTFcMVwxMjVcMTBcMTEiKwotICAgICJcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMTI2XDFcMTI3IisKLSAgICAiXDFcMTFcMVwxMzBcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxXDExXDFcMTMxXDNcMTFcMVwxMzJcNFwxMVwxXDEzM1wzXDExXDFcMTM0IisKLSAgICAiXDdcMTFcMVwxMzVcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcMTM2XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMSIrCi0gICAgIlwxXDEzN1wxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE2XDExIisKLSAgICAiXDFcMTQwXDEwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTJcMTEiKwotICAgICJcMVwxNDFcMlwxMVwxXDE0MlwxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwxNDNcM1wxMVwxXDE0NFwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDE2XDExXDFcMTQ1XDEwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwxNDZcMVwxMVwxXDE0N1wxNFwxMSIrCi0gICAgIlwxM1wwXDFcMTUwXDYzXDBcMVwxNTFcNDRcMFwxXDU2XDYxXDBcMVw2MCIrCi0gICAgIlw2MVwwXDFcNjJcMVwwXDFcNjNcMzBcMFwxXDYzXDI1XDBcMVwxNTIiKwotICAgICJcMlwwXDFcMTUzXDFcMFwxXDE1M1w1M1wwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMTU0XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNlwxMVwxXDE1NVwyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDIxXDExXDFcMTU2XDVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMTU3XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNlwxMVwxXDE2MFwyXDExXDFcMTYxXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXDE2MlwyMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDI0XDExXDFcMTYzXDJcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw2XDExXDFcMTY0XDIwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMVwxNjVcMjZcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw1XDExXDFcMTY2XDFcMTY3XDIwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjJcMTFcMVwxNzBcNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDVcMTFcMVwxNzFcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxXDE3MlwyNlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDFcMTFcMVwxNzNcMjVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwzXDExXDFcMTc0XDIzXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMTFcMTFcMVwxNzVcMTVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwyMVwxMVwxXDE3Nlw1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMjFcMTFcMVwxNzdcNVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDRcMTFcMVwyMDBcMjJcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxXDIwMVwzXDExXDFcMjAyXDIyXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwyMDNcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjA0XDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjVcMTFcMVwyMDVcMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyMDZcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyMlwxMVwxXDIwN1w0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwyMTBcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyXDExXDFcMjExXDI0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcM1wxMVwxXDIxMlw2XDExXDFcMjEzXDE0XDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNFwxMVwxXDIxNFwyMlwxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExXDFcMjE1XDE0XDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDIxNlwxMFwxMSIrCi0gICAgIlwxXDIxN1wxMFwxMVw0XDBcMVwxNTJcNjBcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcM1wxMVwxXDIyMFwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDExXDExXDFcMjIxXDE1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMjFcMTFcMVwyMjJcNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDI0XDExXDFcMjIzXDJcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDIyNFwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwyMjVcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyMVwxMVwxXDIyNlw1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMVwyMjdcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxNFwxMVwxXDIzMFwxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDIxXDExXDFcMjMxXDVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjMyXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTFcMTFcMVwyMzNcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMlwxMVwxXDIzNFwxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyMzVcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjM2XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTVcMTFcMVwyMzdcMTFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwyXDExXDFcMjQwXDI0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI0MVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNDJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjQzXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI0NFwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEyXDExXDFcMjQ1XDE0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcN1wxMVwxXDI0NlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcMjQ3XDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTBcMTFcMVwyNTBcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjUxXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTRcMTFcMVwyNTJcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxNlwxMVwxXDI1M1wxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDNcMTFcMVwyNTRcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjU1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMVwyNTZcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDI1NyIrCi0gICAgIlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDRcMTFcMVwyNjAiKwotICAgICJcMjJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMFwxMVwxXDI2MSIrCi0gICAgIlwxNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyNjIiKwotICAgICJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMFwxMVwxXDI2MyIrCi0gICAgIlwxNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExXDFcMjY0IisKLSAgICAiXDE0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDI2NSIrCi0gICAgIlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIxXDExXDFcMjY2IisKLSAgICAiXDVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjY3IisKLSAgICAiXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjZcMTFcMVwyNzAiKwotICAgICJcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyNlwxMVwxXDI3MVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDIyXDExXDFcMjcyXDRcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwyMVwxMVwxXDI3M1w1XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDI3NFwyMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwyNzVcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMjc2XDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMlwxMVwxXDI3N1wyNFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExXDFcMzAwXDE1XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDMwMVwyMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExXDFcMzAyXDE0XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMwM1wxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDE2XDExXDFcMzA0XDEwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMwNVwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwzMDZcMjFcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMzA3XDIxXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMTNcMTFcMVwzMTBcMTNcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzExXDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMxMlwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwzMTNcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzE0XDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDMxNVwyMVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMTZcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDFcMTFcMVwzMTdcMjBcMFwyN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMzIwXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwzMjFcMTZcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxNVwxMVwxXDMyMlwxMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDIyXDExXDFcMzIzXDRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMyNFwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEzXDExXDFcMzI1XDEzXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTdcMTFcMVwzMjZcN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMjdcMTdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxN1wxMVwxXDMzMFw3XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMzFcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw0XDExXDFcMzMyXDIyXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNlwxMVwxXDMzM1wyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDNcMTFcMVwzMzRcMjNcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMzNVwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDFcMzM2XDI2XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNVwxMVwxXDMzN1wyMVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDRcMTFcMVwzNDBcMjJcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw3XDExXDFcMzQxXDE3XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMTFcMTFcMVwzNDJcMTVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw2XDExXDFcMzQzXDIwXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwxXDExXDFcMzQ0XDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMzQ1XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTBcMTFcMVwzNDZcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxNlwxMVwxXDM0N1wxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDE0XDExXDFcMzUwXDEyXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM1MVwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNTJcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMzUzXDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNlwxMVwxXDM1NFwyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwzNTVcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMzU2XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMVwzNTdcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMFwxMVwxXDM2MFwxNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcMzYxXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDM2MlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwzNjNcMlwxMVwxXDM2NFwxNlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDVcMTFcMVwzNjVcMjFcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxXDM2NlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDEyXDExXDFcMzY3XDE0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwzNzBcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDM3MVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDdcMTFcMVwzNzJcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw3XDExXDFcMzczXDE3XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM3NFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDExXDExXDFcMzc1XDE1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcN1wxMVwxXDM3NlwxN1wxMVw0XDBcM1wxMVwxXDBcMVwxMSIrCi0gICAgIlwxXDM3N1wyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMjNcMTFcMVx1MDEwMFwzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcM1wxMVwxXHUwMTAxXDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTFcMTFcMVx1MDEwMlwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDZcMTFcMVx1MDEwM1wyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVx1MDEwNFwyMVwxMVw0XDBcM1wxMVwxXDBcMVwxMVwxXHUwMTA1IisKLSAgICAiXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxMDZcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXHUwMTA3IisKLSAgICAiXDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjBcMTFcMVx1MDEwOCIrCi0gICAgIlw2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjBcMTFcMVx1MDEwOSIrCi0gICAgIlw2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXHUwMTBhIisKLSAgICAiXDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTFcMVx1MDEwYiIrCi0gICAgIlwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVx1MDEwYyIrCi0gICAgIlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE0XDExXDFcdTAxMGQiKwotICAgICJcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcdTAxMGUiKwotICAgICJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXHUwMTBmIisKLSAgICAiXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTZcMTFcMVx1MDExMCIrCi0gICAgIlwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDFcMTFcMVx1MDExMSIrCi0gICAgIlwyNVwxMVw0XDBcM1wxMVwxXDBcMVwxMVwxXHUwMTEyXDIwXDBcMjdcMTEiKwotICAgICJcNFwwXDNcMTFcMVwwXDFcMTFcMVx1MDExM1wyMFwwXDI3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMjBcMTFcMVx1MDExNFw2XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwxXDExXDFcdTAxMTVcMjBcMFwyN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDE2XDExXDFcdTAxMTZcMTBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcdTAxMTdcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyMVwxMVwxXHUwMTE4XDVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXHUwMTE5XDE0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTJcMTFcMVx1MDExYVwxNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDZcMTFcMVx1MDExYlwyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDZcMTFcMVx1MDExY1wyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMVwxMVwxXHUwMTFkXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxNlwxMVwxXHUwMTFlXDEwXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNFwxMVwxXHUwMTFmXDIyXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcN1wxMVwxXHUwMTIwXDE3XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNVwxMVwxXHUwMTIxXDIxXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMlwxMVwxXHUwMTIyXDI0XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwxXDExXDFcdTAxMjNcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVx1MDEyNFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVx1MDEyNVwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVx1MDEyNlwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDEyXDExXDFcdTAxMjdcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcdTAxMjhcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxXHUwMTI5XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcN1wxMVwxXHUwMTJhXDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTNcMTFcMVx1MDEyYlwxM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDZcMTFcMVx1MDEyY1wyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEzXDExXDFcdTAxMmRcMTNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxM1wxMVwxXHUwMTJlXDEzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcN1wxMVwxXHUwMTJmXDE3XDExXDRcMFwzXDExXDFcMFwxXDExXDFcdTAxMzAiKwotICAgICJcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTEiKwotICAgICJcMVx1MDEzMVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExIisKLSAgICAiXDFcdTAxMzJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNFwxMSIrCi0gICAgIlwxXHUwMTMzXDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTM0XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcM1wxMSIrCi0gICAgIlwxXHUwMTM1XDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcM1wxMSIrCi0gICAgIlwxXHUwMTM2XDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNlwxMSIrCi0gICAgIlwxXHUwMTM3XDIwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNlwxMSIrCi0gICAgIlwxXHUwMTM4XDIwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTEiKwotICAgICJcMVx1MDEzOVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDEzYVwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDJcMTEiKwotICAgICJcMVx1MDEzYlwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDJcMTEiKwotICAgICJcMVx1MDEzY1wyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExIisKLSAgICAiXDFcdTAxM2RcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxM2VcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxM2ZcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNVwxMSIrCi0gICAgIlwxXHUwMTQwXDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMSIrCi0gICAgIlwxXHUwMTQxXDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMSIrCi0gICAgIlwxXHUwMTQyXDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTJcMTEiKwotICAgICJcMVx1MDE0M1wxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDE0NFwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExIisKLSAgICAiXDFcdTAxNDVcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExIisKLSAgICAiXDFcdTAxNDZcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE0XDExIisKLSAgICAiXDFcdTAxNDdcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNVwxMSIrCi0gICAgIlwxXHUwMTQ4XDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMVx1MDE0OSIrCi0gICAgIlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExXDFcdTAxNGEiKwotICAgICJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyXDExXDFcdTAxNGIiKwotICAgICJcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXHUwMTRjIisKLSAgICAiXDEwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXHUwMTRkIisKLSAgICAiXDE3XDExIjsKLQotICBwcml2YXRlIHN0YXRpYyBpbnQgW10genpVbnBhY2tUcmFucygpIHsKLSAgICBpbnQgW10gcmVzdWx0ID0gbmV3IGludFsxMjU5M107Ci0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgb2Zmc2V0ID0genpVbnBhY2tUcmFucyhaWl9UUkFOU19QQUNLRURfMCwgb2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgenpVbnBhY2tUcmFucyhTdHJpbmcgcGFja2VkLCBpbnQgb2Zmc2V0LCBpbnQgW10gcmVzdWx0KSB7Ci0gICAgaW50IGkgPSAwOyAgICAgICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGludCB2YWx1ZSA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIHZhbHVlLS07Ci0gICAgICBkbyByZXN1bHRbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gajsKLSAgfQotCi0KLSAgLyogZXJyb3IgY29kZXMgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX1VOS05PV05fRVJST1IgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfTk9fTUFUQ0ggPSAxOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfUFVTSEJBQ0tfMkJJRyA9IDI7Ci0KLSAgLyogZXJyb3IgbWVzc2FnZXMgZm9yIHRoZSBjb2RlcyBhYm92ZSAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfRVJST1JfTVNHW10gPSB7Ci0gICAgIlVua293biBpbnRlcm5hbCBzY2FubmVyIGVycm9yIiwKLSAgICAiRXJyb3I6IGNvdWxkIG5vdCBtYXRjaCBpbnB1dCIsCi0gICAgIkVycm9yOiBwdXNoYmFjayB2YWx1ZSB3YXMgdG9vIGxhcmdlIgotICB9OwotCi0gIC8qKgotICAgKiBaWl9BVFRSSUJVVEVbYVN0YXRlXSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiBzdGF0ZSA8Y29kZT5hU3RhdGU8L2NvZGU+Ci0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gWlpfQVRUUklCVVRFID0genpVbnBhY2tBdHRyaWJ1dGUoKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfQVRUUklCVVRFX1BBQ0tFRF8wID0KLSAgICAiXDJcMFwyXDExXDVcMVwyXDExXDJcMVw2XDExXDRcMVw0XDExIisKLSAgICAiXDIyXDFcMVwwXDFcMVwxXDBcMlwxXDFcMFwxMVwxMVw1M1wxIisKLSAgICAiXDJcMTFcMVwxXDFcMFwzNDJcMSI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IFtdIHp6VW5wYWNrQXR0cmlidXRlKCkgewotICAgIGludCBbXSByZXN1bHQgPSBuZXcgaW50WzMzM107Ci0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgb2Zmc2V0ID0genpVbnBhY2tBdHRyaWJ1dGUoWlpfQVRUUklCVVRFX1BBQ0tFRF8wLCBvZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGludCB6elVucGFja0F0dHJpYnV0ZShTdHJpbmcgcGFja2VkLCBpbnQgb2Zmc2V0LCBpbnQgW10gcmVzdWx0KSB7Ci0gICAgaW50IGkgPSAwOyAgICAgICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGludCB2YWx1ZSA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGRvIHJlc3VsdFtqKytdID0gdmFsdWU7IHdoaWxlICgtLWNvdW50ID4gMCk7Ci0gICAgfQotICAgIHJldHVybiBqOwotICB9Ci0KLSAgLyoqIHRoZSBpbnB1dCBkZXZpY2UgKi8KLSAgcHJpdmF0ZSBqYXZhLmlvLlJlYWRlciB6elJlYWRlcjsKLQotICAvKiogdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIERGQSAqLwotICBwcml2YXRlIGludCB6elN0YXRlOwotCi0gIC8qKiB0aGUgY3VycmVudCBsZXhpY2FsIHN0YXRlICovCi0gIHByaXZhdGUgaW50IHp6TGV4aWNhbFN0YXRlID0gWVlJTklUSUFMOwotCi0gIC8qKiB0aGlzIGJ1ZmZlciBjb250YWlucyB0aGUgY3VycmVudCB0ZXh0IHRvIGJlIG1hdGNoZWQgYW5kIGlzCi0gICAgICB0aGUgc291cmNlIG9mIHRoZSB5eXRleHQoKSBzdHJpbmcgKi8KLSAgcHJpdmF0ZSBjaGFyIHp6QnVmZmVyW10gPSBuZXcgY2hhcltaWl9CVUZGRVJTSVpFXTsKLQotICAvKiogdGhlIHRleHRwb3NpdGlvbiBhdCB0aGUgbGFzdCBhY2NlcHRpbmcgc3RhdGUgKi8KLSAgcHJpdmF0ZSBpbnQgenpNYXJrZWRQb3M7Ci0KLSAgLyoqIHRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciAqLwotICBwcml2YXRlIGludCB6ekN1cnJlbnRQb3M7Ci0KLSAgLyoqIHN0YXJ0UmVhZCBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB5eXRleHQoKSBzdHJpbmcgaW4gdGhlIGJ1ZmZlciAqLwotICBwcml2YXRlIGludCB6elN0YXJ0UmVhZDsKLQotICAvKiogZW5kUmVhZCBtYXJrcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlciwgdGhhdCBoYXMgYmVlbiByZWFkCi0gICAgICBmcm9tIGlucHV0ICovCi0gIHByaXZhdGUgaW50IHp6RW5kUmVhZDsKLQotICAvKiogbnVtYmVyIG9mIG5ld2xpbmVzIGVuY291bnRlcmVkIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2hlZCB0ZXh0ICovCi0gIHByaXZhdGUgaW50IHl5bGluZTsKLQotICAvKiogdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2hlZCB0ZXh0ICovCi0gIHByaXZhdGUgaW50IHl5Y2hhcjsKLQotICAvKioKLSAgICogdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxhc3QgbmV3bGluZSB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIAotICAgKiBtYXRjaGVkIHRleHQKLSAgICovCi0gIHByaXZhdGUgaW50IHl5Y29sdW1uOwotCi0gIC8qKiAKLSAgICogenpBdEJPTCA9PSB0cnVlIDw9PiB0aGUgc2Nhbm5lciBpcyBjdXJyZW50bHkgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB6ekF0Qk9MID0gdHJ1ZTsKLQotICAvKiogenpBdEVPRiA9PSB0cnVlIDw9PiB0aGUgc2Nhbm5lciBpcyBhdCB0aGUgRU9GICovCi0gIHByaXZhdGUgYm9vbGVhbiB6ekF0RU9GOwotCi0gIC8qKiBkZW5vdGVzIGlmIHRoZSB1c2VyLUVPRi1jb2RlIGhhcyBhbHJlYWR5IGJlZW4gZXhlY3V0ZWQgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHp6RU9GRG9uZTsKLQotICAvKiB1c2VyIGNvZGU6ICovCi0JcHVibGljIGludCBsaW5lbm8oKSB7IHJldHVybiB5eWxpbmUgKyAxOyB9Ci0JcHVibGljIGludCBjb2xubygpIHsgcmV0dXJuIHl5Y29sdW1uICsgMTsgfQotCi0JcHJpdmF0ZSBTeW1ib2wgc3ltYm9sKGludCB0eXBlKSB7Ci0JCXJldHVybiBuZXcgU3ltYm9sKHR5cGUsIGxpbmVubygpLCBjb2xubygpKTsKLQl9Ci0JcHJpdmF0ZSBTeW1ib2wgc3ltYm9sKGludCB0eXBlLCBPYmplY3QgdmFsdWUpIHsKLQkJcmV0dXJuIG5ldyBTeW1ib2wodHlwZSwgbGluZW5vKCksIGNvbG5vKCksIHZhbHVlKTsKLQl9Ci0KLQlwcml2YXRlIGludCBjb21tZW50TGV2ZWwgPSAwOwotCi0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgc2Nhbm5lcgotICAgKiBUaGVyZSBpcyBhbHNvIGEgamF2YS5pby5JbnB1dFN0cmVhbSB2ZXJzaW9uIG9mIHRoaXMgY29uc3RydWN0b3IuCi0gICAqCi0gICAqIEBwYXJhbSAgIGluICB0aGUgamF2YS5pby5SZWFkZXIgdG8gcmVhZCBpbnB1dCBmcm9tLgotICAgKi8KLSAgcHVibGljIFhQYXRoRmxleChqYXZhLmlvLlJlYWRlciBpbikgewotICAgIHRoaXMuenpSZWFkZXIgPSBpbjsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IHNjYW5uZXIuCi0gICAqIFRoZXJlIGlzIGFsc28gamF2YS5pby5SZWFkZXIgdmVyc2lvbiBvZiB0aGlzIGNvbnN0cnVjdG9yLgotICAgKgotICAgKiBAcGFyYW0gICBpbiAgdGhlIGphdmEuaW8uSW5wdXRzdHJlYW0gdG8gcmVhZCBpbnB1dCBmcm9tLgotICAgKi8KLSAgWFBhdGhGbGV4KGphdmEuaW8uSW5wdXRTdHJlYW0gaW4pIHsKLSAgICB0aGlzKG5ldyBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyKGluKSk7Ci0gIH0KLQotICAvKiogCi0gICAqIFVucGFja3MgdGhlIGNvbXByZXNzZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRhYmxlLgotICAgKgotICAgKiBAcGFyYW0gcGFja2VkICAgdGhlIHBhY2tlZCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUKLSAgICogQHJldHVybiAgICAgICAgIHRoZSB1bnBhY2tlZCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNoYXIgW10genpVbnBhY2tDTWFwKFN0cmluZyBwYWNrZWQpIHsKLSAgICBjaGFyIFtdIG1hcCA9IG5ldyBjaGFyWzB4MTAwMDBdOwotICAgIGludCBpID0gMDsgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSAwOyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICB3aGlsZSAoaSA8IDEzMikgewotICAgICAgaW50ICBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGNoYXIgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBkbyBtYXBbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLQotICAvKioKLSAgICogUmVmaWxscyB0aGUgaW5wdXQgYnVmZmVyLgotICAgKgotICAgKiBAcmV0dXJuICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+LCBpZmYgdGhlcmUgd2FzIG5ldyBpbnB1dC4KLSAgICogCi0gICAqIEBleGNlcHRpb24gICBqYXZhLmlvLklPRXhjZXB0aW9uICBpZiBhbnkgSS9PLUVycm9yIG9jY3VycwotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHp6UmVmaWxsKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotCi0gICAgLyogZmlyc3Q6IG1ha2Ugcm9vbSAoaWYgeW91IGNhbikgKi8KLSAgICBpZiAoenpTdGFydFJlYWQgPiAwKSB7Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHp6QnVmZmVyLCB6elN0YXJ0UmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgenpCdWZmZXIsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIHp6RW5kUmVhZC16elN0YXJ0UmVhZCk7Ci0KLSAgICAgIC8qIHRyYW5zbGF0ZSBzdG9yZWQgcG9zaXRpb25zICovCi0gICAgICB6ekVuZFJlYWQtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6Q3VycmVudFBvcy09IHp6U3RhcnRSZWFkOwotICAgICAgenpNYXJrZWRQb3MtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6U3RhcnRSZWFkID0gMDsKLSAgICB9Ci0KLSAgICAvKiBpcyB0aGUgYnVmZmVyIGJpZyBlbm91Z2g/ICovCi0gICAgaWYgKHp6Q3VycmVudFBvcyA+PSB6ekJ1ZmZlci5sZW5ndGgpIHsKLSAgICAgIC8qIGlmIG5vdDogYmxvdyBpdCB1cCAqLwotICAgICAgY2hhciBuZXdCdWZmZXJbXSA9IG5ldyBjaGFyW3p6Q3VycmVudFBvcyoyXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoenpCdWZmZXIsIDAsIG5ld0J1ZmZlciwgMCwgenpCdWZmZXIubGVuZ3RoKTsKLSAgICAgIHp6QnVmZmVyID0gbmV3QnVmZmVyOwotICAgIH0KLQotICAgIC8qIGZpbmFsbHk6IGZpbGwgdGhlIGJ1ZmZlciB3aXRoIG5ldyBpbnB1dCAqLwotICAgIGludCBudW1SZWFkID0genpSZWFkZXIucmVhZCh6ekJ1ZmZlciwgenpFbmRSZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ekJ1ZmZlci5sZW5ndGgtenpFbmRSZWFkKTsKLQotICAgIGlmIChudW1SZWFkID4gMCkgewotICAgICAgenpFbmRSZWFkKz0gbnVtUmVhZDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gdW5saWtlbHkgYnV0IG5vdCBpbXBvc3NpYmxlOiByZWFkIDAgY2hhcmFjdGVycywgYnV0IG5vdCBhdCBlbmQgb2Ygc3RyZWFtICAgIAotICAgIGlmIChudW1SZWFkID09IDApIHsKLSAgICAgIGludCBjID0genpSZWFkZXIucmVhZCgpOwotICAgICAgaWYgKGMgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB6ekJ1ZmZlclt6ekVuZFJlYWQrK10gPSAoY2hhcikgYzsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAgCi0gICAgfQotCi0JLy8gbnVtUmVhZCA8IDAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gICAgCi0gIC8qKgotICAgKiBDbG9zZXMgdGhlIGlucHV0IHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHl5Y2xvc2UoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgenpBdEVPRiA9IHRydWU7ICAgICAgICAgICAgLyogaW5kaWNhdGUgZW5kIG9mIGZpbGUgKi8KLSAgICB6ekVuZFJlYWQgPSB6elN0YXJ0UmVhZDsgIC8qIGludmFsaWRhdGUgYnVmZmVyICAgICovCi0KLSAgICBpZiAoenpSZWFkZXIgIT0gbnVsbCkKLSAgICAgIHp6UmVhZGVyLmNsb3NlKCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXNldHMgdGhlIHNjYW5uZXIgdG8gcmVhZCBmcm9tIGEgbmV3IGlucHV0IHN0cmVhbS4KLSAgICogRG9lcyBub3QgY2xvc2UgdGhlIG9sZCByZWFkZXIuCi0gICAqCi0gICAqIEFsbCBpbnRlcm5hbCB2YXJpYWJsZXMgYXJlIHJlc2V0LCB0aGUgb2xkIGlucHV0IHN0cmVhbSAKLSAgICogPGI+Y2Fubm90PC9iPiBiZSByZXVzZWQgKGludGVybmFsIGJ1ZmZlciBpcyBkaXNjYXJkZWQgYW5kIGxvc3QpLgotICAgKiBMZXhpY2FsIHN0YXRlIGlzIHNldCB0byA8dHQ+WlpfSU5JVElBTDwvdHQ+LgotICAgKgotICAgKiBAcGFyYW0gcmVhZGVyICAgdGhlIG5ldyBpbnB1dCBzdHJlYW0gCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB5eXJlc2V0KGphdmEuaW8uUmVhZGVyIHJlYWRlcikgewotICAgIHp6UmVhZGVyID0gcmVhZGVyOwotICAgIHp6QXRCT0wgID0gdHJ1ZTsKLSAgICB6ekF0RU9GICA9IGZhbHNlOwotICAgIHp6RU9GRG9uZSA9IGZhbHNlOwotICAgIHp6RW5kUmVhZCA9IHp6U3RhcnRSZWFkID0gMDsKLSAgICB6ekN1cnJlbnRQb3MgPSB6ek1hcmtlZFBvcyA9IDA7Ci0gICAgeXlsaW5lID0geXljaGFyID0geXljb2x1bW4gPSAwOwotICAgIHp6TGV4aWNhbFN0YXRlID0gWVlJTklUSUFMOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY3VycmVudCBsZXhpY2FsIHN0YXRlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIGludCB5eXN0YXRlKCkgewotICAgIHJldHVybiB6ekxleGljYWxTdGF0ZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIEVudGVycyBhIG5ldyBsZXhpY2FsIHN0YXRlCi0gICAqCi0gICAqIEBwYXJhbSBuZXdTdGF0ZSB0aGUgbmV3IGxleGljYWwgc3RhdGUKLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHl5YmVnaW4oaW50IG5ld1N0YXRlKSB7Ci0gICAgenpMZXhpY2FsU3RhdGUgPSBuZXdTdGF0ZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRleHQgbWF0Y2hlZCBieSB0aGUgY3VycmVudCByZWd1bGFyIGV4cHJlc3Npb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHl5dGV4dCgpIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZyggenpCdWZmZXIsIHp6U3RhcnRSZWFkLCB6ek1hcmtlZFBvcy16elN0YXJ0UmVhZCApOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIDx0dD5wb3M8L3R0PiBmcm9tIHRoZSAKLSAgICogbWF0Y2hlZCB0ZXh0LiAKLSAgICogCi0gICAqIEl0IGlzIGVxdWl2YWxlbnQgdG8geXl0ZXh0KCkuY2hhckF0KHBvcyksIGJ1dCBmYXN0ZXIKLSAgICoKLSAgICogQHBhcmFtIHBvcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciB0byBmZXRjaC4gCi0gICAqICAgICAgICAgICAgQSB2YWx1ZSBmcm9tIDAgdG8geXlsZW5ndGgoKS0xLgotICAgKgotICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gcG9zCi0gICAqLwotICBwdWJsaWMgZmluYWwgY2hhciB5eWNoYXJhdChpbnQgcG9zKSB7Ci0gICAgcmV0dXJuIHp6QnVmZmVyW3p6U3RhcnRSZWFkK3Bvc107Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgdGV4dCByZWdpb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgaW50IHl5bGVuZ3RoKCkgewotICAgIHJldHVybiB6ek1hcmtlZFBvcy16elN0YXJ0UmVhZDsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJlcG9ydHMgYW4gZXJyb3IgdGhhdCBvY2N1cmVkIHdoaWxlIHNjYW5uaW5nLgotICAgKgotICAgKiBJbiBhIHdlbGxmb3JtZWQgc2Nhbm5lciAobm8gb3Igb25seSBjb3JyZWN0IHVzYWdlIG9mIAotICAgKiB5eXB1c2hiYWNrKGludCkgYW5kIGEgbWF0Y2gtYWxsIGZhbGxiYWNrIHJ1bGUpIHRoaXMgbWV0aG9kIAotICAgKiB3aWxsIG9ubHkgYmUgY2FsbGVkIHdpdGggdGhpbmdzIHRoYXQgIkNhbid0IFBvc3NpYmx5IEhhcHBlbiIuCi0gICAqIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgc29tZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZwotICAgKiAoZS5nLiBhIEpGbGV4IGJ1ZyBwcm9kdWNpbmcgYSBmYXVsdHkgc2Nhbm5lciBldGMuKS4KLSAgICoKLSAgICogVXN1YWwgc3ludGF4L3NjYW5uZXIgbGV2ZWwgZXJyb3IgaGFuZGxpbmcgc2hvdWxkIGJlIGRvbmUKLSAgICogaW4gZXJyb3IgZmFsbGJhY2sgcnVsZXMuCi0gICAqCi0gICAqIEBwYXJhbSAgIGVycm9yQ29kZSAgdGhlIGNvZGUgb2YgdGhlIGVycm9ybWVzc2FnZSB0byBkaXNwbGF5Ci0gICAqLwotICBwcml2YXRlIHZvaWQgenpTY2FuRXJyb3IoaW50IGVycm9yQ29kZSkgewotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIHRyeSB7Ci0gICAgICBtZXNzYWdlID0gWlpfRVJST1JfTVNHW2Vycm9yQ29kZV07Ci0gICAgfQotICAgIGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZSA9IFpaX0VSUk9SX01TR1taWl9VTktOT1dOX0VSUk9SXTsKLSAgICB9Ci0KLSAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7Ci0gIH0gCi0KLQotICAvKioKLSAgICogUHVzaGVzIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgYmFjayBpbnRvIHRoZSBpbnB1dCBzdHJlYW0uCi0gICAqCi0gICAqIFRoZXkgd2lsbCBiZSByZWFkIGFnYWluIGJ5IHRoZW4gbmV4dCBjYWxsIG9mIHRoZSBzY2FubmluZyBtZXRob2QKLSAgICoKLSAgICogQHBhcmFtIG51bWJlciAgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlYWQgYWdhaW4uCi0gICAqICAgICAgICAgICAgICAgIFRoaXMgbnVtYmVyIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiB5eWxlbmd0aCgpIQotICAgKi8KLSAgcHVibGljIHZvaWQgeXlwdXNoYmFjayhpbnQgbnVtYmVyKSAgewotICAgIGlmICggbnVtYmVyID4geXlsZW5ndGgoKSApCi0gICAgICB6elNjYW5FcnJvcihaWl9QVVNIQkFDS18yQklHKTsKLQotICAgIHp6TWFya2VkUG9zIC09IG51bWJlcjsKLSAgfQotCi0KLSAgLyoqCi0gICAqIENvbnRhaW5zIHVzZXIgRU9GLWNvZGUsIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgZXhhY3RseSBvbmNlLAotICAgKiB3aGVuIHRoZSBlbmQgb2YgZmlsZSBpcyByZWFjaGVkCi0gICAqLwotICBwcml2YXRlIHZvaWQgenpEb0VPRigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICBpZiAoIXp6RU9GRG9uZSkgewotICAgICAgenpFT0ZEb25lID0gdHJ1ZTsKLSAgICAgIHl5Y2xvc2UoKTsKLSAgICB9Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXN1bWVzIHNjYW5uaW5nIHVudGlsIHRoZSBuZXh0IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLAotICAgKiB0aGUgZW5kIG9mIGlucHV0IGlzIGVuY291bnRlcmVkIG9yIGFuIEkvTy1FcnJvciBvY2N1cnMuCi0gICAqCi0gICAqIEByZXR1cm4gICAgICB0aGUgbmV4dCB0b2tlbgotICAgKiBAZXhjZXB0aW9uICAgamF2YS5pby5JT0V4Y2VwdGlvbiAgaWYgYW55IEkvTy1FcnJvciBvY2N1cnMKLSAgICovCi0gIHB1YmxpYyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCBuZXh0X3Rva2VuKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgIGludCB6eklucHV0OwotICAgIGludCB6ekFjdGlvbjsKLQotICAgIC8vIGNhY2hlZCBmaWVsZHM6Ci0gICAgaW50IHp6Q3VycmVudFBvc0w7Ci0gICAgaW50IHp6TWFya2VkUG9zTDsKLSAgICBpbnQgenpFbmRSZWFkTCA9IHp6RW5kUmVhZDsKLSAgICBjaGFyIFtdIHp6QnVmZmVyTCA9IHp6QnVmZmVyOwotICAgIGNoYXIgW10genpDTWFwTCA9IFpaX0NNQVA7Ci0KLSAgICBpbnQgW10genpUcmFuc0wgPSBaWl9UUkFOUzsKLSAgICBpbnQgW10genpSb3dNYXBMID0gWlpfUk9XTUFQOwotICAgIGludCBbXSB6ekF0dHJMID0gWlpfQVRUUklCVVRFOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIHp6TWFya2VkUG9zTCA9IHp6TWFya2VkUG9zOwotCi0gICAgICBib29sZWFuIHp6UiA9IGZhbHNlOwotICAgICAgZm9yICh6ekN1cnJlbnRQb3NMID0genpTdGFydFJlYWQ7IHp6Q3VycmVudFBvc0wgPCB6ek1hcmtlZFBvc0w7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenpDdXJyZW50UG9zTCsrKSB7Ci0gICAgICAgIHN3aXRjaCAoenpCdWZmZXJMW3p6Q3VycmVudFBvc0xdKSB7Ci0gICAgICAgIGNhc2UgJ1x1MDAwQic6Ci0gICAgICAgIGNhc2UgJ1x1MDAwQyc6Ci0gICAgICAgIGNhc2UgJ1x1MDA4NSc6Ci0gICAgICAgIGNhc2UgJ1x1MjAyOCc6Ci0gICAgICAgIGNhc2UgJ1x1MjAyOSc6Ci0gICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgeXljb2x1bW4gPSAwOwotICAgICAgICAgIHp6UiA9IGZhbHNlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdccic6Ci0gICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgeXljb2x1bW4gPSAwOwotICAgICAgICAgIHp6UiA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICBpZiAoenpSKQotICAgICAgICAgICAgenpSID0gZmFsc2U7Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB5eWxpbmUrKzsKLSAgICAgICAgICAgIHl5Y29sdW1uID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgenpSID0gZmFsc2U7Ci0gICAgICAgICAgeXljb2x1bW4rKzsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoenpSKSB7Ci0gICAgICAgIC8vIHBlZWsgb25lIGNoYXJhY3RlciBhaGVhZCBpZiBpdCBpcyBcbiAoaWYgd2UgaGF2ZSBjb3VudGVkIG9uZSBsaW5lIHRvbyBtdWNoKQotICAgICAgICBib29sZWFuIHp6UGVlazsKLSAgICAgICAgaWYgKHp6TWFya2VkUG9zTCA8IHp6RW5kUmVhZEwpCi0gICAgICAgICAgenpQZWVrID0genpCdWZmZXJMW3p6TWFya2VkUG9zTF0gPT0gJ1xuJzsKLSAgICAgICAgZWxzZSBpZiAoenpBdEVPRikKLSAgICAgICAgICB6elBlZWsgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYm9vbGVhbiBlb2YgPSB6elJlZmlsbCgpOwotICAgICAgICAgIHp6RW5kUmVhZEwgPSB6ekVuZFJlYWQ7Ci0gICAgICAgICAgenpNYXJrZWRQb3NMID0genpNYXJrZWRQb3M7Ci0gICAgICAgICAgenpCdWZmZXJMID0genpCdWZmZXI7Ci0gICAgICAgICAgaWYgKGVvZikgCi0gICAgICAgICAgICB6elBlZWsgPSBmYWxzZTsKLSAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgenpQZWVrID0genpCdWZmZXJMW3p6TWFya2VkUG9zTF0gPT0gJ1xuJzsKLSAgICAgICAgfQotICAgICAgICBpZiAoenpQZWVrKSB5eWxpbmUtLTsKLSAgICAgIH0KLSAgICAgIHp6QWN0aW9uID0gLTE7Ci0KLSAgICAgIHp6Q3VycmVudFBvc0wgPSB6ekN1cnJlbnRQb3MgPSB6elN0YXJ0UmVhZCA9IHp6TWFya2VkUG9zTDsKLSAgCi0gICAgICB6elN0YXRlID0gWlpfTEVYU1RBVEVbenpMZXhpY2FsU3RhdGVdOwotCi0KLSAgICAgIHp6Rm9yQWN0aW9uOiB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgCi0gICAgICAgICAgaWYgKHp6Q3VycmVudFBvc0wgPCB6ekVuZFJlYWRMKQotICAgICAgICAgICAgenpJbnB1dCA9IHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMKytdOwotICAgICAgICAgIGVsc2UgaWYgKHp6QXRFT0YpIHsKLSAgICAgICAgICAgIHp6SW5wdXQgPSBZWUVPRjsKLSAgICAgICAgICAgIGJyZWFrIHp6Rm9yQWN0aW9uOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIHN0b3JlIGJhY2sgY2FjaGVkIHBvc2l0aW9ucwotICAgICAgICAgICAgenpDdXJyZW50UG9zICA9IHp6Q3VycmVudFBvc0w7Ci0gICAgICAgICAgICB6ek1hcmtlZFBvcyAgID0genpNYXJrZWRQb3NMOwotICAgICAgICAgICAgYm9vbGVhbiBlb2YgPSB6elJlZmlsbCgpOwotICAgICAgICAgICAgLy8gZ2V0IHRyYW5zbGF0ZWQgcG9zaXRpb25zIGFuZCBwb3NzaWJseSBuZXcgYnVmZmVyCi0gICAgICAgICAgICB6ekN1cnJlbnRQb3NMICA9IHp6Q3VycmVudFBvczsKLSAgICAgICAgICAgIHp6TWFya2VkUG9zTCAgID0genpNYXJrZWRQb3M7Ci0gICAgICAgICAgICB6ekJ1ZmZlckwgICAgICA9IHp6QnVmZmVyOwotICAgICAgICAgICAgenpFbmRSZWFkTCAgICAgPSB6ekVuZFJlYWQ7Ci0gICAgICAgICAgICBpZiAoZW9mKSB7Ci0gICAgICAgICAgICAgIHp6SW5wdXQgPSBZWUVPRjsKLSAgICAgICAgICAgICAgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgenpJbnB1dCA9IHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMKytdOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpbnQgenpOZXh0ID0genpUcmFuc0xbIHp6Um93TWFwTFt6elN0YXRlXSArIHp6Q01hcExbenpJbnB1dF0gXTsKLSAgICAgICAgICBpZiAoenpOZXh0ID09IC0xKSBicmVhayB6ekZvckFjdGlvbjsKLSAgICAgICAgICB6elN0YXRlID0genpOZXh0OwotCi0gICAgICAgICAgaW50IHp6QXR0cmlidXRlcyA9IHp6QXR0ckxbenpTdGF0ZV07Ci0gICAgICAgICAgaWYgKCAoenpBdHRyaWJ1dGVzICYgMSkgPT0gMSApIHsKLSAgICAgICAgICAgIHp6QWN0aW9uID0genpTdGF0ZTsKLSAgICAgICAgICAgIHp6TWFya2VkUG9zTCA9IHp6Q3VycmVudFBvc0w7Ci0gICAgICAgICAgICBpZiAoICh6ekF0dHJpYnV0ZXMgJiA4KSA9PSA4ICkgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gc3RvcmUgYmFjayBjYWNoZWQgcG9zaXRpb24KLSAgICAgIHp6TWFya2VkUG9zID0genpNYXJrZWRQb3NMOwotCi0gICAgICBzd2l0Y2ggKHp6QWN0aW9uIDwgMCA/IHp6QWN0aW9uIDogWlpfQUNUSU9OW3p6QWN0aW9uXSkgewotICAgICAgICBjYXNlIDc0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1IpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JVEVNKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTM6IGJyZWFrOwotICAgICAgICBjYXNlIDQ2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgODE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTU6IGJyZWFrOwotICAgICAgICBjYXNlIDE1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVFVQUxTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTY6IGJyZWFrOwotICAgICAgICBjYXNlIDM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlRFR0VSLCBuZXcgQmlnSW50ZWdlcih5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FUSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDk4OiBicmVhazsKLSAgICAgICAgY2FzZSA3MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVMRU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQU1FU1BBQ0UpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDA6IGJyZWFrOwotICAgICAgICBjYXNlIDM0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSVMpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDE6IGJyZWFrOwotICAgICAgICBjYXNlIDIzOiAKLSAgICAgICAgICB7IC8vIGdldCByaWQgb2YgcXVvdGVzCi0JCQkJU3RyaW5nIHN0ciA9IHl5dGV4dCgpOwotCQkJCWFzc2VydCBzdHIubGVuZ3RoKCkgPj0gMjsKLQkJCQlyZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNUUklORywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkxpdGVyYWxVdGlscy51bnF1b3RlKHN0cikpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDI6IGJyZWFrOwotICAgICAgICBjYXNlIDE6IAotICAgICAgICAgIHsgU3RyaW5nIGVyciA9ICJVbmtub3duIGNoYXJhY3RlciBhdCBsaW5lICIgKyBsaW5lbm8oKTsgCi0JCWVyciArPSAiIGNvbCAiICsgY29sbm8oKTsKLQkJZXJyICs9ICI6ICIgKyB5eXRleHQoKTsgCi0JCQkgICAgIAotCQl0aHJvdyBuZXcgSkZsZXhFcnJvcihlcnIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDM6IGJyZWFrOwotICAgICAgICBjYXNlIDIwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUEpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDQ6IGJyZWFrOwotICAgICAgICBjYXNlIDcwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRVNTX0xFU1MpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDc6IGJyZWFrOwotICAgICAgICBjYXNlIDY1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVFJFQVQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDg6IGJyZWFrOwotICAgICAgICBjYXNlIDEzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU1RBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwOTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5VTklPTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExMDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0xMQVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTE6IGJyZWFrOwotICAgICAgICBjYXNlIDg1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0VMRU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTI6IGJyZWFrOwotICAgICAgICBjYXNlIDM1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTM6IGJyZWFrOwotICAgICAgICBjYXNlIDQzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uT1IpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTQ6IGJyZWFrOwotICAgICAgICBjYXNlIDI1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9URE9UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE1OiBicmVhazsKLSAgICAgICAgY2FzZSA4MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRZUEVTV0lUQ0gpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTY6IGJyZWFrOwotICAgICAgICBjYXNlIDU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQ05BTUUsIHl5dGV4dCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE3OiBicmVhazsKLSAgICAgICAgY2FzZSAyNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRFQ0lNQUwsIG5ldyBCaWdEZWNpbWFsKHl5dGV4dCgpKSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExODogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVF9TWU0pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTk6IGJyZWFrOwotICAgICAgICBjYXNlIDI5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU0VRVUFMKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTIwOiBicmVhazsKLSAgICAgICAgY2FzZSAyNjogCi0gICAgICAgICAgeyBjb21tZW50TGV2ZWwrKzsgLy8gaW50IG92ZXJmbG93ID1QCi0JCQkgIHl5YmVnaW4oQ09NTUVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0NVTUVOVF9OT0RFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTIyOiBicmVhazsKLSAgICAgICAgY2FzZSAzMzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPUldBUkRfU0xBU0hTTEFTSCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT1JXQVJEX1NMQVNIKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI0OiBicmVhazsKLSAgICAgICAgY2FzZSA2NzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVYQ0VQVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUkVDRURJTkdfU0lCTElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlNUQU5DRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTFNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI4OiBicmVhazsKLSAgICAgICAgY2FzZSA0NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI5OiBicmVhazsKLSAgICAgICAgY2FzZSA0NzogCi0gICAgICAgICAgeyBjb21tZW50TGV2ZWwrKzsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMwOiBicmVhazsKLSAgICAgICAgY2FzZSAzNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMxOiBicmVhazsKLSAgICAgICAgY2FzZSA0MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRPKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMyOiBicmVhazsKLSAgICAgICAgY2FzZSA4NDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVNUFRZX1NFUVVFTkNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMzOiBicmVhazsKLSAgICAgICAgY2FzZSA4MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBSRUNFRElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzNDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSRVFVQUwpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzU6IGJyZWFrOwotICAgICAgICBjYXNlIDg3OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1JfT1JfU0VMRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVFRSSUJVVEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzc6IGJyZWFrOwotICAgICAgICBjYXNlIDg2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0FUVFJJQlVURSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT0xMT1dJTkcpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzk6IGJyZWFrOwotICAgICAgICBjYXNlIDUyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9SKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQwOiBicmVhazsKLSAgICAgICAgY2FzZSAxNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBJUEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDE6IGJyZWFrOwotICAgICAgICBjYXNlIDIyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUVVFU1RJT05NQVJLKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQyOiBicmVhazsKLSAgICAgICAgY2FzZSAzNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQzOiBicmVhazsKLSAgICAgICAgY2FzZSA3NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOVEVSU0VDVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDg6IAotICAgICAgICAgIHsgY29tbWVudExldmVsLS07IAotCQkJICBpZihjb21tZW50TGV2ZWwgPT0gMCkKLQkJICAgICAgICAgIAl5eWJlZ2luKFlZSU5JVElBTCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5PRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DSElMRCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ORSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TRUxGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQ5OiBicmVhazsKLSAgICAgICAgY2FzZSAyNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OQ09MT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTA6IGJyZWFrOwotICAgICAgICBjYXNlIDUwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRElWKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUxOiBicmVhazsKLSAgICAgICAgY2FzZSA4ODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPTExPV0lOR19TSUJMSU5HKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUyOiBicmVhazsKLSAgICAgICAgY2FzZSA2MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRFWFQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTM6IGJyZWFrOwotICAgICAgICBjYXNlIDY4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUkVUVVJOKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU0OiBicmVhazsKLSAgICAgICAgY2FzZSA1MzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1PRCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBMVVMpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTY6IGJyZWFrOwotICAgICAgICBjYXNlIDI4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9URVFVQUxTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU3OiBicmVhazsKLSAgICAgICAgY2FzZSAzMjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVJfR1JFQVRFUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FVkVSWSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DQVNUQUJMRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UX09SX1NFTEYpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjE6IGJyZWFrOwotICAgICAgICBjYXNlIDc2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0FUSVNGSUVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTYyOiBicmVhazsKLSAgICAgICAgY2FzZSA5MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBST0NFU1NJTkdfSU5TVFJVQ1RJT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjM6IGJyZWFrOwotICAgICAgICBjYXNlIDE2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU1RIQU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjQ6IGJyZWFrOwotICAgICAgICBjYXNlIDU0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0FTVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5SUEFSKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY2OiBicmVhazsKLSAgICAgICAgY2FzZSAyOiAKLSAgICAgICAgICB7IC8qIGlnbm9yZSAqLwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjc6IGJyZWFrOwotICAgICAgICBjYXNlIDEwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEJSQUNLRVQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjg6IGJyZWFrOwotICAgICAgICBjYXNlIDYwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9ERSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JRElWKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTcwOiBicmVhazsKLSAgICAgICAgY2FzZSA0OTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVUJMRSwgbmV3IERvdWJsZSh5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzE6IGJyZWFrOwotICAgICAgICBjYXNlIDYxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVEhFTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TT01FKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTczOiBicmVhazsKLSAgICAgICAgY2FzZSA2OTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBBUkVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1JTlVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc1OiBicmVhazsKLSAgICAgICAgY2FzZSA0MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc2OiBicmVhazsKLSAgICAgICAgY2FzZSA0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc3OiBicmVhazsKLSAgICAgICAgY2FzZSAxMTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlJCUkFDS0VUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc4OiBicmVhazsKLSAgICAgICAgY2FzZSAxNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzk6IGJyZWFrOwotICAgICAgICBjYXNlIDUxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5EKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTgwOiBicmVhazsKLSAgICAgICAgY2FzZSA4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTFBBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE4MTogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTgyOiBicmVhazsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgaWYgKHp6SW5wdXQgPT0gWVlFT0YgJiYgenpTdGFydFJlYWQgPT0genpDdXJyZW50UG9zKSB7Ci0gICAgICAgICAgICB6ekF0RU9GID0gdHJ1ZTsKLSAgICAgICAgICAgIHp6RG9FT0YoKTsKLSAgICAgICAgICAgICAgeyByZXR1cm4gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKFhwYXRoU3ltLkVPRik7IH0KLSAgICAgICAgICB9IAotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgenpTY2FuRXJyb3IoWlpfTk9fTUFUQ0gpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hwYXRoU3ltLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hwYXRoU3ltLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMmNjODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YcGF0aFN5bS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIGdlbmVyYXRlZCBieSBDVVAgdjAuMTBrCi0vLyBNb24gRGVjIDE0IDAyOjAyOjIyIENFVCAyMDA5Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKiBDVVAgZ2VuZXJhdGVkIGNsYXNzIGNvbnRhaW5pbmcgc3ltYm9sIGNvbnN0YW50cy4gKi8KLXB1YmxpYyBjbGFzcyBYcGF0aFN5bSB7Ci0gIC8qIHRlcm1pbmFscyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDRU5EQU5UX09SX1NFTEYgPSAzMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVMgPSA1NjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1QgPSA0NTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9MTE9XSU5HID0gMzQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUldBUkRfU0xBU0hTTEFTSCA9IDE5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJFTlQgPSAzNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0UgPSA0NjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9DVU1FTlRfTk9ERSA9IDc1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOQU1FU1BBQ0UgPSAzNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9SV0FSRF9TTEFTSCA9IDE4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkVBVCA9IDU1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT0RFID0gNzQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1BID0gMjQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFOQ0VTVE9SID0gMzc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExUID0gNDM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVEVHRVIgPSA4MzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9VQkxFID0gODQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENISUxEID0gMjg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTExPV0lOR19TSUJMSU5HID0gMzM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRVJZID0gNjY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFTEYgPSAzMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEUgPSA0NDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUxFTUVOVCA9IDgwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURVhUID0gNzY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTkNFID0gNTM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PVEVRVUFMUyA9IDExOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSEVOID0gNjg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDSEVNQV9FTEVNRU5UID0gODE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDSEVNQV9BVFRSSUJVVEUgPSA3OTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5DRVNUT1JfT1JfU0VMRiA9IDQwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUSA9IDQxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUkVDRURJTkcgPSAzOTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9EID0gNDk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFUX1NZTSA9IDIxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET0xMQVIgPSAyNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVhDRVBUID0gNTI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFU1NUSEFOID0gMTI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBJUEUgPSA5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVNTRVFVQUwgPSAxMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFU1RJT05NQVJLID0gMjc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBMVVMgPSA2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRElWID0gNDg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExQQVIgPSA0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklPTiA9IDUwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkVBVEVSRVFVQUwgPSAxNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVDSU1BTCA9IDg1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1IgPSA2MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBUiA9IDg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVIgPSAxNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJFQ0VESU5HX1NJQkxJTkcgPSAzODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElWID0gNDc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFVFVSTiA9IDYyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTFNFID0gNjk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPVERPVCA9IDIyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET1QgPSAyNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU9GID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkNOQU1FID0gODc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1FTlQgPSA3NzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URVJTRUNUID0gNTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJQQVIgPSA1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJVEVNID0gNzM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVNUFRZX1NFUVVFTkNFID0gNzI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBU1RBQkxFID0gNTc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElTID0gNTk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlVTID0gNzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPQ0VTU0lOR19JTlNUUlVDVElPTiA9IDc4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTiA9IDYxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUiA9IDcxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBlcnJvciA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFUVFJJQlVURSA9IDMwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRiA9IDY3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFU1dJVENIID0gODI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBU1QgPSA1ODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0YgPSA1NDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09MT04gPSAyMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ0VOREFOVCA9IDI5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT01FID0gNjU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJCUkFDS0VUID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09MT05DT0xPTiA9IDIwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkVBVEVSX0dSRUFURVIgPSAxNzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RSSU5HID0gODY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNBVElTRklFUyA9IDYzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTkQgPSA3MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE8gPSA2NDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEJSQUNLRVQgPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORSA9IDQyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVNTX0xFU1MgPSAxNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVFVQUxTID0gMTA7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0FkZEV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0FkZEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk1MDg0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BZGRFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBiaW5hcnkgb3BlcmF0aW9uIEFkZCwgdGFrZXMgMiBpbnB1dHMgYW5kIHJldHVybnMgdGhlIGNvbWJpbmVkCi0gKiB2YWx1ZS4KLSAqLwotcHVibGljIGNsYXNzIEFkZEV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBZGRFeHByCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgQWRkRXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BbmRFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BbmRFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YjgzN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQW5kRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgYmluYXJ5IG9wZXJhdGlvbiBBbmQuIFRoZSB2YWx1ZSBvZiBhbiBhbmQtZXhwcmVzc2lvbiBpcyBkZXRlcm1pbmVkCi0gKiBieSB0aGUgZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWVzIChFQlYncykgb2YgaXRzIG9wZXJhbmRzLgotICovCi1wdWJsaWMgY2xhc3MgQW5kRXhwciBleHRlbmRzIEJpbkV4cHIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFuZEV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgQW5kRXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BbnlLaW5kVGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQW55S2luZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M0YmY0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BbnlLaW5kVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyOTg1MzUgLSBBdHRyaWJ1dGUgaW5zdGFuY2Ugb2YgaW1wcm92ZW1lbnRzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ2xhc3MgdG8gdGVzdCBhIHR5cGUgb2YgYW55IGtpbmQuIFRoaXMgbWF0Y2hlcyBhbnkgbm9kZSBpbiB0aGUgZXhwcmVzc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIEFueUtpbmRUZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFFOYW1lIG5hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzV2lsZCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBDbGFzcyBnZXRYRE1DbGFzc1R5cGUoKSB7Ci0JCXJldHVybiBOb2RlVHlwZS5jbGFzczsKLQl9Ci0JCi0JCi0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQXR0ckVsZW1UZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BdHRyRWxlbVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThkNjc4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BdHRyRWxlbVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBDb21tb24gYmFzZSBjbGFzcyBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXR0ckVsZW1UZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCXByaXZhdGUgUU5hbWUgX25hbWU7Ci0JcHJpdmF0ZSBRTmFtZSBfdHlwZTsgLy8gbWF5IGJlIG51bGwKLQlwcml2YXRlIGJvb2xlYW4gX3dpbGQ7IC8vIHVzZSB3aWxkIHFuYW1lID8KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyaWJ1dGUgYW5kIEVsZW1lbnQgdGVzdHMuIFRoaXMgdGFrZXMgaW4gMyBpbnB1dHMsCi0JICogTmFtZSwgd2lsZGNhcmQgdGVzdCh0cnVlL2ZhbHNlKSBhbmQgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICogQHBhcmFtIHdpbGQKLQkgKiAgICAgICAgICAgIFdpbGRjYXJkIHRlc3Q/IFRydWUvRmFsc2UuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFFOYW1lIHR5cGUuCi0JICovCi0JcHVibGljIEF0dHJFbGVtVGVzdChRTmFtZSBuYW1lLCBib29sZWFuIHdpbGQsIFFOYW1lIHR5cGUpIHsKLQkJX25hbWUgPSBuYW1lOwotCQlfd2lsZCA9IHdpbGQ7Ci0JCV90eXBlID0gdHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLiBUaGlzIHRha2VzIGluIDIgaW5wdXRzLCBOYW1lCi0JICogYW5kIHdpbGRjYXJkIHRlc3QodHJ1ZS9mYWxzZSkuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSB3aWxkCi0JICogICAgICAgICAgICBXaWxkY2FyZCB0ZXN0PyBUcnVlL0ZhbHNlLgotCSAqLwotCXB1YmxpYyBBdHRyRWxlbVRlc3QoUU5hbWUgbmFtZSwgYm9vbGVhbiB3aWxkKSB7Ci0JCXRoaXMobmFtZSwgd2lsZCwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRGVmYXVsdCBDb25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLiBUaGlzIHRha2VzIGluIG5vCi0JICogaW5wdXRzLgotCSAqLwotCXB1YmxpYyBBdHRyRWxlbVRlc3QoKSB7Ci0JCXRoaXMobnVsbCwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIHdpbGRjYXJkIHRlc3QuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygd2lsZGNhcmQgdGVzdC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB3aWxkKCkgewotCQlyZXR1cm4gX3dpbGQ7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgbmFtZSB0ZXN0LgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG5hbWUgdGVzdC4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIF9uYW1lOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIHR5cGUgdGVzdC4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0eXBlIHRlc3QuCi0JICovCi0JcHVibGljIFFOYW1lIHR5cGUoKSB7Ci0JCXJldHVybiBfdHlwZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc2hvcnQgZ2V0RGVydmlhdGlvblR5cGVzKCkgewotCQlyZXR1cm4gWFNDb25zdGFudHMuREVSSVZBVElPTl9MSVNUIHwgWFNDb25zdGFudHMuREVSSVZBVElPTl9FWFRFTlNJT04KLQkJCQl8IFhTQ29uc3RhbnRzLkRFUklWQVRJT05fUkVTVFJJQ1RJT04KLQkJCQl8IFhTQ29uc3RhbnRzLkRFUklWQVRJT05fU1VCU1RJVFVUSU9OOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F0dHJpYnV0ZVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F0dHJpYnV0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU4NzAxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BdHRyaWJ1dGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyOTg1MzUgLSBBdHRyaWJ1dGUgaW5zdGFuY2Ugb2YgaW1wcm92ZW1lbnRzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLkF0dHJpYnV0ZVBTVkk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuSXRlbVBTVkk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIENsYXNzIHVzZWQgdG8gbWF0Y2ggYW4gYXR0cmlidXRlIG5vZGUgYnkgaXRzIG5hbWUgYW5kL29yIHR5cGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBBdHRyaWJ1dGVUZXN0IGV4dGVuZHMgQXR0ckVsZW1UZXN0IHsKLQotCXByaXZhdGUgQW55VHlwZSBhbnlUeXBlID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyaWJ1dGVUZXN0LiBUaGlzIG9uZSB0YWtlcyBpbiAzIGlucHV0cywgTmFtZSwgd2lsZGNhcmQKLQkgKiB0ZXN0KHRydWUvZmFsc2UpIGFuZCB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBRTmFtZS4KLQkgKiBAcGFyYW0gd2lsZAotCSAqICAgICAgICAgICAgV2lsZGNhcmQgdGVzdCwgVHJ1ZS9GYWxzZS4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgUU5hbWUgdHlwZS4KLQkgKi8KLQlwdWJsaWMgQXR0cmlidXRlVGVzdChRTmFtZSBuYW1lLCBib29sZWFuIHdpbGQsIFFOYW1lIHR5cGUpIHsKLQkJc3VwZXIobmFtZSwgd2lsZCwgdHlwZSk7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEF0dHJpYnV0ZVRlc3QuIFRoaXMgb25lIHRha2VzIGluIDIgaW5wdXRzLCBOYW1lIGFuZAotCSAqIHdpbGRjYXJkIHRlc3QodHJ1ZS9mYWxzZSkuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSB3aWxkCi0JICogICAgICAgICAgICBXaWxkY2FyZCB0ZXN0LCBUcnVlL0ZhbHNlLgotCSAqLwotCXB1YmxpYyBBdHRyaWJ1dGVUZXN0KFFOYW1lIG5hbWUsIGJvb2xlYW4gd2lsZCkgewotCQlzdXBlcihuYW1lLCB3aWxkKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yIGZvciBBdHRyaWJ1dGVUZXN0LgotCSAqLwotCXB1YmxpYyBBdHRyaWJ1dGVUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlUeXBlIGNyZWF0ZVRlc3RUeXBlKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCWlmIChuYW1lKCkgPT0gbnVsbCAmJiAhd2lsZCgpKSB7Ci0JCQlyZXR1cm4gbmV3IEF0dHJUeXBlKCk7Ci0JCX0KLQotCQlBbnlUeXBlIGF0ID0gcnMuZmlyc3QoKTsKLQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSkgewotCQkJcmV0dXJuIG5ldyBBdHRyVHlwZSgpOwotCQl9Ci0KLQkJcmV0dXJuIGNyZWF0ZUF0dHJUeXBlKGF0KTsKLQl9Ci0KLQlwcml2YXRlIEFueVR5cGUgY3JlYXRlQXR0clR5cGUoQW55VHlwZSBhdCkgewotCQlhbnlUeXBlID0gbmV3IEF0dHJUeXBlKCk7Ci0JCU5vZGVUeXBlIG5vZGVUeXBlID0gKE5vZGVUeXBlKSBhdDsKLQkJTm9kZSBub2RlID0gbm9kZVR5cGUubm9kZV92YWx1ZSgpOwotCQlpZiAobm9kZSA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gYW55VHlwZTsKLQkJfQotCi0JCVN0cmluZyBub2RlTmFtZSA9IG5vZGUuZ2V0TG9jYWxOYW1lKCk7Ci0KLQkJaWYgKHdpbGQoKSkgewotCQkJaWYgKHR5cGUoKSAhPSBudWxsKSB7Ci0JCQkJYW55VHlwZSA9IGNyZWF0ZUF0dHJGb3JYU0RUeXBlKG5vZGUpOwotCQkJfQotCQl9IGVsc2UgaWYgKG5vZGVOYW1lLmVxdWFscyhuYW1lKCkubG9jYWwoKSkpIHsKLQkJCWlmICh0eXBlKCkgIT0gbnVsbCkgewotCQkJCWFueVR5cGUgPSBjcmVhdGVBdHRyRm9yWFNEVHlwZShub2RlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYW55VHlwZSA9IG5ldyBBdHRyVHlwZSgoQXR0cikgbm9kZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGFueVR5cGU7Ci0JfQotCi0JcHJpdmF0ZSBBbnlUeXBlIGNyZWF0ZUF0dHJGb3JYU0RUeXBlKE5vZGUgbm9kZSkgewotCQlBdHRyIGF0dHIgPSAoQXR0cikgbm9kZTsKLQkJaWYgKCEoYXR0ciBpbnN0YW5jZW9mIEl0ZW1QU1ZJKSkgewotCQkJYW55VHlwZSA9IG5ldyBBdHRyVHlwZShhdHRyKTsKLQkJfSBlbHNlIHsKLQkJCUF0dHJpYnV0ZVBTVkkgZWxlbXBzdmkgPSAoQXR0cmlidXRlUFNWSSkgYXR0cjsKLQkJCVhTVHlwZURlZmluaXRpb24gdHlwZWRlZiA9IGVsZW1wc3ZpLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQlpZiAodHlwZWRlZiAhPSBudWxsKSB7Ci0JCQkJaWYgKHR5cGVkZWYuZGVyaXZlZEZyb20odHlwZSgpLm5hbWVzcGFjZSgpLCB0eXBlKCkubG9jYWwoKSwKLQkJCQkJCWdldERlcnZpYXRpb25UeXBlcygpKSkgewotCQkJCQlhbnlUeXBlID0gbmV3IEF0dHJUeXBlKGF0dHIpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gYW55VHlwZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiB3aWxkKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJcmV0dXJuIEF0dHJUeXBlLmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQXhpc1N0ZXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F4aXNTdGVwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZGE3YjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQXhpc1N0ZXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgQXhpc1N0ZXAsIHRoaXMgZ2VuZXJhdGVzIGEgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlIG5vZGVzLiBUaGVzZQotICogbm9kZXMgYXJlIGFsd2F5cyByZXR1cm5lZCBpbiBEb2N1bWVudCBPcmRlci4gVGhpcyBjYW4gYmUgRm9yd2FyZCBTdGVwIG9yCi0gKiBSZXZlcnNlIFN0ZXAuCi0gKi8KLXB1YmxpYyBjbGFzcyBBeGlzU3RlcCBleHRlbmRzIFN0ZXBFeHByIHsKLQlwcml2YXRlIFN0ZXAgX3N0ZXA7Ci0JcHJpdmF0ZSBDb2xsZWN0aW9uIF9leHByczsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBeGlzU3RlcC4KLQkgKiAKLQkgKiBAcGFyYW0gc3RlcAotCSAqICAgICAgICAgICAgRGVmaW5lcyBmb3J3YXJkL3JldmVyc2Ugc3RlcC4KLQkgKiBAcGFyYW0gZXhwcnMKLQkgKiAgICAgICAgICAgIENvbGxlY3Rpb24gb2YgeHBhdGggZXhwcmVzc2lvbnMuCi0JICovCi0JcHVibGljIEF4aXNTdGVwKFN0ZXAgc3RlcCwgQ29sbGVjdGlvbiBleHBycykgewotCQlfc3RlcCA9IHN0ZXA7Ci0JCV9leHBycyA9IGV4cHJzOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEFkdmFuY2VzIHRvIG5leHQgc3RlcC4KLQkgKiAKLQkgKiBAcmV0dXJuIFByZXZpb3VzIHN0ZXAuCi0JICovCi0JcHVibGljIFN0ZXAgc3RlcCgpIHsKLQkJcmV0dXJuIF9zdGVwOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgc3RlcCBkaXJlY3Rpb24uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3N0ZXAoU3RlcCBzKSB7Ci0JCV9zdGVwID0gczsKLQl9Ci0KLQkvKioKLQkgKiBJbnRlcmF0b3IuCi0JICogCi0JICogQHJldHVybiBJdGVyYXRlZCBleHByZXNzaW9ucy4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfZXhwcnMuaXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIHNpemUgb2YgZXhwcmVzc2lvbnMuCi0JICogCi0JICogQHJldHVybiBTaXplIG9mIGV4cHJlc3Npb25zLgotCSAqLwotCXB1YmxpYyBpbnQgcHJlZGljYXRlX2NvdW50KCkgewotCQlyZXR1cm4gX2V4cHJzLnNpemUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9CaW5FeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9CaW5FeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMDdjNzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQmluRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBBYnN0cmFjdCBjbGFzcyBmb3IgYSBCaW5hcnkgb3BlcmF0aW9uLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmluRXhwciBleHRlbmRzIEV4cHIgewotCS8vIFhYWDogcmV2aWV3IGhpZXJhcmNoeSAtIHN0cmljdGx5IHNob3VsZCBiZSBFeHByCi0JLy8gb3IgcmVuYW1lIHRvIGJpbm9wCi0JcHJpdmF0ZSBYUGF0aE5vZGUgX2xlZnQ7Ci0JcHJpdmF0ZSBYUGF0aE5vZGUgX3JpZ2h0OwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEJpbkV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGxlZnQgeHBhdGggbm9kZSBmb3IgdGhlIG9wZXJhdGlvbi4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgcmlnaHQgeHBhdGggbm9kZSBmb3IgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgQmluRXhwcihYUGF0aE5vZGUgbCwgWFBhdGhOb2RlIHIpIHsKLQkJX2xlZnQgPSBsOwotCQlfcmlnaHQgPSByOwotCX0KLQotCS8qKgotCSAqIExlZnQgeHBhdGggbm9kZS4KLQkgKiAKLQkgKiBAcmV0dXJuIExlZnQgbm9kZS4KLQkgKi8KLQlwdWJsaWMgWFBhdGhOb2RlIGxlZnQoKSB7Ci0JCXJldHVybiBfbGVmdDsKLQl9Ci0KLQkvKioKLQkgKiBSaWdodCB4cGF0aCBub2RlLgotCSAqIAotCSAqIEByZXR1cm4gUmlnaHQgbm9kZS4KLQkgKi8KLQlwdWJsaWMgWFBhdGhOb2RlIHJpZ2h0KCkgewotCQlyZXR1cm4gX3JpZ2h0OwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgbGVmdCB4cGF0aCBub2RlLgotCSAqIAotCSAqIEBwYXJhbSBuCi0JICogICAgICAgICAgICBMZWZ0IG5vZGUuCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2xlZnQoWFBhdGhOb2RlIG4pIHsKLQkJX2xlZnQgPSBuOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgcmlnaHQgeHBhdGggbm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gbgotCSAqICAgICAgICAgICAgUmlnaHQgbm9kZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfcmlnaHQoWFBhdGhOb2RlIG4pIHsKLQkJX3JpZ2h0ID0gbjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DYXN0RXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ2FzdEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4NDkzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DYXN0RXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBBIGNsYXNzIHRoYXQgY3JlYXRlcyBhIG5ldyB2YWx1ZSBvZiBhIHNwZWNpZmljIHR5cGUgYmFzZWQgb24gYW4gZXhpc3RpbmcKLSAqIHZhbHVlLiBBIGNhc3QgZXhwcmVzc2lvbiB0YWtlcyB0d28gb3BlcmFuZHM6IGFuIGlucHV0IGV4cHJlc3Npb24gYW5kIGEgdGFyZ2V0Ci0gKiB0eXBlLiBUaGUgdHlwZSBvZiB0aGUgaW5wdXQgZXhwcmVzc2lvbiBpcyBjYWxsZWQgdGhlIGlucHV0IHR5cGUuIFRoZSB0YXJnZXQKLSAqIHR5cGUgbXVzdCBiZSBhIG5hbWVkIGF0b21pYyB0eXBlLCByZXByZXNlbnRlZCBieSBhIFFOYW1lLCBvcHRpb25hbGx5IGZvbGxvd2VkCi0gKiBieSB0aGUgb2NjdXJyZW5jZSBpbmRpY2F0b3IgPyBpZiBhbiBlbXB0eSBzZXF1ZW5jZSBpcyBwZXJtaXR0ZWQuIElmIHRoZQotICogdGFyZ2V0IHR5cGUgaGFzIG5vIG5hbWVzcGFjZSBwcmVmaXgsIGl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgaW4gdGhlIGRlZmF1bHQKLSAqIGVsZW1lbnQvdHlwZSBuYW1lc3BhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBDYXN0RXhwciBleHRlbmRzIEJpbkV4cHIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENhc3RFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dCB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBTaW5nbGVUeXBlIHRvIGNhc3QgbCB0by4KLQkgKi8KLQlwdWJsaWMgQ2FzdEV4cHIoRXhwciBsLCBTaW5nbGVUeXBlIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ2FzdGFibGVFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DYXN0YWJsZUV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI2MDI4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DYXN0YWJsZUV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQSBjbGFzcyB0aGF0IHRlc3RzIHdoZXRoZXIgYSBnaXZlbiB2YWx1ZSBpcyBjYXN0YWJsZSBpbnRvIGEgZ2l2ZW4gdHlwZS4gVGhpcwotICogY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGFuIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHByb2Nlc3NpbmcgYSBnaXZlbiB2YWx1ZS4KLSAqLwotcHVibGljIGNsYXNzIENhc3RhYmxlRXhwciBleHRlbmRzIEJpbkV4cHIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3Igb2YgQ2FzdGFibGVFeHByCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0IHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIFNpbmdsZVR5cGUgdG8gY2hlY2sgbCBhZ2FpbnN0LgotCSAqLwotCXB1YmxpYyBDYXN0YWJsZUV4cHIoRXhwciBsLCBTaW5nbGVUeXBlIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ21wRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ21wRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDc4NWMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0NtcEV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFRoZSBjb21wYXJpc29uIG9mIGV4cHJlc3Npb24gb3BlcmF0b3IgdGFrZXMgdGhlIHZhbHVlIG9mIGl0cyBsZWZ0IG9wZXJhbmQgYW5kCi0gKiBjb21wYXJlcyAoZGVwZW5kYW50IG9uIHR5cGUpIGFnYWluc3QgaXRzIHJpZ2h0IG9wZXJhbmQsIGFjY29yZGluZyB0byB0aGUKLSAqIHJ1bGVzIG9mIHRoZSBwYXJ0aWN1bGFyIGNvbXBhcmlzb24gcnVsZQotICovCi1wdWJsaWMgY2xhc3MgQ21wRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRVFVQUxTIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUVVBTFMgPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9URVFVQUxTIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT1RFUVVBTFMgPSAxOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEVTU1RIQU4gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFU1NUSEFOID0gMjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIExFU1NFUVVBTCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVTU0VRVUFMID0gMzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdSRUFURVIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVIgPSA0OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR1JFQVRFUkVRVUFMIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkVBVEVSRVFVQUwgPSA1OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRVEgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVRID0gNjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIE5FIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORSA9IDc7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBMVCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTFQgPSA4OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFID0gOTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdUIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVCA9IDEwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR0Ugb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFID0gMTE7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBJUyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVMgPSAxMjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIExFU1NfTEVTUyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVTU19MRVNTID0gMTM7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBHUkVBVEVSX0dSRUFURVIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVJfR1JFQVRFUiA9IDE0OwotCi0JcHJpdmF0ZSBpbnQgX3R5cGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ21wRXhwcgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dCB4cGF0aCBsZWZ0IGV4cHJlc3Npb24vdmFyaWFibGUKLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgaW5wdXQgeHBhdGggcmlnaHQgZXhwcmVzc2lvbi92YXJpYWJsZQotCSAqIEBwYXJhbSB0eXBlCi0JICogICAgICAgICAgICB3aGF0IGNvbXBhcmlzb24gdG8gdXNlIGwgYWdhaW5zdCByLgotCSAqLwotCXB1YmxpYyBDbXBFeHByKEV4cHIgbCwgRXhwciByLCBpbnQgdHlwZSkgewotCQlzdXBlcihsLCByKTsKLQotCQlfdHlwZSA9IHR5cGU7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBjb21wYXJpc29uIHR5cGUKLQkgKi8KLQlwdWJsaWMgaW50IHR5cGUoKSB7Ci0JCXJldHVybiBfdHlwZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DbnR4SXRlbUV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0NudHhJdGVtRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGVlYTgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0NudHhJdGVtRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgQ29udGV4dCBJdGVtIEV4cHJlc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBDbnR4SXRlbUV4cHIgZXh0ZW5kcyBQcmltYXJ5RXhwciB7Ci0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ29tbWVudFRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0NvbW1lbnRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZjdkNzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ29tbWVudFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjk4NTM1IC0gQXR0cmlidXRlIGluc3RhbmNlIG9mIGltcHJvdmVtZW50cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNvbW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDbGFzcyBmb3IgQ29tbWVudCB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgQ29tbWVudFRlc3QgZXh0ZW5kcyBLaW5kVGVzdCB7Ci0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFFOYW1lIG5hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzV2lsZCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBDbGFzcyBnZXRYRE1DbGFzc1R5cGUoKSB7Ci0JCXJldHVybiBDb21tZW50VHlwZS5jbGFzczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RlY2ltYWxMaXRlcmFsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9EZWNpbWFsTGl0ZXJhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjdiYTdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RlY2ltYWxMaXRlcmFsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKlRoZSB2YWx1ZSBvZiBhIG51bWVyaWMgbGl0ZXJhbCBjb250YWluaW5nICIuIiBidXQgbm8gZSBvciBFIGNoYXJhY3RlciBpcyBhbgotICogYXRvbWljIHZhbHVlIG9mIHR5cGUgeHM6ZGVjaW1hbAotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWNpbWFsTGl0ZXJhbCBleHRlbmRzIE51bWVyaWNMaXRlcmFsIHsKLQlwcml2YXRlIFhTRGVjaW1hbCBfdmFsdWU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRGVjaW1hbExpdGVyYWwKLQkgKiAKLQkgKiBAcGFyYW0gdmFsdWUKLQkgKiAgICAgICAgICAgIGRvdWJsZSB2YWx1ZQotCSAqLwotCXB1YmxpYyBEZWNpbWFsTGl0ZXJhbChCaWdEZWNpbWFsIHZhbHVlKSB7Ci0JCV92YWx1ZSA9IG5ldyBYU0RlY2ltYWwodmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4geHM6ZGVjaW1hbCB2YWx1ZQotCSAqLwotCXB1YmxpYyBYU0RlY2ltYWwgdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRGl2RXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRGl2RXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGRmM2ZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RpdkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIERpdmlzaW9uIGV4cHJlc3Npb25zLgotICovCi1wdWJsaWMgY2xhc3MgRGl2RXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEaXZFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICovCi0JcHVibGljIERpdkV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRG9jdW1lbnRUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Eb2N1bWVudFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1MjI2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Eb2N1bWVudFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjk4NTM1IC0gQXR0cmlidXRlIGluc3RhbmNlIG9mIGltcHJvdmVtZW50cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkRvY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIENsYXNzIGZvciBEb2N1bWVudCB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRUZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9ORS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05FID0gMDsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEVMRU1FTlQuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUxFTUVOVCA9IDE7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBTQ0hFTUFfRUxFTUVOVC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ0hFTUFfRUxFTUVOVCA9IDI7Ci0KLQkvLyBYWFg6IHBvbHltb3JwaGlzbQotCXByaXZhdGUgaW50IF90eXBlOwotCi0JcHJpdmF0ZSBBdHRyRWxlbVRlc3QgX2V0ZXN0OwotCXByaXZhdGUgU2NoZW1hRWxlbVRlc3QgX3NjaGVtYV9ldGVzdDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEb2N1bWVudFRlc3QuCi0JICogCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFR5cGUgb2YgZWxlbWVudCB0byB0ZXN0LgotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIHhwYXRoIG9iamVjdCB0byB0ZXN0LgotCSAqLwotCXB1YmxpYyBEb2N1bWVudFRlc3QoaW50IHR5cGUsIE9iamVjdCBhcmcpIHsKLQkJX2V0ZXN0ID0gbnVsbDsKLQkJX3NjaGVtYV9ldGVzdCA9IG51bGw7Ci0KLQkJX3R5cGUgPSB0eXBlOwotCQlzd2l0Y2ggKF90eXBlKSB7Ci0JCWNhc2UgRUxFTUVOVDoKLQkJCV9ldGVzdCA9IChBdHRyRWxlbVRlc3QpIGFyZzsKLQkJCWJyZWFrOwotCQljYXNlIFNDSEVNQV9FTEVNRU5UOgotCQkJX3NjaGVtYV9ldGVzdCA9IChTY2hlbWFFbGVtVGVzdCkgYXJnOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yIGZvciBEb2N1bWVudFRlc3QuCi0JICovCi0JcHVibGljIERvY3VtZW50VGVzdCgpIHsKLQkJdGhpcyhOT05FLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGVzdCB0eXBlLgotCSAqIAotCSAqIEByZXR1cm4gVHlwZSBvZiB0ZXN0LgotCSAqLwotCXB1YmxpYyBpbnQgdHlwZSgpIHsKLQkJcmV0dXJuIF90eXBlOwotCX0KLQotCS8qKgotCSAqIEVsZW1lbnQgdGVzdC4KLQkgKiAKLQkgKiBAcmV0dXJuIEVsZW1lbnQgdGVzdC4KLQkgKi8KLQlwdWJsaWMgQXR0ckVsZW1UZXN0IGVsZW1fdGVzdCgpIHsKLQkJcmV0dXJuIF9ldGVzdDsKLQl9Ci0KLQkvKioKLQkgKiBTY2hlbWEgZWxlbWVudCB0ZXN0LgotCSAqIAotCSAqIEByZXR1cm4gU2NoZW1hIGVsZW1lbnQgdGVzdC4KLQkgKi8KLQlwdWJsaWMgU2NoZW1hRWxlbVRlc3Qgc2NoZW1hX2VsZW1fdGVzdCgpIHsKLQkJcmV0dXJuIF9zY2hlbWFfZXRlc3Q7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQ2xhc3MgZ2V0WERNQ2xhc3NUeXBlKCkgewotCQlyZXR1cm4gRG9jVHlwZS5jbGFzczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RvdWJsZUxpdGVyYWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RvdWJsZUxpdGVyYWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU3MGU3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Eb3VibGVMaXRlcmFsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICpUaGUgdmFsdWUgb2YgYSBudW1lcmljIGxpdGVyYWwgY29udGFpbmluZyBhbiBlIG9yIEUgY2hhcmFjdGVyIGlzIGFuIGF0b21pYwotICogdmFsdWUgb2YgdHlwZSB4czpkb3VibGUKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgRG91YmxlTGl0ZXJhbCBleHRlbmRzIE51bWVyaWNMaXRlcmFsIHsKLQlwcml2YXRlIFhTRG91YmxlIF92YWx1ZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEb3VibGVpdGVyYWwKLQkgKiAKLQkgKiBAcGFyYW0gdmFsdWUKLQkgKiAgICAgICAgICAgIGRvdWJsZSB2YWx1ZQotCSAqLwotCXB1YmxpYyBEb3VibGVMaXRlcmFsKGRvdWJsZSB2YWx1ZSkgewotCQlfdmFsdWUgPSBuZXcgWFNEb3VibGUodmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4geHM6ZG91YmxlIHZhbHVlCi0JICovCi0JcHVibGljIFhTRG91YmxlIHZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRWxlbWVudFRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0VsZW1lbnRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNjIzMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRWxlbWVudFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuRWxlbWVudFBTVkk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuSXRlbVBTVkk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBFbGVtZW50IHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdCBleHRlbmRzIEF0dHJFbGVtVGVzdCB7Ci0JcHJpdmF0ZSBib29sZWFuIF9xbWFyayA9IGZhbHNlOwotCi0JcHJpdmF0ZSBBbnlUeXBlIGFueVR5cGUgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LiBUaGlzIHRha2VzIGluIDQgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotCSAqIHRlc3QodHJ1ZS9mYWxzZSksIHR5cGUgYW5kIHF1ZXN0aW9uIG1hcmsgdGVzdCh0cnVlL2ZhbHNlKS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgTmFtZSBvZiBlbGVtZW50IHRvIHRlc3QuCi0JICogQHBhcmFtIHdpbGQKLQkgKiAgICAgICAgICAgIFdpbGRjYXJkIHRlc3Q/ICh0cnVlL2ZhbHNlKS4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVHlwZSBvZiBlbGVtZW50IHRvIHRlc3QuCi0JICogQHBhcmFtIHFtYXJrCi0JICogICAgICAgICAgICBOaWxsZWQgcHJvcGVydHkgKHRydWUvZmFsc2UpLgotCSAqLwotCXB1YmxpYyBFbGVtZW50VGVzdChRTmFtZSBuYW1lLCBib29sZWFuIHdpbGQsIFFOYW1lIHR5cGUsIGJvb2xlYW4gcW1hcmspIHsKLQkJc3VwZXIobmFtZSwgd2lsZCwgdHlwZSk7Ci0JCV9xbWFyayA9IHFtYXJrOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdC4gVGhpcyB0YWtlcyBpbiAzIGlucHV0cywgTmFtZSwgd2lsZGNhcmQKLQkgKiB0ZXN0KHRydWUvZmFsc2UpYW5kIHR5cGUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIE5hbWUgb2YgZWxlbWVudCB0byB0ZXN0LgotCSAqIEBwYXJhbSB3aWxkCi0JICogICAgICAgICAgICBXaWxkY2FyZCB0ZXN0PyAodHJ1ZS9mYWxzZSkuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFR5cGUgb2YgZWxlbWVudCB0byB0ZXN0LgotCSAqLwotCXB1YmxpYyBFbGVtZW50VGVzdChRTmFtZSBuYW1lLCBib29sZWFuIHdpbGQsIFFOYW1lIHR5cGUpIHsKLQkJc3VwZXIobmFtZSwgd2lsZCwgdHlwZSk7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LiBUaGlzIHRha2VzIGluIDIgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotCSAqIHRlc3QodHJ1ZS9mYWxzZSkuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIE5hbWUgb2YgZWxlbWVudCB0byB0ZXN0LgotCSAqIEBwYXJhbSB3aWxkCi0JICogICAgICAgICAgICBXaWxkY2FyZCB0ZXN0PyAodHJ1ZS9mYWxzZSkuCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0KFFOYW1lIG5hbWUsIGJvb2xlYW4gd2lsZCkgewotCQlzdXBlcihuYW1lLCB3aWxkKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdC4KLQkgKi8KLQlwdWJsaWMgRWxlbWVudFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU2V0IG5pbGxlZCBwcm9wZXJ0eS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIGJvb2xlYW4gcW1hcmsoKSB7Ci0JCXJldHVybiBfcW1hcms7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQotCQlpZiAobmFtZSgpID09IG51bGwgJiYgIXdpbGQoKSkgewotCQkJcmV0dXJuIG5ldyBFbGVtZW50VHlwZSgpOwotCQl9Ci0KLQkJQW55VHlwZSBhdCA9IHJzLmZpcnN0KCk7Ci0KLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkpIHsKLQkJCXJldHVybiBuZXcgRWxlbWVudFR5cGUoKTsKLQkJfQotCi0JCXJldHVybiBjcmVhdGVFbGVtZW50VHlwZShhdCk7Ci0JfQotCi0JcHJpdmF0ZSBBbnlUeXBlIGNyZWF0ZUVsZW1lbnRUeXBlKEFueVR5cGUgYXQpIHsKLQkJYW55VHlwZSA9IG5ldyBFbGVtZW50VHlwZSgpOwotCQlOb2RlVHlwZSBub2RlVHlwZSA9IChOb2RlVHlwZSkgYXQ7Ci0JCU5vZGUgbm9kZSA9IG5vZGVUeXBlLm5vZGVfdmFsdWUoKTsKLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkRPQ1VNRU5UX05PREUpIHsKLQkJCWRvYyA9IChEb2N1bWVudCkgbm9kZTsKLQkJfSBlbHNlIHsKLQkJCWRvYyA9IG5vZGVUeXBlLm5vZGVfdmFsdWUoKS5nZXRPd25lckRvY3VtZW50KCk7Ci0JCX0KLQkJCi0JCU5vZGVMaXN0IG5vZGVMaXN0ID0gbnVsbDsJCQotCQlpZiAoIXdpbGQoKSkgewotCQkJbm9kZUxpc3QgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhuYW1lKCkubmFtZXNwYWNlKCksCi0JCQkJCW5hbWUoKS5sb2NhbCgpKTsKLQkJfSBlbHNlIHsKLQkJCW5vZGVMaXN0ID0gbmV3IFNpbmdsZUl0ZW1Ob2RlTGlzdEltcGwobm9kZSk7Ci0JCX0KLQotCQlpZiAobm9kZUxpc3QuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQlhbnlUeXBlID0gY3JlYXRlRWxlbWVudEZvclhTRFR5cGUobm9kZUxpc3QpOwotCQl9Ci0JCXJldHVybiBhbnlUeXBlOwotCX0KLQotCXByaXZhdGUgQW55VHlwZSBjcmVhdGVFbGVtZW50Rm9yWFNEVHlwZShOb2RlTGlzdCBub2RlTGlzdCkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVMaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCUVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSBub2RlTGlzdC5pdGVtKGkpOwotCQkJaWYgKHR5cGUoKSA9PSBudWxsIHx8ICEoZWxlbWVudCBpbnN0YW5jZW9mIEl0ZW1QU1ZJKSkgewotCQkJCWFueVR5cGUgPSBuZXcgRWxlbWVudFR5cGUoZWxlbWVudCk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCUVsZW1lbnRQU1ZJIGVsZW1wc3ZpID0gKEVsZW1lbnRQU1ZJKSBlbGVtZW50OwotCQkJCVhTVHlwZURlZmluaXRpb24gdHlwZWRlZiA9IGVsZW1wc3ZpLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkJaWYgKHR5cGVkZWYuZGVyaXZlZEZyb20odHlwZSgpLm5hbWVzcGFjZSgpLCB0eXBlKCkubG9jYWwoKSwKLQkJCQkJCWdldERlcnZpYXRpb25UeXBlcygpKSkgewotCQkJCQlhbnlUeXBlID0gbmV3IEVsZW1lbnRUeXBlKGVsZW1lbnQpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGFueVR5cGU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNXaWxkKCkgewotCQlyZXR1cm4gd2lsZCgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBDbGFzcyBnZXRYRE1DbGFzc1R5cGUoKSB7Ci0JCXJldHVybiBFbGVtZW50VHlwZS5jbGFzczsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2luZ2xlSXRlbU5vZGVMaXN0SW1wbCBpbXBsZW1lbnRzIE5vZGVMaXN0IHsKLQkJcHJpdmF0ZSBOb2RlIG5vZGU7Ci0JCXB1YmxpYyBTaW5nbGVJdGVtTm9kZUxpc3RJbXBsKE5vZGUgbm9kZSkgewotCQkJdGhpcy5ub2RlID0gbm9kZTsKLQkJfQotCi0JCXB1YmxpYyBOb2RlIGl0ZW0oaW50IGluZGV4KSB7Ci0JCQlyZXR1cm4gbm9kZTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgewotCQkJaWYgKG5vZGUgIT0gbnVsbCkgewotCQkJCXJldHVybiAxOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0V4Y2VwdEV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0V4Y2VwdEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyNmFkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9FeGNlcHRFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFRoZSBleGNlcHQgb3BlcmF0b3IgdGFrZXMgdHdvIG5vZGUgc2VxdWVuY2VzIGFzIG9wZXJhbmRzIGFuZCByZXR1cm5zIGEKLSAqIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIHRoZSBub2RlcyB0aGF0IG9jY3VyIGluIHRoZSBmaXJzdCBvcGVyYW5kIGJ1dCBub3QgaW4KLSAqIHRoZSBzZWNvbmQgb3BlcmFuZC4KLSAqLwotcHVibGljIGNsYXNzIEV4Y2VwdEV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFeGNlcHRFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICovCi0JcHVibGljIEV4Y2VwdEV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzdiYTkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0V4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIG5vcm1hbCBleHByZXNzaW9ucy4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEV4cHIgZXh0ZW5kcyBYUGF0aE5vZGUgewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRmlsdGVyRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRmlsdGVyRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTMwY2MwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ZpbHRlckV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBBIGZpbHRlciBleHByZXNzaW9uIGNvbnNpc3RzIHNpbXBseSBvZiBhIHByaW1hcnkgZXhwcmVzc2lvbiBmb2xsb3dlZCBieSB6ZXJvCi0gKiBvciBtb3JlIHByZWRpY2F0ZXMuIFRoZSByZXN1bHQgb2YgdGhlIGZpbHRlciBleHByZXNzaW9uIGNvbnNpc3RzIG9mIGFsbCB0aGUKLSAqIGl0ZW1zIHJldHVybmVkIGJ5IHRoZSBwcmltYXJ5IGV4cHJlc3Npb24gZm9yIHdoaWNoIGFsbCB0aGUgcHJlZGljYXRlcyBhcmUKLSAqIHRydWUuIElmIG5vIHByZWRpY2F0ZXMgYXJlIHNwZWNpZmllZCwgdGhlIHJlc3VsdCBpcyBzaW1wbHkgdGhlIHJlc3VsdCBvZiB0aGUKLSAqIHByaW1hcnkgZXhwcmVzc2lvbi4gVGhpcyByZXN1bHQgbWF5IGNvbnRhaW4gbm9kZXMsIGF0b21pYyB2YWx1ZXMsIG9yIGFueQotICogY29tYmluYXRpb24gb2YgdGhlc2UuIFRoZSBvcmRlcmluZyBvZiB0aGUgaXRlbXMgcmV0dXJuZWQgYnkgYSBmaWx0ZXIKLSAqIGV4cHJlc3Npb24gaXMgdGhlIHNhbWUgYXMgdGhlaXIgb3JkZXIgaW4gdGhlIHJlc3VsdCBvZiB0aGUgcHJpbWFyeQotICogZXhwcmVzc2lvbi4gQ29udGV4dCBwb3NpdGlvbnMgYXJlIGFzc2lnbmVkIHRvIGl0ZW1zIGJhc2VkIG9uIHRoZWlyIG9yZGluYWwKLSAqIHBvc2l0aW9uIGluIHRoZSByZXN1bHQgc2VxdWVuY2UuIFRoZSBmaXJzdCBjb250ZXh0IHBvc2l0aW9uIGlzIDEuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWx0ZXJFeHByIGV4dGVuZHMgU3RlcEV4cHIgewotCXByaXZhdGUgUHJpbWFyeUV4cHIgX3BleHByOwotCXByaXZhdGUgQ29sbGVjdGlvbiBfZXhwcnM7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBvZiBGaWx0ZXJFeHByLgotCSAqIAotCSAqIEBwYXJhbSBwZXhwcgotCSAqICAgICAgICAgICAgaXMgY29waWVkIHRvIF9wZXhwci4KLQkgKiBAcGFyYW0gZXhwcnMKLQkgKiAgICAgICAgICAgIGlzIGNvcGllZCB0byBfZXhwcnMuIAotCSAqLwotCXB1YmxpYyBGaWx0ZXJFeHByKFByaW1hcnlFeHByIHBleHByLCBDb2xsZWN0aW9uIGV4cHJzKSB7Ci0JCV9wZXhwciA9IHBleHByOwotCQlfZXhwcnMgPSBleHByczsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHByaW1hcnkgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBwcmltYXJ5IGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIFByaW1hcnlFeHByIHByaW1hcnkoKSB7Ci0JCXJldHVybiBfcGV4cHI7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBuZXh0IHByZWRpY2F0ZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBuZXh0IHByZWRpY2F0ZS4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfZXhwcnMuaXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgYSBuZXcgcHJpbWFyeSBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyBzZXQgYXMgdGhlIG5ldyBwcmltYXJ5IGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3ByaW1hcnkoUHJpbWFyeUV4cHIgZSkgewotCQlfcGV4cHIgPSBlOwotCX0KLQotCS8qKgotCSAqIENvdW50IHRoZSBudW1iZXIgb2YgcHJlZGljYXRlcy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBzaXplIG9mIHRoZSBjb2xsZWN0aW9uIG9mIHByZWRpY2F0ZXMuCi0JICovCi0JcHVibGljIGludCBwcmVkaWNhdGVfY291bnQoKSB7Ci0JCXJldHVybiBfZXhwcnMuc2l6ZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ZvckV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ZvckV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg4NjVlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Gb3JFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIHRoZSBGb3IgZXhwcmVzc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIEZvckV4cHIgZXh0ZW5kcyBFeHByIHsKLQlwcml2YXRlIENvbGxlY3Rpb24gX3Zhcl9leHByX3BhaXJzOwotCXByaXZhdGUgRXhwciBfcmV0dXJuOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZvckV4cHIuCi0JICogCi0JICogQHBhcmFtIHZhcmV4cAotCSAqICAgICAgICAgICAgRXhwcmVzc2lvbnMuCi0JICogQHBhcmFtIHJldAotCSAqICAgICAgICAgICAgUmV0dXJuIGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIEZvckV4cHIoQ29sbGVjdGlvbiB2YXJleHAsIEV4cHIgcmV0KSB7Ci0JCV92YXJfZXhwcl9wYWlycyA9IHZhcmV4cDsKLQkJX3JldHVybiA9IHJldDsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJcmV0dXJuIF92YXJfZXhwcl9wYWlycy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEV4cHIgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBFeHByIGV4cHIoKSB7Ci0JCXJldHVybiBfcmV0dXJuOwotCX0KLQotCS8qKgotCSAqIFNldCBFeHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBFeHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9leHByKEV4cHIgZSkgewotCQlfcmV0dXJuID0gZTsKLQl9Ci0KLQkvLyB1c2VkIGZvciBub3JtYWxpemF0aW9uLi4uIGJhc2ljYWxseSBqdXN0IGtlZXAgYSAic2ltcGxlIGZvciIuLi4gbm8KLQkvLyBwYWlycy4uLiBjb2xsZWN0aW9uIHdpbGwgYWx3YXlzIGhhdmUgMSBlbGVtZW50Ci0JLyoqCi0JICogTm9ybWFsaXphdGlvbiBvZiBleHByZXNzaW9uIHBhaXJzLgotCSAqLwotCXB1YmxpYyB2b2lkIHRydW5jYXRlX3BhaXJzKCkgewotCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBfdmFyX2V4cHJfcGFpcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlpLm5leHQoKTsKLQkJCWlmICghZmlyc3QpCi0JCQkJaS5yZW1vdmUoKTsKLQotCQkJZmlyc3QgPSBmYWxzZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIENvbGxlY3Rpb24gaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gRXhwcmVzc2lvbiBwYWlycy4KLQkgKi8KLQlwdWJsaWMgQ29sbGVjdGlvbiB2ZV9wYWlycygpIHsKLQkJcmV0dXJuIF92YXJfZXhwcl9wYWlyczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Gb3J3YXJkU3RlcC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRm9yd2FyZFN0ZXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBhMTNiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Gb3J3YXJkU3RlcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgRm9yd2FyZCBzdGVwcGluZyBzdXBwb3J0IGZvciBTdGVwIG9wZXJhdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGb3J3YXJkU3RlcCBleHRlbmRzIFN0ZXAgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9ORS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05FID0gMDsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIENISUxELgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENISUxEID0gMTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIERFU0NFTkRBTlQuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ0VOREFOVCA9IDI7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBBVFRSSUJVVEUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRUUklCVVRFID0gMzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFNFTEYuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VMRiA9IDQ7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBERVNDRU5EQU5UX09SX1NFTEYuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ0VOREFOVF9PUl9TRUxGID0gNTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEZPTExPV0lOR19TSUJMSU5HLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTExPV0lOR19TSUJMSU5HID0gNjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEZPTExPV0lORy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT0xMT1dJTkcgPSA3OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTkFNRVNQQUNFLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUVTUEFDRSA9IDg7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBBVF9TWU0uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRfU1lNID0gOTsKLQotCXByaXZhdGUgaW50IF9heGlzOwotCi0JLy8gWFhYOiB3ZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGUgaW50IGF4aXMuLi4gYW5kIG1ha2Ugb25seSB0aGlzIHRoZSBheGlzCi0JcHJpdmF0ZSBGb3J3YXJkQXhpcyBfaXRlcmF0b3I7Ci0KLQkvLyBYWFg6IG5lZWRzIHRvIGJlIGZpeGVkCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZV9pdGVyYXRvcigpIHsKLQkJc3dpdGNoIChfYXhpcykgewotCQljYXNlIE5PTkU6Ci0JCQlpZiAobm9kZV90ZXN0KCkgaW5zdGFuY2VvZiBBdHRyaWJ1dGVUZXN0KQotCQkJCV9pdGVyYXRvciA9IG5ldyBBdHRyaWJ1dGVBeGlzKCk7Ci0JCQllbHNlCi0JCQkJX2l0ZXJhdG9yID0gbmV3IENoaWxkQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDSElMRDoKLQkJCV9pdGVyYXRvciA9IG5ldyBDaGlsZEF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgREVTQ0VOREFOVDoKLQkJCV9pdGVyYXRvciA9IG5ldyBEZXNjZW5kYW50QXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGT0xMT1dJTkdfU0lCTElORzoKLQkJCV9pdGVyYXRvciA9IG5ldyBGb2xsb3dpbmdTaWJsaW5nQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGT0xMT1dJTkc6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgRm9sbG93aW5nQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBVF9TWU06Ci0JCWNhc2UgQVRUUklCVVRFOgotCQkJX2l0ZXJhdG9yID0gbmV3IEF0dHJpYnV0ZUF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0VMRjoKLQkJCV9pdGVyYXRvciA9IG5ldyBTZWxmQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBERVNDRU5EQU5UX09SX1NFTEY6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgRGVzY2VuZGFudE9yU2VsZkF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGb3J3YXJkU3RlcC4KLQkgKiAKLQkgKiBAcGFyYW0gYXhpcwotCSAqICAgICAgICAgICAgQXhpcyBudW1iZXIuCi0JICogQHBhcmFtIG5vZGVfdGVzdAotCSAqICAgICAgICAgICAgTm9kZSB0ZXN0LgotCSAqLwotCXB1YmxpYyBGb3J3YXJkU3RlcChpbnQgYXhpcywgTm9kZVRlc3Qgbm9kZV90ZXN0KSB7Ci0JCXN1cGVyKG5vZGVfdGVzdCk7Ci0KLQkJX2F4aXMgPSBheGlzOwotCi0JCXVwZGF0ZV9pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEF4aXMgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEF4aXMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBpbnQgYXhpcygpIHsKLQkJcmV0dXJuIF9heGlzOwotCX0KLQotCS8qKgotCSAqIFNldCBBeGlzIHRvIGN1cnJlbnQuCi0JICogCi0JICogQHBhcmFtIGF4aXMKLQkgKiAgICAgICAgICAgIEF4aXMgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9heGlzKGludCBheGlzKSB7Ci0JCV9heGlzID0gYXhpczsKLQkJdXBkYXRlX2l0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgRm9yd2FyZEF4aXMgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfaXRlcmF0b3I7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRnVuY3Rpb25DYWxsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9GdW5jdGlvbkNhbGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzliNTcyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9GdW5jdGlvbkNhbGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIENsYXNzIGZvciBGdW5jdGlvbiBDYWxsIHN1cHBvcnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGdW5jdGlvbkNhbGwgZXh0ZW5kcyBQcmltYXJ5RXhwciB7Ci0JcHJpdmF0ZSBRTmFtZSBfbmFtZTsKLQlwcml2YXRlIENvbGxlY3Rpb24gX2FyZ3M7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnVuY3Rpb25DYWxsLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBRTmFtZS4KLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgQ29sbGVjdGlvbiBvZiBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIEZ1bmN0aW9uQ2FsbChRTmFtZSBuYW1lLCBDb2xsZWN0aW9uIGFyZ3MpIHsKLQkJX25hbWUgPSBuYW1lOwotCQlfYXJncyA9IGFyZ3M7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIF9uYW1lOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX2FyZ3MuaXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBBcml0eSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgQXJpdHkgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBpbnQgYXJpdHkoKSB7Ci0JCXJldHVybiBfYXJncy5zaXplKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSURpdkV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0lEaXZFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMGZkYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSURpdkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgSW50ZWdlciBkaXZpc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIElEaXZFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIElEaXZFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBsZWZ0IHZhbHVlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICByaWdodCB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgSURpdkV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSWZFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JZkV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmNmM3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JZkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBJRiBleHByZXNzaW9ucy4KLSAqLwotcHVibGljIGNsYXNzIElmRXhwciBleHRlbmRzIEV4cHIgewotCXByaXZhdGUgQ29sbGVjdGlvbiBfZXhwcnM7Ci0JcHJpdmF0ZSBFeHByIF90aGVuOwotCXByaXZhdGUgRXhwciBfZWxzZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBJZkV4cHIuCi0JICogCi0JICogQHBhcmFtIGV4cHMKLQkgKiAgICAgICAgICAgIENvbmRpdGlvbiBleHByZXNzaW9ucy4KLQkgKiBAcGFyYW0gdAotCSAqICAgICAgICAgICAgSWYgdHJ1ZSBleHByZXNzaW9ucy4KLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgSWYgZmFsc2UvZWxzZSBleHByZXNzaW9ucy4KLQkgKi8KLQlwdWJsaWMgSWZFeHByKENvbGxlY3Rpb24gZXhwcywgRXhwciB0LCBFeHByIGUpIHsKLQkJX2V4cHJzID0gZXhwczsKLQkJX3RoZW4gPSB0OwotCQlfZWxzZSA9IGU7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfZXhwcnMuaXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBFeHByZXNzaW9uIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBFeHByIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgRXhwciB0aGVuX2NsYXVzZSgpIHsKLQkJcmV0dXJuIF90aGVuOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBFeHByIGVsc2VfY2xhdXNlKCkgewotCQlyZXR1cm4gX2Vsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSW5zdE9mRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSW5zdE9mRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTdjYWE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0luc3RPZkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogVGhlIGJvb2xlYW4gb3BlcmF0b3IgJ2luc3RhbmNlIG9mJyB0YWtlcyB0aGUgdmFsdWUgb2YgaXRzIGZpcnN0IG9wZXJhbmQgYW5kCi0gKiBtYXRjaGVzIGl0cyB0eXBlIHRvIHRoZSBTZXF1ZW5jZVR5cGUgaW4gaXRzIHNlY29uZCBvcGVyYW5kLCBhY2NvcmRpbmcgdG8gdGhlCi0gKiBydWxlcyBmb3IgU2VxdWVuY2VUeXBlIG1hdGNoaW5nLgotICovCi1wdWJsaWMgY2xhc3MgSW5zdE9mRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBJbnN0T2ZFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dCB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBTZXF1ZW5jZVR5cGUgdG8gY2hlY2sgbCBhZ2FpbnN0LgotCSAqLwotCXB1YmxpYyBJbnN0T2ZFeHByKEV4cHIgbCwgU2VxdWVuY2VUeXBlIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSW50ZWdlckxpdGVyYWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ludGVnZXJMaXRlcmFsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Y2MxYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSW50ZWdlckxpdGVyYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotCi0vKioKLSAqIFRoZSB2YWx1ZSBvZiBhIG51bWVyaWMgbGl0ZXJhbCBjb250YWluaW5nIG5vICIuIiBhbmFkIG5vIGUgb3IgRSBjaGFyYWN0ZXIgaXMKLSAqIGFuIGF0b21pYyB2YWx1ZSBvZiB0eXBlIHhzOmludGVnZXIKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgSW50ZWdlckxpdGVyYWwgZXh0ZW5kcyBOdW1lcmljTGl0ZXJhbCB7Ci0JcHJpdmF0ZSBYU0ludGVnZXIgX3ZhbHVlOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEludGVnZXJMaXRlcmFsCi0JICogCi0JICogQHBhcmFtIGkKLQkgKiAgICAgICAgICAgIGludGVnZXIgdmFsdWUKLQkgKi8KLQlwdWJsaWMgSW50ZWdlckxpdGVyYWwoQmlnSW50ZWdlciBpKSB7Ci0JCV92YWx1ZSA9IG5ldyBYU0ludGVnZXIoaSk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB4czppbnRlZ2VyIHZhbHVlCi0JICovCi0JcHVibGljIFhTSW50ZWdlciB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnRlcnNlY3RFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnRlcnNlY3RFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MWVmNmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSW50ZXJzZWN0RXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBUaGUgaW50ZXJzZWN0IG9wZXJhdG9yIHRha2VzIHR3byBub2RlIHNlcXVlbmNlcyBhcyBvcGVyYW5kcyBhbmQgcmV0dXJucyBhCi0gKiBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCB0aGUgbm9kZXMgdGhhdCBvY2N1ciBpbiBib3RoIG9wZXJhbmRzLgotICovCi1wdWJsaWMgY2xhc3MgSW50ZXJzZWN0RXhwciBleHRlbmRzIEJpbkV4cHIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEludGVyc2VjdEV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgSW50ZXJzZWN0RXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JdGVtVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSXRlbVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMzMDRlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JdGVtVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIEl0ZW0gbm9kZSB0eXBlLgotICovCi1wdWJsaWMgY2xhc3MgSXRlbVR5cGUgZXh0ZW5kcyBYUGF0aE5vZGUgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgSVRFTS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJVEVNID0gMDsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFFOQU1FLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFOQU1FID0gMTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEtJTkRURVNULgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtJTkRURVNUID0gMjsKLQlwcml2YXRlIGludCBfdHlwZTsKLQotCXByaXZhdGUgUU5hbWUgX3FuYW1lOwotCXByaXZhdGUgS2luZFRlc3QgX2t0ZXN0OwotCi0JLy8gWFhYOiBwb2x5bW9ycGhpc20KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgSXRlbVR5cGUuCi0JICogCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFR5cGUuCi0JICogQHBhcmFtIHZhbHVlCi0JICogICAgICAgICAgICBPYmplY3QgdmFsdWUuCi0JICovCi0JcHVibGljIEl0ZW1UeXBlKGludCB0eXBlLCBPYmplY3QgdmFsdWUpIHsKLQkJX3FuYW1lID0gbnVsbDsKLQkJX2t0ZXN0ID0gbnVsbDsKLQotCQlfdHlwZSA9IHR5cGU7Ci0KLQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgUU5BTUU6Ci0JCQlfcW5hbWUgPSAoUU5hbWUpIHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgS0lORFRFU1Q6Ci0JCQlfa3Rlc3QgPSAoS2luZFRlc3QpIHZhbHVlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBUeXBlIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBUeXBlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgaW50IHR5cGUoKSB7Ci0JCXJldHVybiBfdHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBxbmFtZSgpIHsKLQkJcmV0dXJuIF9xbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IEtpbmRUZXN0IGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBLaW5kVGVzdCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEtpbmRUZXN0IGtpbmRfdGVzdCgpIHsKLQkJcmV0dXJuIF9rdGVzdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9LaW5kVGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvS2luZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwYzYyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9LaW5kVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyOTg1MzUgLSBBdHRyaWJ1dGUgaW5zdGFuY2Ugb2YgaW1wcm92ZW1lbnRzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ2xhc3MgZm9yIEtpbmRUZXN0IG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEtpbmRUZXN0IGV4dGVuZHMgTm9kZVRlc3QgewotCQotCWFic3RyYWN0IHB1YmxpYyBBbnlUeXBlIGNyZWF0ZVRlc3RUeXBlKFJlc3VsdFNlcXVlbmNlIHJzKTsKLQkKLQlhYnN0cmFjdCBwdWJsaWMgUU5hbWUgbmFtZSgpOwotCQotCWFic3RyYWN0IHB1YmxpYyBib29sZWFuIGlzV2lsZCgpOwotCQotCWFic3RyYWN0IHB1YmxpYyBDbGFzcyBnZXRYRE1DbGFzc1R5cGUoKTsKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0xpdGVyYWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0xpdGVyYWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYzYWI4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9MaXRlcmFsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIExpdGVyYWwgaXMgZWl0aGVyIGEgTnVtZXJpY0xpdGVyYWwgb3IgYSBTdHJpbmdMaXRlcmFsCi0gKiAKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIExpdGVyYWwgZXh0ZW5kcyBQcmltYXJ5RXhwciB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9NaW51c0V4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L01pbnVzRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmM1NmYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L01pbnVzRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTWludXMgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBNaW51c0V4cHIgZXh0ZW5kcyBVbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBNaW51c0V4cHIKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKi8KLQlwdWJsaWMgTWludXNFeHByKEV4cHIgYXJnKSB7Ci0JCXN1cGVyKGFyZyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTW9kRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTW9kRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDdmZGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L01vZEV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE1vZHVsYXIgb3BlcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgTW9kRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBNb2RFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICovCi0JcHVibGljIE1vZEV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTXVsRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTXVsRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTIwNGYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L011bEV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE11bHRpcGx5IG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIE11bEV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgTXVsRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBNdWxFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L05hbWVUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9OYW1lVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjVhYzQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L05hbWVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE5hbWUgdGVzdCBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBOYW1lVGVzdCBleHRlbmRzIE5vZGVUZXN0IHsKLQlwcml2YXRlIFFOYW1lIF9uYW1lOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE5hbWVUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBRTmFtZSB0byB0ZXN0LgotCSAqLwotCXB1YmxpYyBOYW1lVGVzdChRTmFtZSBuYW1lKSB7Ci0JCV9uYW1lID0gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bGYgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX25hbWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTm9kZVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L05vZGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ODY4YTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTm9kZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE5vZGUgdGVzdCBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb2RlVGVzdCBleHRlbmRzIFhQYXRoTm9kZSB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9OdW1lcmljTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTnVtZXJpY0xpdGVyYWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3NjUzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9OdW1lcmljTGl0ZXJhbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBOdW1lcmljTGl0ZXJhbCBpcyBhIHZhbHVlIG9mIHR5cHBlIHhzOmludGVnZXIsIHhzOmRlY2ltYWwgb3IgeHM6ZG91YmxlCi0gKiAKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIE51bWVyaWNMaXRlcmFsIGV4dGVuZHMgTGl0ZXJhbCB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9PckV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L09yRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2U5YzI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L09yRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgT3Igb3BlcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgT3JFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE9yRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgbGVmdCBleHByZXNzaW9uLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICByaWdodCBleHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyBPckV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bGYgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUElUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QSVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZhZjFmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QSVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjk4NTM1IC0gQXR0cmlidXRlIGluc3RhbmNlIG9mIGltcHJvdmVtZW50cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlBJVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ2xhc3MgZm9yIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24gc3VwcG9ydC4KLSAqLwotcHVibGljIGNsYXNzIFBJVGVzdCBleHRlbmRzIEtpbmRUZXN0IHsKLQlwcml2YXRlIFN0cmluZyBfYXJnOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBJVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnN0cnVjdGlvbiBhcmd1bWVudC4KLQkgKi8KLQlwdWJsaWMgUElUZXN0KFN0cmluZyBhcmcpIHsKLQkJX2FyZyA9IGFyZzsKLQl9Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yIGZvciBQSVRlc3QuCi0JICovCi0JcHVibGljIFBJVGVzdCgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBTdHJpbmcgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFN0cmluZyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFN0cmluZyBhcmcoKSB7Ci0JCXJldHVybiBfYXJnOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlUeXBlIGNyZWF0ZVRlc3RUeXBlKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFFOYW1lIG5hbWUoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNXaWxkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJcmV0dXJuIFBJVHlwZS5jbGFzczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BhckV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BhckV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg4MGFjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QYXJFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIHBhcmV0aGVzaXplZCBleHByZXNzaW9ucyBzdXBwb3J0LgotICovCi1wdWJsaWMgY2xhc3MgUGFyRXhwciBleHRlbmRzIFByaW1hcnlFeHByIHsKLQlwcml2YXRlIENvbGxlY3Rpb24gX2V4cHJzOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBhckV4cHIuCi0JICogCi0JICogQHBhcmFtIGV4cHJzCi0JICogICAgICAgICAgICBFeHByZXNzaW9ucy4KLQkgKi8KLQlwdWJsaWMgUGFyRXhwcihDb2xsZWN0aW9uIGV4cHJzKSB7Ci0JCV9leHBycyA9IGV4cHJzOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX2V4cHJzLml0ZXJhdG9yKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGlwZUV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BpcGVFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNmMxY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGlwZUV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIFBpcGVkIGV4cHJlc3Npb25zIHN1cHBvcnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBQaXBlRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQaXBlRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgTGVmdCBleHByZXNzaW9uLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBSaWdodCBleHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyBQaXBlRXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QbHVzRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGx1c0V4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU3ZWFlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QbHVzRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgUGx1cyBleHByZXNzaW9uIHN1cHBvcnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBQbHVzRXhwciBleHRlbmRzIFVuRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBsdXNFeHByLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIEFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgUGx1c0V4cHIoRXhwciBhcmcpIHsKLQkJc3VwZXIoYXJnKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QcmltYXJ5RXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUHJpbWFyeUV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkxYmRhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QcmltYXJ5RXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBCYXNpYyBwcmltaXRpdmUgbGFuZ3VhZ2UuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcmltYXJ5RXhwciBleHRlbmRzIFhQYXRoTm9kZSB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9RdWFudGlmaWVkRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUXVhbnRpZmllZEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE4MjU1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9RdWFudGlmaWVkRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLy8gbWl0ZSB3YW5uYSBkbyB0d28gc2VwYXJhdGUgY2xhc3NlcyBhdCB0aGUgZW5kCi0vKioKLSAqIFN1cHBvcnQgZm9yIFF1YW50aWZpZWQgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBRdWFudGlmaWVkRXhwciBleHRlbmRzIEV4cHIgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU09NRS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT01FID0gMDsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFMTC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTEwgPSAxOwotCi0JcHJpdmF0ZSBDb2xsZWN0aW9uIF92YXJfZXhwcl9wYWlyczsKLQlwcml2YXRlIEV4cHIgX3JldHVybjsKLQlwcml2YXRlIGludCBfdHlwZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBRdWFudGlmaWVkRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVHlwZSAoMCBmb3IgU09NRSwgMSBmb3IgQUxMKS4KLQkgKiBAcGFyYW0gdmFyZXhwCi0JICogICAgICAgICAgICBFeHByZXNzaW9ucy4KLQkgKiBAcGFyYW0gcmV0Ci0JICogICAgICAgICAgICBSZXR1cm5lZCBleHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyBRdWFudGlmaWVkRXhwcihpbnQgdHlwZSwgQ29sbGVjdGlvbiB2YXJleHAsIEV4cHIgcmV0KSB7Ci0JCV90eXBlID0gdHlwZTsKLQkJX3Zhcl9leHByX3BhaXJzID0gdmFyZXhwOwotCQlfcmV0dXJuID0gcmV0OwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEludGVnZXIgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEludCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIGludCB0eXBlKCkgewotCQlyZXR1cm4gX3R5cGU7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZWZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJcmV0dXJuIF92YXJfZXhwcl9wYWlycy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBFeHByIGV4cHIoKSB7Ci0JCXJldHVybiBfcmV0dXJuOwotCX0KLQotCS8qKgotCSAqIFNldCBuZXh0IGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIEV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2V4cHIoRXhwciBlKSB7Ci0JCV9yZXR1cm4gPSBlOwotCX0KLQotCS8vIHVzZWQgZm9yIG5vcm1hbGl6YXRpb24uLi4gYmFzaWNhbGx5IGp1c3Qga2VlcCBhICJzaW1wbGUgZm9yIi4uLiBubwotCS8vIHBhaXJzLi4uIGNvbGxlY3Rpb24gd2lsbCBhbHdheXMgaGF2ZSAxIGVsZW1lbnQKLQkvKioKLQkgKiBOb3JtYWxpemF0aW9uIG9mIGV4cHJlc3Npb24gcGFpcnMuCi0JICovCi0JcHVibGljIHZvaWQgdHJ1bmNhdGVfcGFpcnMoKSB7Ci0JCWJvb2xlYW4gZmlyc3QgPSB0cnVlOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IF92YXJfZXhwcl9wYWlycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCWkubmV4dCgpOwotCQkJaWYgKCFmaXJzdCkKLQkJCQlpLnJlbW92ZSgpOwotCi0JCQlmaXJzdCA9IGZhbHNlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgQ29sbGVjdGlvbiBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBFeHByZXNzaW9uIHBhaXJzLgotCSAqLwotCXB1YmxpYyBDb2xsZWN0aW9uIHZlX3BhaXJzKCkgewotCQlyZXR1cm4gX3Zhcl9leHByX3BhaXJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1JhbmdlRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUmFuZ2VFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4OTZiY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUmFuZ2VFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFJhbmdlIGV4cHJlc3Npb25zLgotICovCi1wdWJsaWMgY2xhc3MgUmFuZ2VFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFJhbmdlRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgbGVmdCBleHByZXNzaW9uLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICByaWdodCBleHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyBSYW5nZUV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUmV2ZXJzZVN0ZXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1JldmVyc2VTdGVwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYzY4ZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUmV2ZXJzZVN0ZXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIFJldmVyc2Ugc3RlcHBpbmcgc3VwcG9ydCBmb3IgU3RlcCBvcGVyYXRpb25zLgotICovCi1wdWJsaWMgY2xhc3MgUmV2ZXJzZVN0ZXAgZXh0ZW5kcyBTdGVwIHsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFBBUkVOVC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJFTlQgPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgQU5DRVNUT1IuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5DRVNUT1IgPSAxOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUFJFQ0VESU5HX1NJQkxJTkcuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJFQ0VESU5HX1NJQkxJTkcgPSAyOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUFJFQ0VESU5HLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSRUNFRElORyA9IDM7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBBTkNFU1RPUl9PUl9TRUxGLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFOQ0VTVE9SX09SX1NFTEYgPSA0OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRE9URE9ULgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPVERPVCA9IDU7Ci0KLQlwcml2YXRlIGludCBfYXhpczsKLQlwcml2YXRlIFJldmVyc2VBeGlzIF9pdGVyYXRvcjsKLQotCXByaXZhdGUgdm9pZCB1cGRhdGVfaXRlcmF0b3IoKSB7Ci0JCXN3aXRjaCAoX2F4aXMpIHsKLQkJY2FzZSBQQVJFTlQ6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgUGFyZW50QXhpcygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQU5DRVNUT1I6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgQW5jZXN0b3JBeGlzKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBSRUNFRElOR19TSUJMSU5HOgotCQkJX2l0ZXJhdG9yID0gbmV3IFByZWNlZGluZ1NpYmxpbmdBeGlzKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBSRUNFRElORzoKLQkJCV9pdGVyYXRvciA9IG5ldyBQcmVjZWRpbmdBeGlzKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIEFOQ0VTVE9SX09SX1NFTEY6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgQW5jZXN0b3JPclNlbGZBeGlzKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIERPVERPVDoKLQkJCV9pdGVyYXRvciA9IG51bGw7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFJldmVyc2VTdGVwLgotCSAqIAotCSAqIEBwYXJhbSBheGlzCi0JICogICAgICAgICAgICBBeGlzIG51bWJlci4KLQkgKiBAcGFyYW0gbm9kZV90ZXN0Ci0JICogICAgICAgICAgICBOb2RlIHRlc3QuCi0JICovCi0JcHVibGljIFJldmVyc2VTdGVwKGludCBheGlzLCBOb2RlVGVzdCBub2RlX3Rlc3QpIHsKLQkJc3VwZXIobm9kZV90ZXN0KTsKLQotCQlfYXhpcyA9IGF4aXM7Ci0JCXVwZGF0ZV9pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEF4aXMgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEF4aXMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBpbnQgYXhpcygpIHsKLQkJcmV0dXJuIF9heGlzOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJldmVyc2VBeGlzIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX2l0ZXJhdG9yOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NjaGVtYUF0dHJUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TY2hlbWFBdHRyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTg0Nzc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NjaGVtYUF0dHJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFNjaGVtYSBBdHRyaWJ1dGUgdGVzdC4KLSAqLwotcHVibGljIGNsYXNzIFNjaGVtYUF0dHJUZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCXByaXZhdGUgUU5hbWUgX2FyZzsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTY2hlbWFBdHRyVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBRTmFtZSBhcmd1bWVudC4KLQkgKi8KLQlwdWJsaWMgU2NoZW1hQXR0clRlc3QoUU5hbWUgYXJnKSB7Ci0JCV9hcmcgPSBhcmc7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgYXJnKCkgewotCQlyZXR1cm4gX2FyZzsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX2FyZzsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQ2xhc3MgZ2V0WERNQ2xhc3NUeXBlKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NjaGVtYUVsZW1UZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TY2hlbWFFbGVtVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjlhOWZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NjaGVtYUVsZW1UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFNjaGVtYSBFbGVtZW50IFRlc3QuCi0gKi8KLXB1YmxpYyBjbGFzcyBTY2hlbWFFbGVtVGVzdCBleHRlbmRzIEtpbmRUZXN0IHsKLQlwcml2YXRlIFFOYW1lIF9hcmc7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU2NoZW1hRWxlbVRlc3QuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUU5hbWUgYXJndW1lbnQuCi0JICovCi0JcHVibGljIFNjaGVtYUVsZW1UZXN0KFFOYW1lIGFyZykgewotCQlfYXJnID0gYXJnOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFFOYW1lIG5hbWUoKSB7Ci0JCXJldHVybiBfYXJnOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlUeXBlIGNyZWF0ZVRlc3RUeXBlKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNXaWxkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NlcXVlbmNlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2VxdWVuY2VUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZGYwOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2VxdWVuY2VUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFNlcXVlbmNlIHR5cGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXF1ZW5jZVR5cGUgZXh0ZW5kcyBYUGF0aE5vZGUgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRU1QVFkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU1QVFkgPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9ORS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05FID0gMTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFFVRVNUSU9OLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVNUSU9OID0gMjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFNUQVIuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBUiA9IDM7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBQTFVTLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBMVVMgPSA0OwotCi0JcHJpdmF0ZSBpbnQgX29jYzsKLQlwcml2YXRlIEl0ZW1UeXBlIF9pdDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTZXF1ZW5jZVR5cGUuCi0JICogCi0JICogQHBhcmFtIG9jYwotCSAqICAgICAgICAgICAgT2NjdXJlbmNlLgotCSAqIEBwYXJhbSBpdAotCSAqICAgICAgICAgICAgSXRlbSB0eXBlLgotCSAqLwotCXB1YmxpYyBTZXF1ZW5jZVR5cGUoaW50IG9jYywgSXRlbVR5cGUgaXQpIHsKLQkJX29jYyA9IG9jYzsKLQkJX2l0ID0gaXQ7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogR2V0IG9jY3VyZW5jZSBvZiBpdGVtLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IGZyb20gSW50IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgaW50IG9jY3VycmVuY2UoKSB7Ci0JCXJldHVybiBfb2NjOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZW1UeXBlIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVtVHlwZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEl0ZW1UeXBlIGl0ZW1fdHlwZSgpIHsKLQkJcmV0dXJuIF9pdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TaW5nbGVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TaW5nbGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MWQ1YzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2luZ2xlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFNpbmdsZSB0eXBlcy4KLSAqLwotcHVibGljIGNsYXNzIFNpbmdsZVR5cGUgZXh0ZW5kcyBYUGF0aE5vZGUgewotCi0JcHJpdmF0ZSBRTmFtZSBfdHlwZTsKLQlwcml2YXRlIGJvb2xlYW4gX3FtYXJrOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNpbmdsZVR5cGUuCi0JICogCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFFOYW1lIHR5cGUuCi0JICogQHBhcmFtIHFtYXJrCi0JICogICAgICAgICAgICBvcHRpb25hbCB0eXBlPyAodHJ1ZS9mYWxzZSkuCi0JICovCi0JcHVibGljIFNpbmdsZVR5cGUoUU5hbWUgdHlwZSwgYm9vbGVhbiBxbWFyaykgewotCQlfdHlwZSA9IHR5cGU7Ci0JCV9xbWFyayA9IHFtYXJrOwotCX0KLQotCS8qKgotCSAqIERlZmF1bHQgQ29uc3RydWN0b3IgZm9yIFNpbmdsZVR5cGUuCi0JICovCi0JcHVibGljIFNpbmdsZVR5cGUoUU5hbWUgdHlwZSkgewotCQl0aGlzKHR5cGUsIGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgb3B0aW9uYWwgdHlwZS4KLQkgKiAKLQkgKiBAcmV0dXJuIG9wdGlvbmFsIHR5cGUgdmFsdWUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gcW1hcmsoKSB7Ci0JCXJldHVybiBfcW1hcms7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgdHlwZSgpIHsKLQkJcmV0dXJuIF90eXBlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0ZXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0ZXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxNjNmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdGVwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFN0ZXAgb3BlcmF0aW9ucy4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFN0ZXAgZXh0ZW5kcyBYUGF0aE5vZGUgewotCi0JcHJpdmF0ZSBOb2RlVGVzdCBfbm9kZV90ZXN0OwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFN0ZXAuCi0JICogCi0JICogQHBhcmFtIG5vZGVfdGVzdAotCSAqICAgICAgICAgICAgTm9kZXMgZm9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgU3RlcChOb2RlVGVzdCBub2RlX3Rlc3QpIHsKLQkJX25vZGVfdGVzdCA9IG5vZGVfdGVzdDsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBOb2RlVGVzdCBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgTm9kZVRlc3Qgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBOb2RlVGVzdCBub2RlX3Rlc3QoKSB7Ci0JCXJldHVybiBfbm9kZV90ZXN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0ZXBFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdGVwRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmRiMDVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0ZXBFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFN0ZXAgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGVwRXhwciBleHRlbmRzIEV4cHIgewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3RyaW5nTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3RyaW5nTGl0ZXJhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDYzNzNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0cmluZ0xpdGVyYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBUaGUgdmFsdWUgb2YgYSBzdHJpbmcgbGl0ZXJhbCBpcyBhbiBhdG9taWMgdmFsdWUgd2hvc2UgdHlwZSBpcyB4czpzdHJpbmcgYW5kCi0gKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc3RyaW5nIGRlbm90ZWQgYnkgdGhlIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgZGVsaW1pdGluZwotICogYXBvc3Ryb3BoZXMgb3IgcXVvdGF0aW9uIG1hcmtzLiBJZiB0aGUgbGl0ZXJhbCBpcyBkZWxpbWl0ZWQgYnkgYXBvc3Ryb3BoZXMsCi0gKiB0d28gYWRqYWNlbnQgYXBvc3Ryb3BoZXMgd2l0aGluIHRoZSBsaXRlcmFsIGFyZSBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZQotICogYXBvc3Ryb3BoZS4gU2ltaWxhcmx5LCBpZiB0aGUgbGl0ZXJhbCBpcyBkZWxpbWl0ZWQgYnkgcXVvdGF0aW9uIG1hcmtzLCB0d28KLSAqIGFkamFjZW50IHF1b3RhdGlvbiBtYXJrcyB3aXRoaW4gdGhlIGxpdGVyYWwgYXJlIGludGVycHJldGVkIGFzIG9uZSBxdW90YXRpb24KLSAqIG1hcmsKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgU3RyaW5nTGl0ZXJhbCBleHRlbmRzIExpdGVyYWwgewotCXByaXZhdGUgWFNTdHJpbmcgX3ZhbHVlOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFN0cmluZ0xpdGVyYWwKLQkgKiAKLQkgKiBAcGFyYW0gdmFsdWUKLQkgKiAgICAgICAgICAgIHN0cmluZyB2YWx1ZQotCSAqLwotCXB1YmxpYyBTdHJpbmdMaXRlcmFsKFN0cmluZyB2YWx1ZSkgewotCQlfdmFsdWUgPSBuZXcgWFNTdHJpbmcodmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gc3RyaW5nIHZhbHVlCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmcoKSB7Ci0JCXJldHVybiBfdmFsdWUudmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHhzOnN0cmluZyB2YWx1ZQotCSAqLwotCXB1YmxpYyBYU1N0cmluZyB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdWJFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdWJFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNWE1NDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3ViRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBTdWJ0cmFjdGlvbiBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBTdWJFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFN1YkV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGxlZnQgaW5wdXQuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIHJpZ2h0IGlucHV0LgotCSAqLwotCXB1YmxpYyBTdWJFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1RleHRUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9UZXh0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWUxZjg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1RleHRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuVGV4dFR5cGU7Ci0KLS8qKgotICogQ2xhc3MgdG8gbWF0Y2ggYW55IHRleHQgbm9kZS4KLSAqLwotcHVibGljIGNsYXNzIFRleHRUZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlUeXBlIGNyZWF0ZVRlc3RUeXBlKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQ2xhc3MgZ2V0WERNQ2xhc3NUeXBlKCkgewotCQlyZXR1cm4gVGV4dFR5cGUuY2xhc3M7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9UcmVhdEFzRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVHJlYXRBc0V4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUwODNiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9UcmVhdEFzRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBUcmVhdCBvcGVyYXRpb24uIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgb3BlcmFuZCwKLSAqIHJhdGhlciBpdCBlbnN1ZXMgdGhlIG9wZXJhbmQgaGFzIGEgY29ycmVjdCB0eXBlIGF0IGV2YWx1YXRpb24gdGltZS4KLSAqLwotcHVibGljIGNsYXNzIFRyZWF0QXNFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRyZWF0QXNFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBTZXF1ZW5jZVR5cGUgdG8gdHJlYXQgYXMuCi0JICovCi0JcHVibGljIFRyZWF0QXNFeHByKEV4cHIgbCwgU2VxdWVuY2VUeXBlIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVW5FeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9VbkV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczZDg4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9VbkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgVW5hcnkgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVbkV4cHIgZXh0ZW5kcyBFeHByIHsKLQlwcml2YXRlIEV4cHIgX2FyZzsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVbkV4cHIuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgVW5FeHByKEV4cHIgYXJnKSB7Ci0JCV9hcmcgPSBhcmc7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEV4cHIgYXJnKCkgewotCQlyZXR1cm4gX2FyZzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9VbmlvbkV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1VuaW9uRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWRjODkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1VuaW9uRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBUaGUgdW5pb24gY2xhc3MgdGFrZXMgdHdvIG5vZGUgc2VxdWVuY2VzIGFzIG9wZXJhbmRzIGFuZCByZXR1cm4gYSBzZXF1ZW5jZQotICogY29udGFpbmluZyBhbGwgdGhlIG5vZGVzIHRoYXQgb2NjdXIgaW4gZWl0aGVyIG9mIHRoZSBvcGVyYW5kcy4KLSAqLwotcHVibGljIGNsYXNzIFVuaW9uRXhwciBleHRlbmRzIEJpbkV4cHIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVuaW9uRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIHVucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBVbmlvbkV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVmFyRXhwclBhaXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ZhckV4cHJQYWlyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZWIzMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVmFyRXhwclBhaXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgVmFyaWFibGUgRXhwcmVzc2lvbiBQYWlycy4KLSAqLwotcHVibGljIGNsYXNzIFZhckV4cHJQYWlyIHsKLQlwcml2YXRlIFFOYW1lIF92YXI7Ci0JcHJpdmF0ZSBFeHByIF9leHByOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFZhckV4cHJQYWlyLgotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIFFOYW1lIHZhcmlhYmxlLgotCSAqIEBwYXJhbSBleHByCi0JICogICAgICAgICAgICBFeHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyBWYXJFeHByUGFpcihRTmFtZSB2YXIsIEV4cHIgZXhwcikgewotCQlfdmFyID0gdmFyOwotCQlfZXhwciA9IGV4cHI7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgdmFybmFtZSgpIHsKLQkJcmV0dXJuIF92YXI7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEV4cHIgZXhwcigpIHsKLQkJcmV0dXJuIF9leHByOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ZhclJlZi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVmFyUmVmLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDIyZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVmFyUmVmLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgVmFyaWFibGUgUmVmZXJlbmNlLiBBIFFOYW1lIHByZWNlZGVkIGJ5IGEgJC1zaWduIGlzIGEgdmFyaWFibGUKLSAqIHJlZmVyZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIFZhclJlZiBleHRlbmRzIFByaW1hcnlFeHByIHsKLQlwcml2YXRlIFFOYW1lIF92YXJuYW1lOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFZhclJlZi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICovCi0JcHVibGljIFZhclJlZihRTmFtZSBuYW1lKSB7Ci0JCV92YXJuYW1lID0gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX3Zhcm5hbWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvWFBhdGhFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIyOWQwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aEV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFBhdGggZXhwcmVzc2lvbiB3YWxrcyB0cmllcyB0byB3YWxrIHRoZSBwYXRoIHNwZWNpZmllZCBpbiBpdHMgYXJndW1lbnQKLSAqLwotcHVibGljIGNsYXNzIFhQYXRoRXhwciBleHRlbmRzIEV4cHIgewotCXByaXZhdGUgaW50IF9zbGFzaGVzOwotCXByaXZhdGUgU3RlcEV4cHIgX2V4cHI7Ci0KLQkvLyBzaW5nbGUgbGlua2VkIGxpc3QKLQlwcml2YXRlIFhQYXRoRXhwciBfbmV4dDsKLQotCS8qKgotCSAqIEBwYXJhbSBzbGFzaGVzCi0JICogICAgICAgICAgICBpcyBjb3BpZWQgdG8gX3NsYXNoZXMKLQkgKiBAcGFyYW0gZXhwcgotCSAqICAgICAgICAgICAgaXMgY29waWVkIHRvIF9leHByIF9uZXh0IGlzIG1hZGUgbnVsbCBhcyBhIHJlc3VsdC4KLQkgKi8KLQlwdWJsaWMgWFBhdGhFeHByKGludCBzbGFzaGVzLCBTdGVwRXhwciBleHByKSB7Ci0JCV9zbGFzaGVzID0gc2xhc2hlczsKLQkJX2V4cHIgPSBleHByOwotCQlfbmV4dCA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogQWRkIHRvIHRhaWwgb2YgcGF0aAotCSAqLwotCS8vIFhYWDoga2VlcCByZWYgdG8gbGFzdAotCXB1YmxpYyB2b2lkIGFkZF90YWlsKGludCBzbGFzaGVzLCBTdGVwRXhwciBleHByKSB7Ci0JCVhQYXRoRXhwciBsYXN0ID0gdGhpczsKLQkJWFBhdGhFeHByIG5leHQgPSBfbmV4dDsKLQotCQl3aGlsZSAobmV4dCAhPSBudWxsKSB7Ci0JCQlsYXN0ID0gbmV4dDsKLQkJCW5leHQgPSBsYXN0Lm5leHQoKTsKLQkJfQotCi0JCVhQYXRoRXhwciBpdGVtID0gbmV3IFhQYXRoRXhwcihzbGFzaGVzLCBleHByKTsKLQkJbGFzdC5zZXRfbmV4dChpdGVtKTsKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjb3VudAotCSAqICAgICAgICAgICAgaXMgY29waWVkIHRvIF9zbGFzaGVzCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3NsYXNoZXMoaW50IGNvdW50KSB7Ci0JCV9zbGFzaGVzID0gY291bnQ7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBYUGF0aCBleHByZXNzaW9uIF9uZXh0Ci0JICovCi0JcHVibGljIFhQYXRoRXhwciBuZXh0KCkgewotCQlyZXR1cm4gX25leHQ7Ci0JfQotCi0JLyoqCi0JICogYW4gWFBhdGggZXhwcmVzc2lvbiwgbiBpcyBjb3BpZWQgdG8gX25leHQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfbmV4dChYUGF0aEV4cHIgbikgewotCQlfbmV4dCA9IG47Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBTdGVwIGV4cHJlc3Npb24gX2V4cHIKLQkgKi8KLQlwdWJsaWMgU3RlcEV4cHIgZXhwcigpIHsKLQkJcmV0dXJuIF9leHByOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gaW50IF9zbGFzaGVzCi0JICovCi0JcHVibGljIGludCBzbGFzaGVzKCkgewotCQlyZXR1cm4gX3NsYXNoZXM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aE5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1hQYXRoTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjMxYWZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1hQYXRoTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgYSBYUGF0aE5vZGUgb2JqZWN0LgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFBhdGhOb2RlIHsKLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3Igdik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1hQYXRoVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjEzYzYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1hQYXRoVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotCi0vKioKLSAqIFZpc2l0b3IgY2xhc3MgZm9yIFhQYXRoIGV4cHJlc3Npb25zLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFhQYXRoVmlzaXRvciB7Ci0JLyoqCi0JICogVmlzaXQgWFBhdGguCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aCB4cCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBGb3JFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRm9yRXhwciBmZXgpOwotCi0JLyoqCi0JICogVmlzaXQgUXVhbnRpZmllZEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChRdWFudGlmaWVkRXhwciBxZXgpOwotCi0JLyoqCi0JICogVmlzaXQgSWZFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSWZFeHByIGlmZXgpOwotCi0JLyoqCi0JICogVmlzaXQgT3JFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoT3JFeHByIG9yZXgpOwotCi0JLyoqCi0JICogVmlzaXQgQW5kRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFuZEV4cHIgYW5kZXgpOwotCi0JLyoqCi0JICogVmlzaXQgQ21wRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENtcEV4cHIgY21wZXgpOwotCi0JLyoqCi0JICogVmlzaXQgUmFuZ2VFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUmFuZ2VFeHByIHJleCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBBZGRFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQWRkRXhwciBhZGRleCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBTdWJFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3ViRXhwciBzdWJleCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBNdWxFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTXVsRXhwciBtdWxleCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBEaXZFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRGl2RXhwciBtdWxleCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBJRGl2RXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KElEaXZFeHByIG11bGV4KTsKLQotCS8qKgotCSAqIFZpc2l0IE1vZEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNb2RFeHByIG11bGV4KTsKLQotCS8qKgotCSAqIFZpc2l0IFVuaW9uRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFVuaW9uRXhwciB1bmV4KTsKLQotCS8qKgotCSAqIFZpc2l0IFBpcGVFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGlwZUV4cHIgcGlwZXgpOwotCi0JLyoqCi0JICogVmlzaXQgSW50ZXJzZWN0RXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEludGVyc2VjdEV4cHIgaWV4cHIpOwotCi0JLyoqCi0JICogVmlzaXQgRXhjZXB0RXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEV4Y2VwdEV4cHIgZWV4cHIpOwotCi0JLyoqCi0JICogVmlzaXQgSW5zdE9mRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEluc3RPZkV4cHIgaW9leHApOwotCi0JLyoqCi0JICogVmlzaXQgVHJlYXRBc0V4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChUcmVhdEFzRXhwciB0YWV4cCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBDYXN0YWJsZUV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDYXN0YWJsZUV4cHIgY2V4cCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBDYXN0RXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENhc3RFeHByIGNleHApOwotCi0JLyoqCi0JICogVmlzaXQgTWludXNFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTWludXNFeHByIGUpOwotCi0JLyoqCi0JICogVmlzaXQgUGx1c0V4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQbHVzRXhwciBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFhQYXRoRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFhQYXRoRXhwciBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEZvcndhcmRTdGVwLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRm9yd2FyZFN0ZXAgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBSZXZlcnNlU3RlcC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFJldmVyc2VTdGVwIGUpOwotCi0JLyoqCi0JICogVmlzaXQgTmFtZVRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChOYW1lVGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFZhclJlZi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFZhclJlZiBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFN0cmluZ0xpdGVyYWwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTdHJpbmdMaXRlcmFsIGUpOwotCi0JLyoqCi0JICogVmlzaXQgSW50ZWdlckxpdGVyYWwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlZ2VyTGl0ZXJhbCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IERvdWJsZUxpdGVyYWwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEb3VibGVMaXRlcmFsIGUpOwotCi0JLyoqCi0JICogVmlzaXQgRGVjaW1hbExpdGVyYWwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEZWNpbWFsTGl0ZXJhbCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFBhckV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQYXJFeHByIGUpOwotCi0JLyoqCi0JICogVmlzaXQgQ250eEl0ZW1FeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ250eEl0ZW1FeHByIGUpOwotCi0JLyoqCi0JICogVmlzaXQgRnVuY3Rpb25DYWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRnVuY3Rpb25DYWxsIGUpOwotCi0JLyoqCi0JICogVmlzaXQgU2luZ2xlVHlwZS4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNpbmdsZVR5cGUgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBTZXF1ZW5jZVR5cGUuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTZXF1ZW5jZVR5cGUgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBJdGVtVHlwZS4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEl0ZW1UeXBlIGUpOwotCi0JLyoqCi0JICogVmlzaXQgQW55S2luZFRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBbnlLaW5kVGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IERvY3VtZW50VGVzdC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERvY3VtZW50VGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFRleHRUZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVGV4dFRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBDb21tZW50VGVzdC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENvbW1lbnRUZXN0IGUpOwotCi0JLyoqCi0JICogVmlzaXQgUElUZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUElUZXN0IGUpOwotCi0JLyoqCi0JICogVmlzaXQgQXR0cmlidXRlVGVzdC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF0dHJpYnV0ZVRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBTY2hlbWFBdHRyVGVzdC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNjaGVtYUF0dHJUZXN0IGUpOwotCi0JLyoqCi0JICogVmlzaXQgRWxlbWVudFRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChFbGVtZW50VGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFNjaGVtRWxlbVRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTY2hlbWFFbGVtVGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEF4aXNTdGVwLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQXhpc1N0ZXAgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBGaWx0ZXJFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRmlsdGVyRXhwciBlKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDA2YmY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI5Njg4MiAtIGZpeGVkIGZ1bmN0aW9uIHRoYXQgd291bGQgYWx3YXlzIHJldHVybiBmYWxzZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW50eXBlZEF0b21pYzsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCXB1YmxpYyBBYnN0cmFjdENvbGxhdGlvbkVxdWFsRnVuY3Rpb24oUU5hbWUgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCXN1cGVyKG5hbWUsIGFyaXR5KTsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViCi0JfQotCi0JcHVibGljIEFic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgbWluX2FyaXR5LAotCQkJaW50IG1heF9hcml0eSkgewotCQlzdXBlcihuYW1lLCBtaW5fYXJpdHksIG1heF9hcml0eSk7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaGFzVmFsdWUoQW55VHlwZSBpdGVtYSwgQW55VHlwZSBpdGVtYiwgRHluYW1pY0NvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTU3RyaW5nIGl0ZW1TdHIgPSBuZXcgWFNTdHJpbmcoaXRlbWEuc3RyaW5nX3ZhbHVlKCkpOwotCQlpZiAoaXNCb29sZWFuKGl0ZW1hLCBpdGVtYikpIHsKLQkJCVhTQm9vbGVhbiBib29sYXQgPSAoWFNCb29sZWFuKSBpdGVtYTsKLQkJCWlmIChib29sYXQuZXEoaXRlbWIsIGNvbnRleHQpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoaXNOdW1lcmljKGl0ZW1hLCBpdGVtYikpIHsKLQkJCU51bWVyaWNUeXBlIG51bWVyaWNhdCA9IChOdW1lcmljVHlwZSkgaXRlbWE7Ci0JCQlpZiAobnVtZXJpY2F0LmVxKGl0ZW1iLCBjb250ZXh0KSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJaWYgKGlzRHVyYXRpb24oaXRlbWEsIGl0ZW1iKSkgewotCQkJWFNEdXJhdGlvbiBkdXJhdCA9IChYU0R1cmF0aW9uKSBpdGVtYTsKLQkJCWlmIChkdXJhdC5lcShpdGVtYiwgY29udGV4dCkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCWlmIChuZWVkc1N0cmluZ0NvbXBhcmlzb24oaXRlbWEsIGl0ZW1iKSkgewotCQkJWFNTdHJpbmcgeHN0cjEgPSBuZXcgWFNTdHJpbmcoaXRlbWEuc3RyaW5nX3ZhbHVlKCkpOwotCQkJaWYgKEZuQ29tcGFyZS5jb21wYXJlX3N0cmluZyhjb2xsYXRpb25VUkksIHhzdHIxLCBpdGVtU3RyLAotCQkJCQljb250ZXh0KS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGhhc1ZhbHVlKFJlc3VsdFNlcXVlbmNlIHJzLCBBbnlBdG9taWNUeXBlIGl0ZW0sCi0JCQlEeW5hbWljQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgY29sbGF0aW9uVVJJKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNTdHJpbmcgaXRlbVN0ciA9IG5ldyBYU1N0cmluZyhpdGVtLnN0cmluZ192YWx1ZSgpKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmICghKGF0IGluc3RhbmNlb2YgQ21wRXEpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoaXNCb29sZWFuKGl0ZW0sIGF0KSkgewotCQkJCVhTQm9vbGVhbiBib29sYXQgPSAoWFNCb29sZWFuKSBhdDsKLQkJCQlpZiAoYm9vbGF0LmVxKGl0ZW0sIGNvbnRleHQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGlzTnVtZXJpYyhpdGVtLCBhdCkpIHsKLQkJCQlOdW1lcmljVHlwZSBudW1lcmljYXQgPSAoTnVtZXJpY1R5cGUpIGF0OwotCQkJCWlmIChudW1lcmljYXQuZXEoaXRlbSwgY29udGV4dCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoaXNEdXJhdGlvbihpdGVtLCBhdCkpIHsKLQkJCQlYU0R1cmF0aW9uIGR1cmF0ID0gKFhTRHVyYXRpb24pIGF0OwotCQkJCWlmIChkdXJhdC5lcShpdGVtLCBjb250ZXh0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChuZWVkc1N0cmluZ0NvbXBhcmlzb24oaXRlbSwgYXQpKSB7Ci0JCQkJWFNTdHJpbmcgeHN0cjEgPSBuZXcgWFNTdHJpbmcoYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCWlmIChGbkNvbXBhcmUuY29tcGFyZV9zdHJpbmcoY29sbGF0aW9uVVJJLCB4c3RyMSwgaXRlbVN0ciwKLQkJCQkJCWNvbnRleHQpLmVxdWFscyhCaWdJbnRlZ2VyLlpFUk8pKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzRHVyYXRpb24oQW55QXRvbWljVHlwZSBpdGVtLCBBbnlUeXBlIGF0KSB7Ci0JCXJldHVybiBhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24gJiYgaXRlbSBpbnN0YW5jZW9mIFhTRHVyYXRpb247Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzQm9vbGVhbihBbnlBdG9taWNUeXBlIGl0ZW0sIEFueVR5cGUgYXQpIHsKLQkJcmV0dXJuIGF0IGluc3RhbmNlb2YgWFNCb29sZWFuICYmIGl0ZW0gaW5zdGFuY2VvZiBYU0Jvb2xlYW47Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzTnVtZXJpYyhBbnlBdG9taWNUeXBlIGl0ZW0sIEFueVR5cGUgYXQpIHsKLQkJcmV0dXJuIGF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgJiYgaXRlbSBpbnN0YW5jZW9mIE51bWVyaWNUeXBlOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBuZWVkc1N0cmluZ0NvbXBhcmlzb24oQW55QXRvbWljVHlwZSBpdGVtLAotCQkJQW55VHlwZSBhdCkgewotCQlBbnlUeXBlIGFueUl0ZW0gPSAoQW55VHlwZSkgaXRlbTsKLQkJcmV0dXJuIG5lZWRzU3RyaW5nQ29tcGFyaXNvbihhbnlJdGVtLCBhdCk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzRHVyYXRpb24oQW55VHlwZSBpdGVtLCBBbnlUeXBlIGF0KSB7Ci0JCXJldHVybiBhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24gJiYgaXRlbSBpbnN0YW5jZW9mIFhTRHVyYXRpb247Ci0JfQotCQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0RhdGUoQW55VHlwZSBpdGVtLCBBbnlUeXBlIGF0KSB7Ci0JCXJldHVybiBhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUgJiYgaXRlbSBpbnN0YW5jZW9mIFhTRGF0ZVRpbWU7Ci0JfQotCQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzQm9vbGVhbihBbnlUeXBlIGNtcHR5cGUsIEFueVR5cGUgYXQpIHsKLQkJcmV0dXJuIGF0IGluc3RhbmNlb2YgWFNCb29sZWFuICYmIGNtcHR5cGUgaW5zdGFuY2VvZiBYU0Jvb2xlYW47Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzTnVtZXJpYyhBbnlUeXBlIGl0ZW0sIEFueVR5cGUgYXQpIHsKLQkJcmV0dXJuIGF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgJiYgaXRlbSBpbnN0YW5jZW9mIE51bWVyaWNUeXBlOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBuZWVkc1N0cmluZ0NvbXBhcmlzb24oQW55VHlwZSBpdGVtLCBBbnlUeXBlIGF0KSB7Ci0JCWlmIChpdGVtIGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpIHsKLQkJCWlmIChhdCBpbnN0YW5jZW9mIFhTRmxvYXQpIHsKLQkJCQlYU0Zsb2F0IGYgPSAoWFNGbG9hdCkgYXQ7Ci0JCQkJaWYgKGYubmFuKCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlpZiAoYXQgaW5zdGFuY2VvZiBYU0RvdWJsZSkgewotCQkJCVhTRG91YmxlIGQgPSAoWFNEb3VibGUpIGF0OwotCQkJCWlmIChkLm5hbigpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTU3RyaW5nKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0UmVnRXhGdW5jdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9BYnN0cmFjdFJlZ0V4RnVuY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiM2JiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0UmVnRXhGdW5jdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UmVnRXhGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyB2YWxpZGZsYWdzID0gInNtaXgiOwotCi0JcHVibGljIEFic3RyYWN0UmVnRXhGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJc3VwZXIobmFtZSwgYXJpdHkpOwotCX0KLQkKLQlwdWJsaWMgQWJzdHJhY3RSZWdFeEZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBtaW5fYXJpdHksIGludCBtYXhfYXJpdHkpIHsKLQkJc3VwZXIobmFtZSwgbWluX2FyaXR5LCBtYXhfYXJpdHkpOwotCX0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gbWF0Y2hlcyhTdHJpbmcgcGF0dGVybiwgU3RyaW5nIGZsYWdzLCBTdHJpbmcgc3JjKSB7Ci0JCWJvb2xlYW4gZm5kID0gZmFsc2U7Ci0JCWlmIChwYXR0ZXJuLmNvbnRhaW5zKCItWyIpKSB7Ci0JCQlwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKCItWyIsICImJlteIik7Ci0JCX0KLQkJTWF0Y2hlciBtID0gY29tcGlsZUFuZEV4ZWN1dGUocGF0dGVybiwgZmxhZ3MsIHNyYyk7Ci0JCXdoaWxlIChtLmZpbmQoKSkgewotCQkJZm5kID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZm5kOwotCX0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIE1hdGNoZXIgcmVnZXgoU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBmbGFncywgU3RyaW5nIHNyYykgewotCQlNYXRjaGVyIG1hdGNoZXIgPSBjb21waWxlQW5kRXhlY3V0ZShwYXR0ZXJuLCBmbGFncywgc3JjKTsKLQkJcmV0dXJuIG1hdGNoZXI7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIE1hdGNoZXIgY29tcGlsZUFuZEV4ZWN1dGUoU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBmbGFncywgU3RyaW5nIHNyYykgewotCQlpbnQgZmxhZyA9IFBhdHRlcm4uVU5JWF9MSU5FUzsKLQkJaWYgKGZsYWdzICE9IG51bGwpIHsKLQkJCWlmIChmbGFncy5pbmRleE9mKCJtIikgPj0gMCkgewotCQkJCWZsYWcgPSBmbGFnIHwgUGF0dGVybi5NVUxUSUxJTkU7Ci0JCQl9Ci0JCQlpZiAoZmxhZ3MuaW5kZXhPZigicyIpID49IDApIHsKLQkJCQlmbGFnID0gZmxhZyB8IFBhdHRlcm4uRE9UQUxMOwotCQkJfQotCQkJaWYgKGZsYWdzLmluZGV4T2YoImkiKSA+PSAwKSB7Ci0JCQkJZmxhZyA9IGZsYWcgfCBQYXR0ZXJuLkNBU0VfSU5TRU5TSVRJVkU7Ci0JCQl9Ci0JCQkKLQkJCWlmIChmbGFncy5pbmRleE9mKCJ4IikgPj0gMCkgewotCQkJCWZsYWcgPSBmbGFnIHwgUGF0dGVybi5DT01NRU5UUzsKLQkJCX0KLQkJfQotCQkKLQkJUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKHBhdHRlcm4sIGZsYWcpOwotCQlyZXR1cm4gcC5tYXRjaGVyKHNyYyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0VVJJRnVuY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQWJzdHJhY3RVUklGdW5jdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzY5OTBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQWJzdHJhY3RVUklGdW5jdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjYyNzY1IC0gcmVuYW1lZCB0byBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MzE5IC0gZml4IFVURi04IGVzY2FwaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VVJJRnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBDaGFyc2V0IFVURl84ID0gQ2hhcnNldC5mb3JOYW1lKCJVVEYtOCIpOwotCQotCXN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBuZWVkc19lc2NhcGUoYnl0ZSB4LCBib29sZWFuIGVzY2FwZV9kZWxpbWl0ZXJzLCBib29sZWFuIGVzY2FwZV9zcGFjZSkgewotCQkKLQkJLy8gVGhlc2UgYXJlIGlkZW50aWZpZWQgYXMgInVucmVzZXJ2ZWQiIGJ5IFtSRkMgMzk4Nl06IAotCQlpZiAoJ0EnIDw9IHggJiYgeCA8PSAnWicpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmICgnYScgPD0geCAmJiB4IDw9ICd6JykKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKCcwJyA8PSB4ICYmIHggPD0gJzknKQotCQkJcmV0dXJuIGZhbHNlOwotCQkKLQkJc3dpdGNoICh4KSB7Ci0JCS8vIFRoZXNlIGFyZSBpZGVudGlmaWVkIGFzICJ1bnJlc2VydmVkIiBieSBbUkZDIDM5ODZdOiAKLQkJY2FzZSAnLSc6Ci0JCWNhc2UgJ18nOgotCQljYXNlICcuJzoKLQkJY2FzZSAnfic6Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCi0JCS8vIFRoZXNlIGFyZSBVUkkvSVJJIGRlbGltaXRlcnMgCQotCQljYXNlICcoJzoKLQkJY2FzZSAnKSc6Ci0JCWNhc2UgJ1wnJzoKLQkJY2FzZSAnKic6Ci0JCWNhc2UgJyEnOgotCQljYXNlICcjJzoKLQkJY2FzZSAnJSc6Ci0JCWNhc2UgJzsnOgotCQljYXNlICcvJzoKLQkJY2FzZSAnPyc6Ci0JCWNhc2UgJzonOgotCQljYXNlICdAJzoKLQkJY2FzZSAnJic6Ci0JCWNhc2UgJz0nOgotCQljYXNlICcrJzoKLQkJY2FzZSAnJCc6Ci0JCWNhc2UgJywnOgotCQljYXNlICdbJzoKLQkJY2FzZSAnXSc6Ci0JCQlyZXR1cm4gZXNjYXBlX2RlbGltaXRlcnM7Ci0KLQkJY2FzZSAnICc6Ci0JCQlyZXR1cm4gZXNjYXBlX3NwYWNlOwotCi0JCQkvLyBUaGUgcmVzdCBzaG91bGQgYWx3YXlzIGJlIGVzY2FwZWQ6IDwgPiAiIHNwYWNlIHwgXiAtIGFuZCBhbGwgdGhlIFVURi04IGJ5dGVzCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEFwcGx5IHRoZSBVUkkgZXNjYXBpbmcgcnVsZXMgdG8gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaGF2ZSB0aGUgVVJJIGVzY2FwaW5nIHJ1bGVzIGFwcGxpZWQgdG8gdGhlbS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBVUkkgZXNjYXBpbmcgcnVsZXMgdG8gdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGVzY2FwZV91cmkoQ29sbGVjdGlvbiBhcmdzLCBib29sZWFuIGVzY2FwZSkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBlc2NhcGVfdXJpKGFyZ3MsIGVzY2FwZSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogQXBwbHkgdGhlIFVSSSBlc2NhcGluZyBydWxlcyB0byB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBoYXZlIHRoZSBVUkkgZXNjYXBpbmcgcnVsZXMgYXBwbGllZCB0byB0aGVtLgotCSAqIEBwYXJhbSBlc2NhcGVfc3BhY2UgVE9ETwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIFVSSSBlc2NhcGluZyBydWxlcyB0byB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZXNjYXBlX3VyaShDb2xsZWN0aW9uIGFyZ3MsIGJvb2xlYW4gZXNjYXBlX2RlbGltaXRlcnMsIGJvb2xlYW4gZXNjYXBlX3NwYWNlKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0JCi0JCUl0ZXJhdG9yIGFyZ2kgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQkKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKCIiKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJCQkKLQkJQW55VHlwZSBhYXQgPSBhcmcxLmZpcnN0KCk7Ci0JCVN0cmluZyBzdHIgPSBhYXQuc3RyaW5nX3ZhbHVlKCk7Ci0KLQkJQnl0ZUJ1ZmZlciBidWZmZXIgPSBVVEZfOC5lbmNvZGUoc3RyKTsKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlci5saW1pdCgpOyBpKyspIHsKLQkJCWJ5dGUgeCA9IGJ1ZmZlci5nZXQoaSk7Ci0JCi0JCQlpZiAobmVlZHNfZXNjYXBlKHgsIGVzY2FwZV9kZWxpbWl0ZXJzLCBlc2NhcGVfc3BhY2UpKSB7Ci0JCQkJc2IuYXBwZW5kKCIlIik7Ci0JCQkJc2IuYXBwZW5kKEludGVnZXIudG9IZXhTdHJpbmcoeCAmIDB4RkYpLnRvVXBwZXJDYXNlKCkpOwotCQkJfSBlbHNlCi0JCQkJc2IuYXBwZW5kKChjaGFyKXgpOwotCQl9Ci0JCi0JCXJzLmFkZChuZXcgWFNTdHJpbmcoc2IudG9TdHJpbmcoKSkpOwotCQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBUaGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0JCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci0KLQlwdWJsaWMgQWJzdHJhY3RVUklGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJc3VwZXIobmFtZSwgYXJpdHkpOwotCX0KLQotCXB1YmxpYyBBYnN0cmFjdFVSSUZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBtaW5fYXJpdHksIGludCBtYXhfYXJpdHkpIHsKLQkJc3VwZXIobmFtZSwgbWluX2FyaXR5LCBtYXhfYXJpdHkpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9DbXBFcS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9DbXBFcS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWMwMmVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ21wRXEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIENsYXNzIGZvciBjb21wYXJlIGZvciBlcXVhbCBmdW5jdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBDbXBFcSB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENtcEVxLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IG9mIGFueSB0eXBlLgotCSAqIEBwYXJhbSBjb250ZXh0IFRPRE8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLCB0cnVlL2ZhbHNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9DbXBHdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9DbXBHdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmYwNzgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ21wR3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIENsYXNzIGZvciBjb21wYXJlIGZvciBncmVhdGVyIHRoYW4gb3BlcmF0aW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENtcEd0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ21wR3QKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBhcmd1bWVudCBvZiBhbnkgdHlwZS4KLQkgKiBAcGFyYW0gY29udGV4dCBUT0RPCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbiwgdHJ1ZS9mYWxzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ21wTHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ21wTHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBjMmM4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NtcEx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgY29tcGFyZSBmb3IgbGVzcyB0aGFuIG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBDbXBMdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENtcEx0LgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IG9mIGFueSB0eXBlLgotCSAqIEBwYXJhbSBjb250ZXh0IFRPRE8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLCB0cnVlL2ZhbHNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGx0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Db25zdHJ1Y3Rvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Db25zdHJ1Y3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTJmZmY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ29uc3RydWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZzI3NDc4NCAtIGltcHJvdmVtZW50cyB0byB4czpib29sZWFuIGRhdGEgdHlwZSBpbXBsZW1lbnRhdGlvbgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDb25zdHJ1Y3RvciBjbGFzcyBmb3IgZnVuY3Rpb25zLgotICovCi1wdWJsaWMgY2xhc3MgQ29uc3RydWN0b3IgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBDdHJUeXBlIF9hdG9taWNfdHlwZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDb25zdHJ1Y3RvciBjbGFzcy4KLQkgKiAKLQkgKiBAcGFyYW0gYWF0Ci0JICogICAgICAgICAgICBpbnB1dCBvZiBhbnkgYXRvbWljIHR5cGUuCi0JICovCi0JcHVibGljIENvbnN0cnVjdG9yKEN0clR5cGUgYWF0KSB7Ci0JCXN1cGVyKG5ldyBRTmFtZShhYXQudHlwZV9uYW1lKCkpLCAxKTsKLQotCQlfYXRvbWljX3R5cGUgPSBhYXQ7Ci0JfQotCi0JLy8gWFhYIElOIEdFTlJBTCwgSSBUSElVTksgV0UgTkVFRCBUTyBQVUxMIFNBTklUWSBDSEVDS0lORyBPVVRTSURFIQotCS8vIFBMVVMgSSBBTSBOT1QgQVRPTUlaSU5HL0VUQyBFVEMgSEVSRSEhISBCQUQgQ09ERQotCS8vIEJVRyBYWFggSEFDSyBERUFUSAotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQkvLyBzYW5pdHkgY2hlY2tzCi0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnLnNpemUoKSA+IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCS8vIGRvIGl0Ci0JCXJldHVybiBfYXRvbWljX3R5cGUuY29uc3RydWN0b3IoYXJnKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ29uc3RydWN0b3JGTC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Db25zdHJ1Y3RvckZMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYTI0OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Db25zdHJ1Y3RvckZMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENvbnN0cnVjdG9yIGNsYXNzIGZvciB0aGUgZnVuY3Rpb25zIGxpYnJhcnkuCi0gKi8KLXB1YmxpYyBjbGFzcyBDb25zdHJ1Y3RvckZMIGV4dGVuZHMgRnVuY3Rpb25MaWJyYXJ5IHsKLQotCXByaXZhdGUgSGFzaHRhYmxlIF90eXBlczsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDb25zdHJ1Y3RvckZMLgotCSAqIAotCSAqIEBwYXJhbSBucwotCSAqICAgICAgICAgICAgaW5wdXQgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBDb25zdHJ1Y3RvckZMKFN0cmluZyBucykgewotCQlzdXBlcihucyk7Ci0KLQkJX3R5cGVzID0gbmV3IEhhc2h0YWJsZSgpOwotCX0KLQotCS8qKgotCSAqIEFkZHMgYSB0eXBlIGludG8gdGhlIGZ1bmN0aW9ucyBsaWJyYXJ5LgotCSAqIAotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgaW5wdXQgb2YgYW55IGF0b21pYyB0eXBlLgotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF90eXBlKEN0clR5cGUgYXQpIHsKLQkJUU5hbWUgbmFtZSA9IG5ldyBRTmFtZShhdC50eXBlX25hbWUoKSk7Ci0JCW5hbWUuc2V0X25hbWVzcGFjZShuYW1lc3BhY2UoKSk7Ci0KLQkJX3R5cGVzLnB1dChuYW1lLCBhdCk7Ci0KLQkJYWRkX2Z1bmN0aW9uKG5ldyBDb25zdHJ1Y3RvcihhdCkpOwotCX0KLQotCS8qKgotCSAqIEFkZHMgYSB0eXBlIGludG8gdGhlIGZ1bmN0aW9ucyBsaWJyYXJ5IGFzIGFuIGFic3RyYWN0IHR5cGUuCi0JICogCi0JICogQHBhcmFtIGF0Ci0JICogICAgICAgICAgICBpbnB1dCBvZiBhbnkgYXRvbWljIHR5cGUuCi0JICovCi0JcHVibGljIHZvaWQgYWRkX2Fic3RyYWN0X3R5cGUoU3RyaW5nIGxvY2FsTmFtZSwgQW55QXRvbWljVHlwZSBhdCkgewotCQlRTmFtZSBuYW1lID0gbmV3IFFOYW1lKGxvY2FsTmFtZSk7Ci0JCW5hbWUuc2V0X25hbWVzcGFjZShuYW1lc3BhY2UoKSk7Ci0KLQkJX3R5cGVzLnB1dChuYW1lLCBhdCk7Ci0JfQotCQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgdmFyaWFibGUgbmFtZS4KLQkgKiBAcmV0dXJuIHR5cGUgb2YgaW5wdXQgdmFyaWFibGUuCi0JICovCi0JcHVibGljIEFueUF0b21pY1R5cGUgYXRvbWljX3R5cGUoUU5hbWUgbmFtZSkgewotCQlyZXR1cm4gKEFueUF0b21pY1R5cGUpIF90eXBlcy5nZXQobmFtZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFicy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFicy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDQxMTQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BYnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIG5lZ2F0aXZlIHJldHVybnMgLSRhcmcKLSAqIG90aGVyd2lzZSByZXR1cm5zICRhcmcuIElmIHR5cGUgb2YgJGFyZyBpcyBvbmUgb2YgdGhlIGZvdXIgbnVtZXJpYyB0eXBlcwotICogeHM6ZmxvYXQsIHhzOmRvdWJsZSwgeHM6ZGVjaW1hbCBvciB4czppbnRlZ2VyIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gaXMgdGhlCi0gKiBzYW1lIGFzIHRoZSB0eXBlIG9mICRhcmcuIElmIHRoZSB0eXBlIG9mICRhcmcgaXMgYSB0eXBlIGRlcml2ZWQgZnJvbSBvbmUgb2YKLSAqIHRoZSBudW1lcmljIHR5cGVzLCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIGlzIHRoZSBiYXNlIG51bWVyaWMgdHlwZS4gRm9yCi0gKiB4czpmbG9hdCBhbmQgeHM6ZG91YmxlIGFyZ3VtZW50cywgaWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlIHplcm8gKCswKSBvcgotICogbmVnYXRpdmUgemVybyAoLTApLCB0aGVuIHBvc2l0aXZlIHplcm8gKCswKSBpcyByZXR1cm5lZC4gSWYgdGhlIGFyZ3VtZW50IGlzCi0gKiBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbmZpbml0eSwgcG9zaXRpdmUgaW5maW5pdHkgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkFicyBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5BYnMuCi0JICovCi0JcHVibGljIEZuQWJzKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImFicyIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQkvLyAxIGFyZ3VtZW50IG9ubHkhCi0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlyZXR1cm4gZm5fYWJzKGFyZ3VtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBBYnNvbHV0ZSB2YWx1ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmFicyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9hYnMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIHNhbml0eSBjaGV4Ci0JCU51bWVyaWNUeXBlIG50ID0gZ2V0X3NpbmdsZV9udW1lcmljX2FyZyhhcmcpOwotCi0JCS8vIGVtcHR5IGFyZwotCQlpZiAobnQgPT0gbnVsbCkKLQkJCXJldHVybiByczsKLQkJCi0JCWlmIChudCBpbnN0YW5jZW9mIFhTRG91YmxlKSB7Ci0JCQlYU0RvdWJsZSBkYXQgPSAoWFNEb3VibGUpIG50OwotCQkJaWYgKGRhdC56ZXJvKCkgfHwgZGF0Lm5lZ2F0aXZlWmVybygpKSB7Ci0JCQkJcnMuYWRkKG5ldyBYU0RvdWJsZSgiMCIpKTsKLQkJCQlyZXR1cm4gcnM7Ci0JCQl9Ci0JCQlpZiAoZGF0LmluZmluaXRlKCkpIHsKLQkJCQlycy5hZGQobmV3IFhTRG91YmxlKERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSkpOwotCQkJCXJldHVybiByczsKLQkJCX0KLQkJfQotCi0JCWlmIChudCBpbnN0YW5jZW9mIFhTRmxvYXQpIHsKLQkJCVhTRmxvYXQgZGF0ID0gKFhTRmxvYXQpIG50OwotCQkJaWYgKGRhdC56ZXJvKCkgfHwgZGF0Lm5lZ2F0aXZlWmVybygpKSB7Ci0JCQkJcnMuYWRkKG5ldyBYU0Zsb2F0KEZsb2F0LnZhbHVlT2YoMCkpKTsKLQkJCQlyZXR1cm4gcnM7Ci0JCQl9Ci0JCQlpZiAoZGF0LmluZmluaXRlKCkpIHsKLQkJCQlycy5hZGQobmV3IFhTRmxvYXQoRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFkpKTsKLQkJCQlyZXR1cm4gcnM7Ci0JCQl9Ci0JCX0KLQotCi0JCXJzLmFkZChudC5hYnMoKSk7Ci0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gbnVtZXJpYyB2YWx1ZSBmcm9tIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgZXhwcmVzc2lvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHRpbmcgbnVtZXJpYyB0eXBlIGZyb20gdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIE51bWVyaWNUeXBlIGdldF9zaW5nbGVfbnVtZXJpY19hcmcoUmVzdWx0U2VxdWVuY2UgYXJnKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWludCBzaXplID0gYXJnLnNpemUoKTsKLQkJaWYgKHNpemUgPiAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlpZiAoc2l6ZSA9PSAwKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJQW55VHlwZSBhdCA9IGFyZy5maXJzdCgpOwotCi0JCWlmICghKGF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCQkJCi0JCXJldHVybiAoTnVtZXJpY1R5cGUpIGF0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFkanVzdERhdGVUaW1lVG9UaW1lWm9uZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFkanVzdERhdGVUaW1lVG9UaW1lWm9uZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZThjMGNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BZGp1c3REYXRlVGltZVRvVGltZVpvbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbi4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EdXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLS8qKgotICogQWRqdXN0cyBhbiB4czpkYXRlVGltZSB2YWx1ZSB0byBhIHNwZWNpZmljIHRpbWV6b25lLCBvciB0byBubyB0aW1lem9uZSBhdAotICogYWxsLiBJZiA8Y29kZT4kdGltZXpvbmU8L2NvZGU+IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyBhbgotICogPGNvZGU+eHM6ZGF0ZVRpbWU8L2NvZGU+IHdpdGhvdXQgdGltZXpvbmUuIE90aGVyd2lzZSwgcmV0dXJucyBhbgotICogPGNvZGU+eHM6ZGF0ZVRpbWU8L2NvZGU+IHdpdGggYSB0aW1lem9uZS4KLSAqLwotcHVibGljIGNsYXNzIEZuQWRqdXN0RGF0ZVRpbWVUb1RpbWVab25lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFhTRGF5VGltZUR1cmF0aW9uIG1pbkR1cmF0aW9uID0gbmV3IFhTRGF5VGltZUR1cmF0aW9uKAotCQkJMCwgMTQsIDAsIDAsIHRydWUpOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFhTRGF5VGltZUR1cmF0aW9uIG1heER1cmF0aW9uID0gbmV3IFhTRGF5VGltZUR1cmF0aW9uKAotCQkJMCwgMTQsIDAsIDAsIGZhbHNlKTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRhdGVUaW1lLgotCSAqLwotCXB1YmxpYyBGbkFkanVzdERhdGVUaW1lVG9UaW1lWm9uZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJhZGp1c3QtZGF0ZVRpbWUtdG8tdGltZXpvbmUiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGFkanVzdGRhdGVUaW1lKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgZnVuY3Rpb24gdXNpbmcgdGhlIGFyZ3VtZW50cyBwYXNzZWQuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIHN0YXRpYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIGZuOmRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGFkanVzdGRhdGVUaW1lKENvbGxlY3Rpb24gYXJncywKLQkJCUR5bmFtaWNDb250ZXh0IGRjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRBcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gbnVsbDsKLQkJaWYgKGFyZ2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJfQotCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQkJWFNEYXlUaW1lRHVyYXRpb24gdGltZXpvbmUgPSBudWxsOwotCQkKLQkJaWYgKGFyZzIgIT0gbnVsbCAmJiBhcmcyLmVtcHR5KCkpIHsKLQkJCWlmIChkYXRlVGltZS50aW1lem9uZWQoKSkgewotCQkJCUNhbGVuZGFyVHlwZSBsb2NhbGl6ZWQgPSBuZXcgWFNEYXRlVGltZShkYXRlVGltZS5jYWxlbmRhcigpLCBudWxsKTsKLQkJCQlycy5hZGQobG9jYWxpemVkKTsKLQkJCQlyZXR1cm4gcnM7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBhcmcxOwotCQkJfQotCQl9IGVsc2UgaWYgKGFyZzIgPT0gbnVsbCkgewotCQkJQ2FsZW5kYXJUeXBlIGxvY2FsaXplZCA9IG5ldyBYU0RhdGVUaW1lKGRhdGVUaW1lLm5vcm1hbGl6ZUNhbGVuZGFyKGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpLCBudWxsKTsKLQkJCXJzLmFkZChsb2NhbGl6ZWQpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJdGltZXpvbmUgPSAoWFNEYXlUaW1lRHVyYXRpb24pIGFyZzIuZmlyc3QoKTsKLQkJaWYgKHRpbWV6b25lLmx0KG1pbkR1cmF0aW9uLCBkYykgfHwgdGltZXpvbmUuZ3QobWF4RHVyYXRpb24sIGRjKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUaW1lem9uZSgpOwotCQl9Ci0JCQotCQlpZiAoZGF0ZVRpbWUudHooKSA9PSBudWxsKSB7Ci0JCQlycy5hZGQobmV3IFhTRGF0ZVRpbWUoZGF0ZVRpbWUuY2FsZW5kYXIoKSwgdGltZXpvbmUpKTsKLQkJCXJldHVybiByczsKLQkJfQotCQkKLQkJdHJ5IHsJCQkKLQkJCVhNTEdyZWdvcmlhbkNhbGVuZGFyIHhtbENhbGVuZGFyID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKEdyZWdvcmlhbkNhbGVuZGFyKWRhdGVUaW1lLm5vcm1hbGl6ZUNhbGVuZGFyKGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpKTsKLQkJCQotCQkJRHVyYXRpb24gZHVyYXRpb24gPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEdXJhdGlvbih0aW1lem9uZS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQl4bWxDYWxlbmRhci5hZGQoZHVyYXRpb24pOwotCi0JCQlycy5hZGQobmV3IFhTRGF0ZVRpbWUoeG1sQ2FsZW5kYXIudG9HcmVnb3JpYW5DYWxlbmRhcigpLCB0aW1lem9uZSkpOwotCQkJCi0JCX0gY2F0Y2ggKERhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFRpbWV6b25lKCk7Ci0JCX0KLQkJCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZEFyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZVRpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXlUaW1lRHVyYXRpb24oKSwKLQkJCQkJU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0RGF0ZVRvVGltZVpvbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BZGp1c3REYXRlVG9UaW1lWm9uZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmM0ZWY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BZGp1c3REYXRlVG9UaW1lWm9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwNTQ3IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkR1cmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5YTUxHcmVnb3JpYW5DYWxlbmRhcjsKLQotLyoqCi0gKiBBZGp1c3RzIGFuIHhzOmRhdGUgdmFsdWUgdG8gYSBzcGVjaWZpYyB0aW1lem9uZSwgb3IgdG8gbm8gdGltZXpvbmUgYXQKLSAqIGFsbC4gSWYgPGNvZGU+JHRpbWV6b25lPC9jb2RlPiBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgYW4KLSAqIDxjb2RlPnhzOmRhdGU8L2NvZGU+IHdpdGhvdXQgdGltZXpvbmUuIE90aGVyd2lzZSwgcmV0dXJucyBhbgotICogPGNvZGU+eHM6ZGF0ZTwvY29kZT4gd2l0aCBhIHRpbWV6b25lLgotICovCi1wdWJsaWMgY2xhc3MgRm5BZGp1c3REYXRlVG9UaW1lWm9uZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtaW5EdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCB0cnVlKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtYXhEdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCBmYWxzZSk7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5BZGp1c3REYXRlVG9UaW1lWm9uZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJhZGp1c3QtZGF0ZS10by10aW1lem9uZSIpLCAxLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gYWRqdXN0RGF0ZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGZ1bmN0aW9uIHVzaW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gc2MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBzdGF0aWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBmbjpkYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBhZGp1c3REYXRlKENvbGxlY3Rpb24gYXJncywKLQkJCUR5bmFtaWNDb250ZXh0IGRjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRBcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJaWYgKGFyZ2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJfQotCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFyZzEuZmlyc3QoKTsKLQkJWFNEYXlUaW1lRHVyYXRpb24gdGltZXpvbmUgPSBudWxsOwotCi0JCWlmIChhcmcyLmVtcHR5KCkpIHsKLQkJCWlmIChkYXRlLnRpbWV6b25lZCgpKSB7Ci0JCQkJWFNEYXRlIGxvY2FsaXplZCA9IG5ldyBYU0RhdGUoZGF0ZS5jYWxlbmRhcigpLCBudWxsKTsKLQkJCQlycy5hZGQobG9jYWxpemVkKTsKLQkJCQlyZXR1cm4gcnM7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBhcmcxOwotCQkJfQotCQl9Ci0JCQotCQl0aW1lem9uZSA9IChYU0RheVRpbWVEdXJhdGlvbikgYXJnMi5maXJzdCgpOwotCQlpZiAodGltZXpvbmUubHQobWluRHVyYXRpb24sIGRjKSB8fCB0aW1lem9uZS5ndChtYXhEdXJhdGlvbiwgZGMpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFRpbWV6b25lKCk7Ci0JCX0KLQkJCi0JCWlmIChkYXRlLnR6KCkgPT0gbnVsbCkgewotCQkJcnMuYWRkKG5ldyBYU0RhdGUoZGF0ZS5jYWxlbmRhcigpLCB0aW1lem9uZSkpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCQotCQl0cnkgewotCQkJWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sQ2FsZW5kYXIgPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdYTUxHcmVnb3JpYW5DYWxlbmRhcigoR3JlZ29yaWFuQ2FsZW5kYXIpZGF0ZS5ub3JtYWxpemVDYWxlbmRhcihkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSkpOwotCQkJCi0JCQlEdXJhdGlvbiBkdXJhdGlvbiA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0R1cmF0aW9uKHRpbWV6b25lLnN0cmluZ192YWx1ZSgpKTsKLQkJCXhtbENhbGVuZGFyLmFkZChkdXJhdGlvbik7Ci0JCQkKLQkJCXJzLmFkZChuZXcgWFNEYXRlKHhtbENhbGVuZGFyLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgdGltZXpvbmUpKTsKLQkJfSBjYXRjaCAoRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFRpbWV6b25lKCk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRBcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXlUaW1lRHVyYXRpb24oKSwKLQkJCQkJU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0VGltZVRvVGltZVpvbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BZGp1c3RUaW1lVG9UaW1lWm9uZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGRhZGNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BZGp1c3RUaW1lVG9UaW1lWm9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwNTQ3IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkR1cmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5YTUxHcmVnb3JpYW5DYWxlbmRhcjsKLQotLyoqCi0gKiBBZGp1c3RzIGFuIHhzOmRhdGVUaW1lIHZhbHVlIHRvIGEgc3BlY2lmaWMgdGltZXpvbmUsIG9yIHRvIG5vIHRpbWV6b25lIGF0Ci0gKiBhbGwuIElmIDxjb2RlPiR0aW1lem9uZTwvY29kZT4gaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIGFuCi0gKiA8Y29kZT54czpkYXRlVGltZTwvY29kZT4gd2l0aG91dCB0aW1lem9uZS4gT3RoZXJ3aXNlLCByZXR1cm5zIGFuCi0gKiA8Y29kZT54czpkYXRlVGltZTwvY29kZT4gd2l0aCBhIHRpbWV6b25lLgotICovCi1wdWJsaWMgY2xhc3MgRm5BZGp1c3RUaW1lVG9UaW1lWm9uZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtaW5EdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCB0cnVlKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtYXhEdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCBmYWxzZSk7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5BZGp1c3RUaW1lVG9UaW1lWm9uZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJhZGp1c3QtdGltZS10by10aW1lem9uZSIpLCAxLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gYWRqdXN0VGltZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGZ1bmN0aW9uIHVzaW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gc2MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBzdGF0aWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBmbjpkYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBhZGp1c3RUaW1lKENvbGxlY3Rpb24gYXJncywKLQkJCUR5bmFtaWNDb250ZXh0IGRjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRBcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJaWYgKGFyZ2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJfQotCQlYU1RpbWUgdGltZSA9IChYU1RpbWUpIGFyZzEuZmlyc3QoKTsKLQkJWFNEYXlUaW1lRHVyYXRpb24gdGltZXpvbmUgPSBudWxsOwotCQkKLQkJaWYgKGFyZzIuZW1wdHkoKSkgewotCQkJaWYgKHRpbWUudGltZXpvbmVkKCkpIHsKLQkJCQlYU1RpbWUgbG9jYWxpemVkID0gbmV3IFhTVGltZSh0aW1lLmNhbGVuZGFyKCksIG51bGwpOwotCQkJCXJzLmFkZChsb2NhbGl6ZWQpOwotCQkJCXJldHVybiByczsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIGFyZzE7Ci0JCQl9Ci0JCX0KLQotCi0JCVhNTEdyZWdvcmlhbkNhbGVuZGFyIHhtbENhbGVuZGFyID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQlpZiAodGltZS50eigpICE9IG51bGwpIHsKLQkJCQl4bWxDYWxlbmRhciA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyKChHcmVnb3JpYW5DYWxlbmRhcil0aW1lLm5vcm1hbGl6ZUNhbGVuZGFyKHRpbWUuY2FsZW5kYXIoKSwgdGltZS50eigpKSk7Ci0JCQl9IGVsc2UgewotCQkJCXhtbENhbGVuZGFyID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXJUaW1lKHRpbWUuaG91cigpLCB0aW1lLm1pbnV0ZSgpLCAoaW50KXRpbWUuc2Vjb25kKCksIDApOwotCQkJfQotCQotCQkJdGltZXpvbmUgPSAoWFNEYXlUaW1lRHVyYXRpb24pIGFyZzIuZmlyc3QoKTsKLQkJCWlmICh0aW1lem9uZS5sdChtaW5EdXJhdGlvbiwgZGMpIHx8IHRpbWV6b25lLmd0KG1heER1cmF0aW9uLCBkYykpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFRpbWV6b25lKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmICh0aW1lLnR6KCkgPT0gbnVsbCkgewotCQkJCXJzLmFkZChuZXcgWFNUaW1lKHRpbWUuY2FsZW5kYXIoKSwgdGltZXpvbmUpKTsKLQkJCQlyZXR1cm4gcnM7Ci0JCQl9Ci0JCQkKLQkJCUR1cmF0aW9uIGR1cmF0aW9uID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RHVyYXRpb24odGltZXpvbmUuc3RyaW5nX3ZhbHVlKCkpOwotCQkJeG1sQ2FsZW5kYXIuYWRkKGR1cmF0aW9uKTsKLQkKLQkJCXJzLmFkZChuZXcgWFNUaW1lKHhtbENhbGVuZGFyLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgdGltZXpvbmUpKTsKLQkJfSBjYXRjaCAoRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFRpbWV6b25lKCk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRBcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1RpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXlUaW1lRHVyYXRpb24oKSwKLQkJCQkJU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQXZnLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQXZnLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MTk0MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkF2Zy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcyAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gZml4IGlzc3VlIHdpdGggY2FzdGluZyBpdGVtcyB0byBYU0RvdWJsZSBjYXN0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCB0byBjYXN0IHRvIE51bWVyaWMgc28gdGhhdCBldmFsdWF0aW9ucwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZm9ybWF0dGluZyBvY2N1ciBjb3JyZWN0bHkuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGZpeCBmbjphdmcgY2FzdGluZyBpc3N1ZXMgYW5kIGRpdmlkZSBieSB6ZXJvIGlzc3Vlcy4KLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGZpeCBwcm9tb3Rpb24gcnVsZXMgZm9yIGZuOmF2ZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXlUaW1lRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1llYXJNb250aER1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TY2FsYXJUeXBlUHJvbW90ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlR5cGVQcm9tb3RlcjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBhdmVyYWdlIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGlucHV0IHNlcXVlbmNlICRhcmcsIHRoYXQgaXMsIHRoZQotICogc3VtIG9mIHRoZSB2YWx1ZXMgZGl2aWRlZCBieSB0aGUgbnVtYmVyIG9mIHZhbHVlcy4KLSAqLwotcHVibGljIGNsYXNzIEZuQXZnIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkF2Zy4KLQkgKi8KLQlwdWJsaWMgRm5BdmcoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYXZnIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBhdmcoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQXZlcmFnZSB2YWx1ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjphdmcgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgYXZnKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKWFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaW50IGVsZW1zID0gMDsKLQotCQlNYXRoUGx1cyB0b3RhbCA9IG51bGw7Ci0KLQkJVHlwZVByb21vdGVyIHRwID0gbmV3IFNjYWxhclR5cGVQcm9tb3RlcigpOwotCQl0cC5jb25zaWRlclNlcXVlbmNlKGFyZyk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJnLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJKytlbGVtczsKLQkJCUFueUF0b21pY1R5cGUgY29udiA9IHRwLnByb21vdGUoKEFueVR5cGUpIGkubmV4dCgpKTsKLQkJCQotCQkJaWYgKGNvbnYgaW5zdGFuY2VvZiBYU0RvdWJsZSAmJiAoKFhTRG91YmxlKWNvbnYpLm5hbigpIHx8IGNvbnYgaW5zdGFuY2VvZiBYU0Zsb2F0ICYmICgoWFNGbG9hdCljb252KS5uYW4oKSkgewotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyh0cC5wcm9tb3RlKG5ldyBYU0Zsb2F0KEZsb2F0Lk5hTikpKTsKLQkJCX0KLQkJCWlmICh0b3RhbCA9PSBudWxsKSB7Ci0JCQkJdG90YWwgPSAoTWF0aFBsdXMpY29udjsgCi0JCQl9IGVsc2UgewotCQkJCXRvdGFsID0gKE1hdGhQbHVzKXRvdGFsLnBsdXMoUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoY29udikpLmZpcnN0KCk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoISh0b3RhbCBpbnN0YW5jZW9mIE1hdGhEaXYpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlyZXR1cm4gKChNYXRoRGl2KXRvdGFsKS5kaXYoUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoZWxlbXMpKSkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5CYXNlVXJpLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQmFzZVVyaS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDkwNDUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5CYXNlVXJpLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZzI3NDcyNSAtIGltcGxlbWVudGF0aW9uIG9mIGJhc2UtdXJpIGZ1bmN0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgYmFzZS11cmkgcHJvcGVydHkgZm9yICRhcmcgYXMgZGVmaW5lZCBieSB0aGUKLSAqIGFjY2Vzc29yIGZ1bmN0aW9uIGRtOmJhc2UtdXJpKCkgZm9yIHRoYXQga2luZCBvZiBub2RlIGluIFNlY3Rpb24gNS4xIGJhc2UtdXJpCi0gKiBBY2Nlc3NvciBvZiB0aGUgc3BlY2lmaWNhdGlvbi4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSBlbXB0eQotICogc2VxdWVuY2UgaXMgcmV0dXJuZWQuIERvY3VtZW50LCBlbGVtZW50IGFuZCBwcm9jZXNzaW5nLWluc3RydWN0aW9uIG5vZGVzIGhhdmUKLSAqIGEgYmFzZS11cmkgcHJvcGVydHkgd2hpY2ggbWF5IGJlIGVtcHR5LiBUaGUgYmFzZS11cmkgcHJvcGVydHkgb2YgYWxsIG90aGVyCi0gKiBub2RlIHR5cGVzIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZS4gVGhlIHZhbHVlIG9mIHRoZSBiYXNlLXVyaSBwcm9wZXJ0eSBpcwotICogcmV0dXJuZWQgaWYgaXQgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHkuIE90aGVyd2lzZSwgaWYgdGhlIG5vZGUgaGFzIGEgcGFyZW50LAotICogdGhlIHZhbHVlIG9mIGRtOmJhc2UtdXJpKCkgYXBwbGllZCB0byBpdHMgcGFyZW50IGlzIHJldHVybmVkLCByZWN1cnNpdmVseS4gSWYKLSAqIHRoZSBub2RlIGRvZXMgbm90IGhhdmUgYSBwYXJlbnQsIG9yIGlmIHRoZSByZWN1cnNpdmUgYXNjZW50IHVwIHRoZSBhbmNlc3RvcgotICogY2hhaW4gZW5jb3VudGVycyBhIG5vZGUgd2hvc2UgYmFzZS11cmkgcHJvcGVydHkgaXMgZW1wdHkgYW5kIGl0IGRvZXMgbm90IGhhdmUKLSAqIGEgcGFyZW50LCB0aGUgZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkJhc2VVcmkgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5CYXNlVXJpLgotCSAqLwotCXB1YmxpYyBGbkJhc2VVcmkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYmFzZS11cmkiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGJhc2VfdXJpKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBCYXNlLVVyaSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkX2NvbnRleHQKLQkgKiAJCQkgIER5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpiYXNlLXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBiYXNlX3VyaShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRfY29udGV4dCkgCi0JICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0JCQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IG51bGw7Ci0JCQotCQlpZiAoY2FyZ3Muc2l6ZSgpID09IDApIHsKLQkJICAvLyBzdXBwb3J0IGZvciBhcml0eSAwCi0JCSAgLy8gZ2V0IGJhc2UtdXJpIGZyb20gdGhlIGNvbnRleHQgaXRlbS4KLQkJICBBbnlUeXBlIGNvbnRleHRJdGVtID0gZF9jb250ZXh0LmNvbnRleHRfaXRlbSgpOwotCQkgIGlmIChjb250ZXh0SXRlbSAhPSBudWxsKSB7Ci0JCQlycyA9IGdldEJhc2VVcmkoY29udGV4dEl0ZW0pOwotCQkgIH0KLQkJICBlbHNlIHsKLQkJICAgIHRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCSAgfQotCQl9Ci0JCWVsc2UgaWYgKGNhcmdzLnNpemUoKSA9PSAxKSB7Ci0JICAgICAgLy8gc3VwcG9ydCBmb3IgYXJpdHkgMQotCQkgIFJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQkgIEFueVR5cGUgYXR0ID0gYXJnMS5maXJzdCgpOwotCi0JCSAgcnMgPSBnZXRCYXNlVXJpKGF0dCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgLy8gYXJpdHkgb3RoZXIgdGhhbiAwIG9yIDEgaXMgbm90IGFsbG93ZWQKLQkJICB0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwkKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKgotCSAqIEhlbHBlciBmdW5jdGlvbiBmb3IgYmFzZS11cmkgc3VwcG9ydAotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZ2V0QmFzZVVyaShBbnlUeXBlIGF0dCkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCVhTQW55VVJJIGJhc2VVcmkgPSBudWxsOwotCQkgIC8vIGRlcGVuZGluZyBvbiB0aGUgbm9kZSB0eXBlLCB3ZSBnZXQgdGhlIGJhc2UtdXJpIGZvciB0aGUgbm9kZS4KLQkJICAvLyBpZiBiYXNlLXVyaSBwcm9wZXJ0eSBpbiBET00gaXMgbnVsbCwgd2Ugc2V0IHRoZSBiYXNlLXVyaSBhcyBzdHJpbmcgIm51bGwiLiBUaGlzCi0JCSAgLy8gYXZvaWRzIG51bGwgcG9pbnRlciBleGNlcHRpb24gd2hpbGUgY29tcGFyaW5nIHhzOmFueVVSSSB2YWx1ZXMuCi0JCQotCQkgIGlmIChhdHQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJICBOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBhdHQ7Ci0JCQkgIE5vZGUgZG9tTm9kZSA9IG5vZGUubm9kZV92YWx1ZSgpOwotCQkJICBTdHJpbmcgYnVyaSA9IGRvbU5vZGUuZ2V0QmFzZVVSSSgpOwotCQkJICBpZiAoYnVyaSAhPSBudWxsKSB7Ci0JCQkJICBiYXNlVXJpID0gbmV3IFhTQW55VVJJKGJ1cmkpOwotCQkJICB9IGVsc2UgewotCQkJCSAgYmFzZVVyaSA9IG5ldyBYU0FueVVSSSgibnVsbCIpOwotCQkJICB9Ci0JCSAgfQotCQkgIAkgICAgICAgIAotCSAgICAgIGlmIChiYXNlVXJpICE9IG51bGwpIHsKLQkgICAgICAgIHJzLmFkZChiYXNlVXJpKTsJCi0JICAgICAgfQotCSAgICAgIAotCSAgICAgIHJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQm9vbGVhbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkJvb2xlYW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiM2U3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQm9vbGVhbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI2Mjc2NSAtIHVzZSBjb3JyZWN0ICdlZmZlY3RpdmUgYm9vbGVhbiB2YWx1ZScKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeCBjaGVja2luZyBvZiBkYXRhIHR5cGVzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENvbXB1dGVzIHRoZSBlZmZlY3RpdmUgYm9vbGVhbiB2YWx1ZSBvZiB0aGUgc2VxdWVuY2UgJGFyZy4gSWYgJGFyZyBpcyB0aGUKLSAqIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIGZhbHNlLiBJZiAkYXJnIGNvbnRhaW5zIGEgc2luZ2xlIGF0b21pYyB2YWx1ZSwgdGhlbgotICogdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYgJGFyZyBpczogLSBUaGUgc2luZ2xldG9uIHhzOmJvb2xlYW4gdmFsdWUKLSAqIGZhbHNlLiAtIFRoZSBzaW5nbGV0b24gdmFsdWUgIiIgKHplcm8tbGVuZ3RoIHN0cmluZykgb2YgdHlwZSB4czpzdHJpbmcgb3IKLSAqIHhkdDp1bnR5cGVkQXRvbWljLiAtIEEgc2luZ2xldG9uIG51bWVyaWMgdmFsdWUgdGhhdCBpcyBudW1lcmljYWxseSBlcXVhbCB0bwotICogemVyby4gLSBUaGUgc2luZ2xldG9uIHhzOmZsb2F0IG9yIHhzOmRvdWJsZSB2YWx1ZSBOYU4uIEluIGFsbCBvdGhlciBjYXNlcywKLSAqIHJldHVybnMgdHJ1ZS4KLSAqLwotcHVibGljIGNsYXNzIEZuQm9vbGVhbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Cb29sZWFuLgotCSAqLwotCXB1YmxpYyBGbkJvb2xlYW4oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYm9vbGVhbiIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIDEgYXJndW1lbnQgb25seSEKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhmbl9ib29sZWFuKGFyZ3VtZW50KSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgWFNCb29sZWFuIFRSVUUgPSBuZXcgWFNCb29sZWFuKHRydWUpOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFhTQm9vbGVhbiBGQUxTRSA9IG5ldyBYU0Jvb2xlYW4oZmFsc2UpOwotCQotCS8qKgotCSAqIEJvb2xlYW4gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmJvb2xlYW4gb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNCb29sZWFuIGZuX2Jvb2xlYW4oUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIEZBTFNFOwotCi0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQkJCi0JCWlmIChhdCBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCi0JCQotCQlpZiAoYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkKLQkJCXJldHVybiBUUlVFOwotCQkKLQkJaWYgKGFyZy5zaXplKCkgPiAxKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQkvLyBYWFggPz8KLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCXJldHVybiBUUlVFOwotCi0JCS8vIG9rIHdlIGdvdCAxIHNpbmdsZSBhdG9taWMgdHlwZSBlbGVtZW50Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNCb29sZWFuKSB7Ci0JCQlpZiAoISgoWFNCb29sZWFuKSBhdCkudmFsdWUoKSkKLQkJCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQotCQlpZiAoKGF0IGluc3RhbmNlb2YgWFNTdHJpbmcpIHx8IChhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykpIHsKLQkJCWlmIChhdC5zdHJpbmdfdmFsdWUoKS5lcXVhbHMoIiIpKQotCQkJCXJldHVybiBGQUxTRTsKLQkJfQotCi0JCWlmIChhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKSB7Ci0JCQlpZiAoKChOdW1lcmljVHlwZSkgYXQpLnplcm8oKSkKLQkJCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQotCQlpZiAoKGF0IGluc3RhbmNlb2YgWFNGbG9hdCkgJiYgKCgoWFNGbG9hdCkgYXQpLm5hbigpKSkKLQkJCXJldHVybiBGQUxTRTsKLQotCQlpZiAoKGF0IGluc3RhbmNlb2YgWFNEb3VibGUpICYmICgoKFhTRG91YmxlKSBhdCkubmFuKCkpKQotCQkJcmV0dXJuIEZBTFNFOwotCQkKLQotCQlyZXR1cm4gVFJVRTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DZWlsaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ2VpbGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjllODVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DZWlsaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCAoY2xvc2VzdCB0byBuZWdhdGl2ZSBpbmZpbml0eSkgbnVtYmVyIHdpdGggbm8gZnJhY3Rpb25hbAotICogcGFydCB0aGF0IGlzIG5vdCBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mICRhcmcuIElmIHR5cGUgb2YgJGFyZyBpcyBvbmUgb2YgdGhlCi0gKiBmb3VyIG51bWVyaWMgdHlwZXMgeHM6ZmxvYXQsIHhzOmRvdWJsZSwgeHM6ZGVjaW1hbCBvciB4czppbnRlZ2VyIHRoZSB0eXBlIG9mCi0gKiB0aGUgcmV0dXJuIGlzIHRoZSBzYW1lIGFzIHRoZSB0eXBlIG9mICRhcmcuIElmIHRoZSB0eXBlIG9mICRhcmcgaXMgYSB0eXBlCi0gKiBkZXJpdmVkIGZyb20gb25lIG9mIHRoZSBudW1lcmljIHR5cGVzLCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIGlzIHRoZSBiYXNlCi0gKiBudW1lcmljIHR5cGUuIEZvciB4czpmbG9hdCBhbmQgeHM6ZG91YmxlIGFyZ3VtZW50cywgaWYgdGhlIGFyZ3VtZW50IGlzCi0gKiBwb3NpdGl2ZSB6ZXJvICgrMCksIHRoZW4gcG9zaXRpdmUgemVybyAoKzApIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMKLSAqIG5lZ2F0aXZlIHplcm8gKC0wKSwgdGhlbiBuZWdhdGl2ZSB6ZXJvICgtMCkgaXMgcmV0dXJuZWQuIElmIHRoZSBhcmd1bWVudCBpcwotICogbGVzcyB0aGFuIHplcm8gKDApLCBuZWdhdGl2ZSB6ZXJvICgtMCkgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkNlaWxpbmcgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuQ2VpbGluZy4KLQkgKi8KLQlwdWJsaWMgRm5DZWlsaW5nKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImNlaWxpbmciKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gMSBhcmd1bWVudCBvbmx5IQotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJndW1lbnQgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJcmV0dXJuIGZuX2NlaWxpbmcoYXJndW1lbnQpOwotCX0KLQotCS8qKgotCSAqIENlaWxpbmcgdmFsdWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpjZWlsaW5nIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZuX2NlaWxpbmcoUmVzdWx0U2VxdWVuY2UgYXJnKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBzYW5pdHkgY2hleAotCQlOdW1lcmljVHlwZSBudCA9IEZuQWJzLmdldF9zaW5nbGVfbnVtZXJpY19hcmcoYXJnKTsKLQotCQkvLyBlbXB0eSBhcmcKLQkJaWYgKG50ID09IG51bGwpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJcnMuYWRkKG50LmNlaWxpbmcoKSk7Ci0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29kZXBvaW50RXF1YWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2RlcG9pbnRFcXVhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmZiYzNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2RlcG9pbnRFcXVhbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIFN0ZWVuIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogCi0gKiA8cD4KLSAqIFN0cmluZyBjb21wYXJpc29uIGZ1bmN0aW9uLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjpjb2RlcG9pbnQtZXF1YWwoJGNvbXBhcmFuZDEgYXMgeHM6c3RyaW5nPywKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbXBhcmFuZDIgYXMgeHM6c3RyaW5nPykgYXMgeHM6Ym9vbGVhbj8KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBSZXR1cm5zIHRydWUgb3IgZmFsc2UgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHZhbHVlIG9mICRjb21wYXJhbmQxIGlzIGVxdWFsCi0gKiB0byB0aGUgdmFsdWUgb2YgJGNvbXBhcmFuZDIsIGFjY29yZGluZyB0byB0aGUgVW5pY29kZSBjb2RlIHBvaW50IGNvbGxhdGlvbgotICogKGh0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zL2NvbGxhdGlvbi9jb2RlcG9pbnQpLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmIGVpdGhlciBhcmd1bWVudCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSByZXN1bHQgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICogPC9wPgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkNvZGVwb2ludEVxdWFsIGV4dGVuZHMgRnVuY3Rpb24gewotCQotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3Igb2YgRm5Db2RlcG9pbnRFcXVhbC4KLQkgKi8KLQlwdWJsaWMgRm5Db2RlcG9pbnRFcXVhbCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjb2RlcG9pbnQtZXF1YWwiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaXMgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBjb21wYXJpc29uIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjb2RlcG9pbnRfZXF1YWxzKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJlIHRoZSBhcmd1bWVudHMgYXMgY29kZXBvaW50cwotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgY29tcGFyZWQuCi0JICogQHBhcmFtIGR5bmFtaWNDb250ZXh0Ci0JICogICAgICAgICAgICBUaGUgY3VycmVudCBkeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjb2RlcG9pbnRfZXF1YWxzKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlYU1N0cmluZyB4c3RyMSA9IGFyZzEuZW1wdHkoKSA/IG51bGwgOiAoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJWFNTdHJpbmcgeHN0cjIgPSBhcmcyLmVtcHR5KCkgPyBudWxsIDogKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCk7Ci0KLQkJLy8gVGhpcyBkZWxlZ2F0ZXMgdG8gRm5Db21wYXJlCi0JCUJpZ0ludGVnZXIgcmVzdWx0ID0gRm5Db21wYXJlLmNvbXBhcmVfc3RyaW5nKER5bmFtaWNDb250ZXh0LkNPREVQT0lOVF9DT0xMQVRJT04sIHhzdHIxLCB4c3RyMiwgZHluYW1pY0NvbnRleHQpOwotCQlpZiAocmVzdWx0ICE9IG51bGwpIHJzLmFkZChuZXcgWFNCb29sZWFuKEJpZ0ludGVnZXIuWkVSTy5lcXVhbHMocmVzdWx0KSkpOwotCQkKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvZGVwb2ludHNUb1N0cmluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvZGVwb2ludHNUb1N0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWM0OTUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2RlcG9pbnRzVG9TdHJpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBpbXByb3ZlbWVudHMgdG8gdGhlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjA5NiAtIGltcHJvdmVtZW50cyBmb3Igc3Vycm9nYXRlIGhhbmRsaW5nIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGNsZWFuIHVwIHN0cmluZyBzdG9yYWdlCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgwNTUzIC0gZnVydGhlciBjaGVja3Mgb2YgbGVnYWwgVW5pY29kZSBjb2RlcG9pbnRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENyZWF0ZXMgYW4geHM6c3RyaW5nIGZyb20gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cy4gUmV0dXJucyB0aGUgemVyby1sZW5ndGgKLSAqIHN0cmluZyBpZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZS4gSWYgYW55IG9mIHRoZSBjb2RlIHBvaW50cyBpbiAkYXJnIGlzCi0gKiBub3QgYSBsZWdhbCBYTUwgY2hhcmFjdGVyLCBhbiBlcnJvciBpcyByYWlzZWQgW2VycjpGT0NIMDAwMV0uCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkNvZGVwb2ludHNUb1N0cmluZyBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQkKLSAgICAvKioKLSAgICAgKiBUaGUgbWF4aW11bSB2YWx1ZSBvZiBhIFVuaWNvZGUgY29kZSBwb2ludC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5fTEVHQUxfQ09ERVBPSU5UID0gMHgxOwotCi0KLSAgICAvKioKLSAgICAgKiBUaGUgbWF4aW11bSB2YWx1ZSBvZiBhIFVuaWNvZGUgY29kZSBwb2ludC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhfTEVHQUxfQ09ERVBPSU5UID0gMHgxMGZmZmY7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Db2RlcG9pbnRzVG9TdHJpbmcuCi0JICovCi0JcHVibGljIEZuQ29kZXBvaW50c1RvU3RyaW5nKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImNvZGVwb2ludHMtdG8tc3RyaW5nIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjb2RlcG9pbnRzX3RvX3N0cmluZyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDb2RlcG9pbnRzIHRvIHN0cmluZyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpjb2RlcG9pbnRzLXRvLXN0cmluZyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjb2RlcG9pbnRzX3RvX3N0cmluZyhDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKCIiKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlpbnRbXSBjb2RlUG9pbnRBcnJheSA9IG5ldyBpbnRbYXJnMS5zaXplKCldOwotCQlpbnQgY29kZVBvaW50SW5kZXggPSAwOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcxLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJWFNJbnRlZ2VyIGNvZGUgPSAoWFNJbnRlZ2VyKSBpLm5leHQoKTsKLQkJCQotCQkJaW50IGNvZGVwb2ludCA9IGNvZGUuaW50X3ZhbHVlKCkuaW50VmFsdWUoKTsKLQkJCWlmIChjb2RlcG9pbnQgPCBNSU5fTEVHQUxfQ09ERVBPSU5UIHx8IGNvZGVwb2ludCA+IE1BWF9MRUdBTF9DT0RFUE9JTlQpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IudW5zdXBwb3J0ZWRfY29kZXBvaW50KCJVKyIgKyBJbnRlZ2VyLnRvU3RyaW5nKGNvZGVwb2ludCwgMTYpLnRvVXBwZXJDYXNlKCkpOwotCQkJfQotCi0JCQljb2RlUG9pbnRBcnJheVtjb2RlUG9pbnRJbmRleF0gPSBjb2RlcG9pbnQ7CQkJCi0JCQljb2RlUG9pbnRJbmRleCsrOwotCQl9Ci0KLQkJLy8gIm5ldyBTdHJpbmcoaW50W10gY29kZVBvaW50cywgaW50IG9mZnNldCwgaW50IGNvdW50KSIgaXMgYSBmYWNpbGl0eQotCQkvLyBpbnRyb2R1Y2VkIGluIEphdmEgMS41Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgc3RyID0gbmV3IFN0cmluZyhjb2RlUG9pbnRBcnJheSwgMCwgY29kZVBvaW50QXJyYXkubGVuZ3RoKTsKLQkJCXJzLmFkZChuZXcgWFNTdHJpbmcoc3RyKSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKLQkJCS8vIFRoaXMgc2hvdWxkIGJlIGR1b2JsZSBjaGVja2VkIGFib3ZlLCBidXQgcmF0aGVyIHNhZmUgdGhhbiBzb3JyeQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnVuc3VwcG9ydGVkX2NvZGVwb2ludChpYWUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNJbnRlZ2VyKCksIFNlcVR5cGUuT0NDX1NUQVIpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29sbGVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbGxlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJkZjgwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29sbGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTE1OSAtIGZpeCBkb2N1bWVudCBsb2FkaW5nIGFuZCByZXNvbHZpbmcgVVJJcyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBTdW1tYXJ5OiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIHhzOnN0cmluZyBhcyBhcmd1bWVudCBhbmQgcmV0dXJucyBhIHNlcXVlbmNlCi0gKiBvZiBub2RlcyBvYnRhaW5lZCBieSBpbnRlcnByZXRpbmcgJGFyZyBhcyBhbiB4czphbnlVUkkgYW5kIHJlc29sdmluZyBpdAotICogYWNjb3JkaW5nIHRvIHRoZSBtYXBwaW5nIHNwZWNpZmllZCBpbiBBdmFpbGFibGUgY29sbGVjdGlvbnMgZGVzY3JpYmVkIGluCi0gKiBTZWN0aW9uIEMuMiBEeW5hbWljIENvbnRleHQgQ29tcG9uZW50cy4gSWYgQXZhaWxhYmxlIGNvbGxlY3Rpb25zIHByb3ZpZGVzIGEKLSAqIG1hcHBpbmcgZnJvbSB0aGlzIHN0cmluZyB0byBhIHNlcXVlbmNlIG9mIG5vZGVzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGF0Ci0gKiBzZXF1ZW5jZS4gSWYgQXZhaWxhYmxlIGNvbGxlY3Rpb25zIG1hcHMgdGhlIHN0cmluZyB0byBhbiBlbXB0eSBzZXF1ZW5jZSwgCi0gKiB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IHNlcXVlbmNlLiBJZiBBdmFpbGFibGUgY29sbGVjdGlvbnMKLSAqIHByb3ZpZGVzIG5vIG1hcHBpbmcgZm9yIHRoZSBzdHJpbmcsIGFuIGVycm9yIGlzIHJhaXNlZCBbZXJyOkZPREMwMDA0XS4gSWYKLSAqICRhcmcgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNlcXVlbmNlIG9mIHRoZSBub2RlcyBpbiB0aGUKLSAqIGRlZmF1bHQgY29sbGVjdGlvbiBpbiB0aGUgZHluYW1pYyBjb250ZXh0LiBTZWUgU2VjdGlvbiBDLjIgRHluYW1pYyBDb250ZXh0Ci0gKiBDb21wb25lbnRzWFAuIElmIHRoZSB2YWx1ZSBvZiB0aGUgZGVmYXVsdCBjb2xsZWN0aW9uIGlzIHVuZGVmaW5lZCBhbiBlcnJvcgotICogaXMgcmFpc2VkIFtlcnI6Rk9EQzAwMDJdLgotICoKLSAqIElmIHRoZSAkYXJnIGlzIGEgcmVsYXRpdmUgeHM6YW55VVJJLCBpdCBpcyByZXNvbHZlZCBhZ2FpbnN0IHRoZSB2YWx1ZSBvZiB0aGUKLSAqIGJhc2UtVVJJIHByb3BlcnR5IGZyb20gdGhlIHN0YXRpYyBjb250ZXh0LiBJZiAkYXJnIGlzIG5vdCBhIHZhbGlkIHhzOmFueVVSSSwKLSAqIGFuIGVycm9yIGlzIHJhaXNlZCBbZXJyOkZPREMwMDA0XS4KLSAqCi0gKiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIGZ1bmN0aW9uIGJlaGF2ZXMgYXMgaWYgaXQgaGFkIGJlZW4gY2FsbGVkCi0gKiB3aXRob3V0IGFuIGFyZ3VtZW50LiBTZWUgYWJvdmUuCi0gKgotICogQnkgZGVmYXVsdCwgdGhpcyBmdW5jdGlvbiBpcyDCt3N0YWJsZcK3LiBUaGlzIG1lYW5zIHRoYXQgcmVwZWF0ZWQgY2FsbHMgb24gdGhlCi0gKiBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50IHdpbGwgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdC4gSG93ZXZlciwgZm9yCi0gKiBwZXJmb3JtYW5jZSByZWFzb25zLCBpbXBsZW1lbnRhdGlvbnMgbWF5IHByb3ZpZGUgYSB1c2VyIG9wdGlvbiB0byBldmFsdWF0ZQotICogdGhlIGZ1bmN0aW9uIHdpdGhvdXQgYSBndWFyYW50ZWUgb2Ygc3RhYmlsaXR5LiBUaGUgbWFubmVyIGluIHdoaWNoIGFueSBzdWNoCi0gKiBvcHRpb24gaXMgcHJvdmlkZWQgaXMgwrdpbXBsZW1lbnRhdGlvbi1kZWZpbmVkwrcuIElmIHRoZSB1c2VyIGhhcyBub3Qgc2VsZWN0ZWQKLSAqIHN1Y2ggYW4gb3B0aW9uLCBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGVpdGhlciByZXR1cm4gYSBzdGFibGUgcmVzdWx0IG9yCi0gKiBtdXN0IHJhaXNlIGFuIGVycm9yOiBbZXJyOkZPREMwMDAzXS4KLSAqLwotcHVibGljIGNsYXNzIEZuQ29sbGVjdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NPTExFQ1RJT05fVVJJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zL2NvbGxlY3Rpb24vZGVmYXVsdCI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Eb2MuCi0JICovCi0JcHVibGljIEZuQ29sbGVjdGlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjb2xsZWN0aW9uIiksIDAsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjb2xsZWN0aW9uKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBEb2Mgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkb2Mgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY29sbGVjdGlvbihDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gbnVsbDsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlpZiAoYXJnaXRlci5oYXNOZXh0KCkpIHsKLQkJCWFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIGdldENvbGxlY3Rpb24oREVGQVVMVF9DT0xMRUNUSU9OX1VSSSwgZGMpOwotCQl9Ci0JCQkKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJU3RyaW5nIHVyaSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJCi0JCQotCQl0cnkgewotCQkJbmV3IFVSSSh1cmkpOwotCQl9IGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZXgpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5kb2Nfbm90X2ZvdW5kKG51bGwpOwotCQl9Ci0JCQotCQlpZiAodXJpLmluZGV4T2YoIjoiKSA8IDApIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkQ29sbGVjdGlvbkFyZ3VtZW50KCk7Ci0JCX0KLQkJCi0KLQkJVVJJIHJlc29sdmVkID0gZGMucmVzb2x2ZV91cmkodXJpKTsKLQkJaWYgKHJlc29sdmVkID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZF9kb2MobnVsbCk7Ci0KLQkJcnMgPSBnZXRDb2xsZWN0aW9uKHVyaSwgZGMpOwotCQlpZiAocnMuZW1wdHkoKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5kb2Nfbm90X2ZvdW5kKG51bGwpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZ2V0Q29sbGVjdGlvbihTdHJpbmcgdXJpLCBEeW5hbWljQ29udGV4dCBkYykgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCU1hcDxTdHJpbmcsIExpc3Q8RG9jdW1lbnQ+PiBjb2xsZWN0aW9uTWFwID0gZGMuZ2V0X2NvbGxlY3Rpb25zKCk7Ci0JCUxpc3Q8RG9jdW1lbnQ+IGRvY0xpc3QgPSBjb2xsZWN0aW9uTWFwLmdldCh1cmkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGRvY0xpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCURvY3VtZW50IGRvYyA9IGRvY0xpc3QuZ2V0KGkpOwotCQkJcnMuYWRkKG5ldyBEb2NUeXBlKGRvYykpOwotCQl9Ci0JCXJldHVybiByczsKLQkJCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbXBhcmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db21wYXJlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MTI3OWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbXBhcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIAotICogPHA+Ci0gKiBTdHJpbmcgY29tcGFyaXNvbiBmdW5jdGlvbi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46Y29tcGFyZSgkY29tcGFyYW5kMSBhcyB4czpzdHJpbmc/LCAkY29tcGFyYW5kMiBhcyB4czpzdHJpbmc/KSBhcwotICogeHM6aW50ZWdlcj8KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIHJldHVybnMgLTEsIDAsIG9yIDEsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB2YWx1ZSBvZiAkY29tcGFyYW5kMQotICogaXMgcmVzcGVjdGl2ZWx5IGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YKLSAqICRjb21wYXJhbmQyLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmIHRoZSB2YWx1ZSBvZiAkY29tcGFyYW5kMiBiZWdpbnMgd2l0aCBhIHN0cmluZyB0aGF0IGlzIGVxdWFsIHRvIHRoZSB2YWx1ZQotICogb2YgJGNvbXBhcmFuZDEgKGFjY29yZGluZyB0byB0aGUgY29sbGF0aW9uIHRoYXQgaXMgdXNlZCkgYW5kIGhhcyBhZGRpdGlvbmFsCi0gKiBjb2RlIHBvaW50cyBmb2xsb3dpbmcgdGhhdCBiZWdpbm5pbmcgc3RyaW5nLCB0aGVuIHRoZSByZXN1bHQgaXMgLTEuIElmIHRoZQotICogdmFsdWUgb2YgJGNvbXBhcmFuZDEgYmVnaW5zIHdpdGggYSBzdHJpbmcgdGhhdCBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YKLSAqICRjb21wYXJhbmQyIGFuZCBoYXMgYWRkaXRpb25hbCBjb2RlIHBvaW50cyBmb2xsb3dpbmcgdGhhdCBiZWdpbm5pbmcgc3RyaW5nLAotICogdGhlbiB0aGUgcmVzdWx0IGlzIDEuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgZWl0aGVyIGFyZ3VtZW50IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIHJlc3VsdCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGbkNvbXBhcmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBvZiBGbkNvbXBhcmUuCi0JICovCi0JcHVibGljIEZuQ29tcGFyZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjb21wYXJlIiksIDIsIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlzIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgY29tcGFyaXNvbiBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY29tcGFyZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgY29tcGFyZWQgKG9wdGlvbmFsIDNyZCBhcmd1bWVudCBpcyB0aGUgY29sbGF0aW9uKQotCSAqIEBwYXJhbSBkeW5hbWljQ29udGV4dAotCSAqIAkgICAgICAgQ3VycmVudCBkeW5hbWljIGNvbnRleHQgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY29tcGFyZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQlTdHJpbmcgY29sbGF0aW9uVXJpID0gZHluYW1pY0NvbnRleHQuZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpOwotCQlpZiAoYXJnaXRlci5oYXNOZXh0KCkpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIGNvbGxBcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQkJY29sbGF0aW9uVXJpID0gY29sbEFyZy5maXJzdCgpLnN0cmluZ192YWx1ZSgpOwotCQl9Ci0KLQkJWFNTdHJpbmcgeHN0cjEgPSBhcmcxLmVtcHR5KCkgPyBudWxsIDogKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCk7Ci0JCVhTU3RyaW5nIHhzdHIyID0gYXJnMi5lbXB0eSgpID8gbnVsbCA6IChYU1N0cmluZykgYXJnMi5maXJzdCgpOwotCi0JCUJpZ0ludGVnZXIgcmVzdWx0ID0gY29tcGFyZV9zdHJpbmcoY29sbGF0aW9uVXJpLCB4c3RyMSwgeHN0cjIsIGR5bmFtaWNDb250ZXh0KTsKLQkJaWYgKHJlc3VsdCAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihyZXN1bHQpKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwkJCQotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBCaWdJbnRlZ2VyIGNvbXBhcmVfc3RyaW5nKFN0cmluZyBjb2xsYXRpb25VcmksIFhTU3RyaW5nIHhzdHIxLAotCQkJWFNTdHJpbmcgeHN0cjIsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29tcGFyYXRvciBjb2xsYXRvciA9IGR5bmFtaWNDb250ZXh0LmdldF9jb2xsYXRpb24oY29sbGF0aW9uVXJpKTsKLQkJaWYgKGNvbGxhdG9yID09IG51bGwpIHRocm93IER5bmFtaWNFcnJvci51bnN1cHBvcnRlZF9jb2xsYXRpb24oY29sbGF0aW9uVXJpKTsKLQotCQlpZiAoeHN0cjEgPT0gbnVsbCB8fCB4c3RyMiA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQkJCi0JCWludCByZXQgPSBjb2xsYXRvci5jb21wYXJlKHhzdHIxLnZhbHVlKCksIHhzdHIyLnZhbHVlKCkpOwotCi0JCWlmIChyZXQgPT0gMCkKLQkJCXJldHVybiBCaWdJbnRlZ2VyLlpFUk87Ci0JCWVsc2UgaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gQmlnSW50ZWdlci52YWx1ZU9mKC0xKTsKLQkJZWxzZQotCQkJcmV0dXJuIEJpZ0ludGVnZXIuT05FOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29uY2F0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29uY2F0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNTNmYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbmNhdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIDxwPgotICogU2VxdWVuY2UgY29uY2F0ZW5hdGlvbiBmdW5jdGlvbi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46Y29uY2F0KCRhcmcxIGFzIHhkdDphbnlBdG9taWNUeXBlPywgJGFyZzIgYXMgeGR0OmFueUF0b21pY1R5cGU/LAotICogLi4uICkgYXMgeHM6c3RyaW5nCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyBhY2NlcHRzIHR3byBvciBtb3JlIHhkdDphbnlBdG9taWNUeXBlIGFyZ3VtZW50cyBhbmQgY29udmVydHMgdGhlbQotICogdG8geHM6c3RyaW5nLiBJdCB0aGVuIHJldHVybnMgdGhlIHhzOnN0cmluZyB0aGF0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQotICogdmFsdWVzIG9mIGl0cyBhcmd1bWVudHMgYWZ0ZXIgY29udmVyc2lvbi4gSWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgdGhlCi0gKiBlbXB0eSBzZXF1ZW5jZSwgdGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgdGhlIHplcm8tbGVuZ3RoIHN0cmluZy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGUgY29uY2F0KCkgZnVuY3Rpb24gaXMgc3BlY2lmaWVkIHRvIGFsbG93IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgYXJndW1lbnRzCi0gKiB0aGF0IGFyZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGbkNvbmNhdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkNvbmNhdC4KLQkgKi8KLQlwdWJsaWMgRm5Db25jYXQoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY29uY2F0IiksIDIsIEludGVnZXIuTUFYX1ZBTFVFKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpcyBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGNvbmNhdChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDb25jYXRlbmF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgY29uY2F0ZW5hdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGNvbmNhdChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIHNhbml0eSBjaGVjawotCQlpZiAoYXJncy5zaXplKCkgPCAyKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJU3RyaW5nIHJlc3VsdCA9ICIiOwotCi0JCS8vIGdvIHRocm91Z2ggYXJncwotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlmb3IgKEl0ZXJhdG9yIGFyZ2kgPSBhcmdzLml0ZXJhdG9yKCk7IGFyZ2kuaGFzTmV4dCgpOykgewotCQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQotCQkJaW50IHNpemUgPSBhcmcuc2l6ZSgpOwotCi0JCQkvLyBzYW5pdHkgY2hlY2sKLQkJCWlmIChzaXplID4gMSkKLQkJCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQkJCQotCQkJYnVmLmFwcGVuZChhdC5zdHJpbmdfdmFsdWUoKSk7Ci0KLQkJfQotCQlyZXN1bHQgPSBidWYudG9TdHJpbmcoKTsKLQkJCi0JCXJzLmFkZChuZXcgWFNTdHJpbmcocmVzdWx0KSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db250YWlucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbnRhaW5zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MmE5NjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbnRhaW5zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyNjI3NjUgLSBjaGVjayBmb3IgZW1wdHkgc3RyaW5nIGluIHNlY29uZCBhcmcgYmVmb3JlIGZpcnN0LiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWUgb2YgJGFyZzEgY29udGFpbnMKLSAqIChhdCB0aGUgYmVnaW5uaW5nLCBhdCB0aGUgZW5kLCBvciBhbnl3aGVyZSB3aXRoaW4pIGF0IGxlYXN0IG9uZSBzZXF1ZW5jZSBvZgotICogY29sbGF0aW9uIHVuaXRzIHRoYXQgcHJvdmlkZXMgYSBtaW5pbWFsIG1hdGNoIHRvIHRoZSBjb2xsYXRpb24gdW5pdHMgaW4gdGhlCi0gKiB2YWx1ZSBvZiAkYXJnMiwgYWNjb3JkaW5nIHRvIHRoZSBjb2xsYXRpb24gdGhhdCBpcyB1c2VkLgotICovCi1wdWJsaWMgY2xhc3MgRm5Db250YWlucyBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkNvbnRhaW5zLgotCSAqLwotCXB1YmxpYyBGbkNvbnRhaW5zKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImNvbnRhaW5zIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjb250YWlucyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDb250YWlucyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpjb250YWlucyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjb250YWlucyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlTdHJpbmcgc3RyMSA9ICIiOwotCQlTdHJpbmcgc3RyMiA9ICIiOwotCQlpZiAoIWFyZzEuZW1wdHkoKSkKLQkJCXN0cjEgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCWlmICghYXJnMi5lbXB0eSgpKQotCQkJc3RyMiA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlpbnQgc3RyMWxlbiA9IHN0cjEubGVuZ3RoKCk7Ci0JCWludCBzdHIybGVuID0gc3RyMi5sZW5ndGgoKTsKLQotCQlpZiAoc3RyMmxlbiA9PSAwKSB7Ci0JCQlycy5hZGQobmV3IFhTQm9vbGVhbih0cnVlKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJCi0JCWlmIChzdHIxbGVuID09IDApIHsKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKGZhbHNlKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlpZiAoc3RyMS5pbmRleE9mKHN0cjIpID09IC0xKQotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQkJZWxzZQotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db3VudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvdW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjhiYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvdW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB2YWx1ZSBvZiAkYXJnLiBSZXR1cm5zIDAgaWYgJGFyZyBpcyB0aGUKLSAqIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Db3VudCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Db3VudC4KLQkgKi8KLQlwdWJsaWMgRm5Db3VudCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjb3VudCIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY291bnQoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ291bnQgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Y291bnQgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY291bnQoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGFyZy5zaXplKCkpKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnREYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ3VycmVudERhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUwMjUzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ3VycmVudERhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg2NDUyIC0gYWx3YXlzIHJldHVybiB0aGUgc3RhYmxlIGRhdGUvdGltZSBmcm9tIGR5bmFtaWMgY29udGV4dAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHhzOmRhdGUoZm46Y3VycmVudC1kYXRlVGltZSgpKS4gVGhpcyBpcyBhIHhzOmRhdGUgKHdpdGggdGltZXpvbmUpCi0gKiB0aGF0IGlzIGN1cnJlbnQgYXQgc29tZSB0aW1lIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiBhIHF1ZXJ5IG9yCi0gKiB0cmFuc2Zvcm1hdGlvbiBpbiB3aGljaCBmbjpjdXJyZW50LWRhdGUoKSBpcyBleGVjdXRlZC4gVGhpcyBmdW5jdGlvbiBpcwotICogc3RhYmxlLiBUaGUgcHJlY2lzZSBpIGluc3RhbnQgZHVyaW5nIHRoZSBxdWVyeSBvciB0cmFuc2Zvcm1hdGlvbiByZXByZXNlbnRlZAotICogYnkgdGhlIHZhbHVlIG9mIGZuOmN1cnJlbnQtZGF0ZSgpIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KLSAqLwotcHVibGljIGNsYXNzIEZuQ3VycmVudERhdGUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuQ3VycmVudERhdGUuCi0JICovCi0JcHVibGljIEZuQ3VycmVudERhdGUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY3VycmVudC1kYXRlIiksIDApOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjdXJyZW50X2RhdGUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEN1cnJlbnQtRGF0ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmN1cnJlbnQtZGF0ZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjdXJyZW50X2RhdGUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQotCQlBbnlUeXBlIHJlcyA9IG5ldyBYU0RhdGUoZGMuY3VycmVudF9kYXRlX3RpbWUoKSwgZGMudHooKSk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnREYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnREYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmY5NGY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50RGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg2NDUyIC0gYWx3YXlzIHJldHVybiB0aGUgc3RhYmxlIGRhdGUvdGltZSBmcm9tIGR5bmFtaWMgY29udGV4dAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB4czpkYXRlVGltZSAod2l0aCB0aW1lem9uZSkgZnJvbSB0aGUgZHluYW1pYyBjb250ZXh0LiAoU2VlCi0gKiBTZWN0aW9uIEMuMiBEeW5hbWljIENvbnRleHQgQ29tcG9uZW50c1hQLikgVGhpcyBpcyBhIHhzOmRhdGVUaW1lIHRoYXQgaXMKLSAqIGN1cnJlbnQgYXQgc29tZSB0aW1lIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiBhIHF1ZXJ5IG9yIHRyYW5zZm9ybWF0aW9uIGluCi0gKiB3aGljaCBmbjpjdXJyZW50LWRhdGVUaW1lKCkgaXMgZXhlY3V0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgc3RhYmxlLiBUaGUgcHJlY2lzZQotICogaW5zdGFudCBkdXJpbmcgdGhlIHF1ZXJ5IG9yIHRyYW5zZm9ybWF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSB2YWx1ZSBvZgotICogZm46Y3VycmVudC1kYXRlVGltZSgpIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KLSAqLwotcHVibGljIGNsYXNzIEZuQ3VycmVudERhdGVUaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkN1cnJlbnREYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5DdXJyZW50RGF0ZVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY3VycmVudC1kYXRlVGltZSIpLCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY3VycmVudF9kYXRlVGltZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQ3VycmVudC1EYXRlLVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpjdXJyZW50LWRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGN1cnJlbnRfZGF0ZVRpbWUoQ29sbGVjdGlvbiBhcmdzLAotCQkJRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQotCQlBbnlUeXBlIHJlcyA9IG5ldyBYU0RhdGVUaW1lKGRjLmN1cnJlbnRfZGF0ZV90aW1lKCksIGRjLnR6KCkpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50VGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnRUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YTlkZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnRUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4NjQ1MiAtIGFsd2F5cyByZXR1cm4gdGhlIHN0YWJsZSBkYXRlL3RpbWUgZnJvbSBkeW5hbWljIGNvbnRleHQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB4czp0aW1lKGZuOmN1cnJlbnQtZGF0ZVRpbWUoKSkuIFRoaXMgaXMgYSB4czp0aW1lICh3aXRoIHRpbWV6b25lKSB0aGF0Ci0gKiBpcyBjdXJyZW50IGF0IHNvbWUgdGltZSBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgYSBxdWVyeSBvciB0cmFuc2Zvcm1hdGlvbiBpbgotICogd2hpY2ggZm46Y3VycmVudC10aW1lKCkgaXMgZXhlY3V0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgc3RhYmxlLiBUaGUgcHJlY2lzZQotICogaW5zdGFudCBkdXJpbmcgdGhlIHF1ZXJ5IG9yIHRyYW5zZm9ybWF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSB2YWx1ZSBvZgotICogZm46Y3VycmVudC10aW1lKCkgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5DdXJyZW50VGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5DdXJyZW50VGltZS4KLQkgKi8KLQlwdWJsaWMgRm5DdXJyZW50VGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjdXJyZW50LXRpbWUiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGN1cnJlbnRfdGltZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQ3VycmVudC1UaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Y3VycmVudC10aW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGN1cnJlbnRfdGltZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAwOwotCi0JCUFueVR5cGUgcmVzID0gbmV3IFhTVGltZShkYy5jdXJyZW50X2RhdGVfdGltZSgpLCBkYy50eigpKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF0YS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRhNmRkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF0YS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzYxMzQgLSBpbXByb3ZlbWVudHMgdG8gc2NoZW1hIGF3YXJlIHByaW1pdGl2ZSB0eXBlIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZS9lbGVtZW50IG5vZGVzIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogZm46ZGF0YSB0YWtlcyBhIHNlcXVlbmNlIG9mIGl0ZW1zIGFuZCByZXR1cm5zIGEgc2VxdWVuY2Ugb2YgYXRvbWljIHZhbHVlcy4KLSAqIFRoZSByZXN1bHQgb2YgZm46ZGF0YSBpcyB0aGUgc2VxdWVuY2Ugb2YgYXRvbWljIHZhbHVlcyBwcm9kdWNlZCBieSBhcHBseWluZwotICogdGhlIGZvbGxvd2luZyBydWxlcyB0byBlYWNoIGl0ZW0gaW4gJGFyZzogLSBJZiB0aGUgaXRlbSBpcyBhbiBhdG9taWMgdmFsdWUsCi0gKiBpdCBpcyByZXR1cm5lZC4gLSBJZiB0aGUgaXRlbSBpcyBhIG5vZGUsIGZuOmRhdGEoKSByZXR1cm5zIHRoZSB0eXBlZCB2YWx1ZSBvZgotICogdGhlIG5vZGUgYXMgZGVmaW5lZCBieSB0aGUgYWNjZXNzb3IgZnVuY3Rpb24gZG06dHlwZWQtdmFsdWUgaW4gU2VjdGlvbiA1LjYKLSAqIHR5cGVkLXZhbHVlIEFjY2Vzc29yIGluIHRoZSBzcGVjaWZpY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRm5EYXRhIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRhdGEuCi0JICovCi0JcHVibGljIEZuRGF0YSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkYXRhIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB7Ci0JCS8vIDEgYXJndW1lbnQgb25seSEKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBhdG9taXplKGFyZ3VtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBBdG9taXplIGEgUmVzdWx0U2VxdW5jZSBhcmd1bWVudCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgYXRvbWl6ZShSZXN1bHRTZXF1ZW5jZSBhcmcpIHsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJnLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBhdCA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJaWYgKGF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkgewotCQkJCXJzLmFkZChhdCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGF0OwotCQkJCXJzLmNvbmNhdChudC50eXBlZF92YWx1ZSgpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYXNzZXJ0IGZhbHNlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIEF0b21pemUgYSBSZXN1bHRTZXF1bmNlIGFyZ3VtZW50IGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgZmFzdF9hdG9taXplKFJlc3VsdFNlcXVlbmNlIGFyZykgewotCQlmb3IgKExpc3RJdGVyYXRvciBpID0gYXJnLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBhdCA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJaWYgKGF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvLyBYWFggcHJvbGx5IHdyb25nIQotCQkJZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJCU5vZGVUeXBlIG50ID0gKE5vZGVUeXBlKSBhdDsKLQotCQkJCWkuc2V0KG50LnR5cGVkX3ZhbHVlKCkuZmlyc3QoKSk7Ci0JCQl9IGVsc2UKLQkJCQlhc3NlcnQgZmFsc2U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBdG9taXplIGFyZ3VtZW50IGV4cHJlc3Npb24gb2YgYW55IHR5cGUuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBBbnlUeXBlIGF0b21pemUoQW55VHlwZSBhcmcpIHsKLQkJaWYgKGFyZyBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpCi0JCQlyZXR1cm4gYXJnOwotCQllbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGFyZzsKLQotCQkJcmV0dXJuIG50LnR5cGVkX3ZhbHVlKCkuZmlyc3QoKTsKLQkJfSBlbHNlIHsKLQkJCWFzc2VydCBmYWxzZTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRhdGVUaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF0ZVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ViNWU5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MTgyMiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gICogQSBzcGVjaWFsIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RpbmcgYSB4czpkYXRlVGltZSB2YWx1ZSBmcm9tIGEgeHM6ZGF0ZQotICAqIHZhbHVlIGFuZCBhIHhzOnRpbWUgdmFsdWUuCi0gICogcmVmOiBTZWN0aW9uIDUuMiBvZiB0aGUgRiZPIHNwZWMsIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoLWZ1bmN0aW9ucy8uCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkRhdGVUaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuRGF0ZVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZGF0ZVRpbWUiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRhdGVUaW1lKGFyZ3MsIHN0YXRpY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBmdW5jdGlvbiB1c2luZyB0aGUgYXJndW1lbnRzIHBhc3NlZC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgZm46ZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZGF0ZVRpbWUoQ29sbGVjdGlvbiBhcmdzLCBTdGF0aWNDb250ZXh0IHNjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVhTRGF0ZSBwYXJhbTEgPSAoWFNEYXRlKWFyZzEuZmlyc3QoKTsKLQkJWFNUaW1lIHBhcmFtMiA9IChYU1RpbWUpYXJnMi5maXJzdCgpOwotCQkKLQkJLy8gaWYgZWl0aGVyIG9mIHRoZSBwYXJhbWV0ZXIgaXMgYW4gZW1wdHkgc2VxdWVuY2UsIHRoZSByZXN1bHQKLQkJLy8gaXMgYW4gZW1wdHkgc2VxdWVuY2UKLQkJaWYgKHBhcmFtMSA9PSBudWxsIHx8IHBhcmFtMiA9PSBudWxsKSB7Ci0JCSAgcmV0dXJuIHJzOwkKLQkJfQotCQkKLQkJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJY2FsLnNldChwYXJhbTEueWVhcigpLCBwYXJhbTEubW9udGgoKSAtIDEsIHBhcmFtMS5kYXkoKSk7Ci0JCWNhbC5zZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIHBhcmFtMi5ob3VyKCkpOwotCQljYWwuc2V0KENhbGVuZGFyLk1JTlVURSwgcGFyYW0yLm1pbnV0ZSgpKTsKLQkJY2FsLnNldChDYWxlbmRhci5TRUNPTkQsIChEb3VibGUudmFsdWVPZihNYXRoLmZsb29yKHBhcmFtMi5zZWNvbmQoKSkpLmludFZhbHVlKCkpKTsKLQkJY2FsLnNldChDYWxlbmRhci5NSUxMSVNFQ09ORCwgMCk7Ci0JCQotCQlYU0R1cmF0aW9uIGRhdGVUaW1lWm9uZSA9IHBhcmFtMS50eigpOwotCQlYU0R1cmF0aW9uIHRpbWVUaW1lWm9uZSA9IHBhcmFtMi50eigpOwotCQlpZiAoKGRhdGVUaW1lWm9uZSAhPSBudWxsICYmIHRpbWVUaW1lWm9uZSAhPSBudWxsKSAmJgotCQkgICAgICFkYXRlVGltZVpvbmUuc3RyaW5nX3ZhbHVlKCkuZXF1YWxzKHRpbWVUaW1lWm9uZS5zdHJpbmdfdmFsdWUoKSkpIHsKLQkJICAvLyBpdCdzIGFuIGVycm9yLCBpZiB0aGUgYXJndW1lbnRzIGhhdmUgZGlmZmVyZW50IHRpbWV6b25lcwotCQkgIHRocm93IER5bmFtaWNFcnJvci5pbmNvbnNpc3RlbnRUaW1lWm9uZSgpOwotCQl9IGVsc2UgaWYgKGRhdGVUaW1lWm9uZSA9PSBudWxsICYmIHRpbWVUaW1lWm9uZSAhPSBudWxsKSB7Ci0gICAgICAgICAgIHJzLmFkZChuZXcgWFNEYXRlVGltZShjYWwsIHRpbWVUaW1lWm9uZSkpOwotCQl9IGVsc2UgaWYgKGRhdGVUaW1lWm9uZSAhPSBudWxsICYmIHRpbWVUaW1lWm9uZSA9PSBudWxsKSB7Ci0JCSAgIHJzLmFkZChuZXcgWFNEYXRlVGltZShjYWwsIGRhdGVUaW1lWm9uZSkpOwotCQl9Ci0JCWVsc2UgaWYgKChkYXRlVGltZVpvbmUgIT0gbnVsbCAmJiB0aW1lVGltZVpvbmUgIT0gbnVsbCkgJiYKLQkJCSAgICAgZGF0ZVRpbWVab25lLnN0cmluZ192YWx1ZSgpLmVxdWFscyh0aW1lVGltZVpvbmUuc3RyaW5nX3ZhbHVlKCkpKSB7Ci0JCSAgIHJzLmFkZChuZXcgWFNEYXRlVGltZShjYWwsIGRhdGVUaW1lWm9uZSkpOwotCQl9Ci0JCWVsc2UgewotCQkgICBycy5hZGQobmV3IFhTRGF0ZVRpbWUoY2FsLCBudWxsKSk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5RnJvbURhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EYXlGcm9tRGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGIzMWNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EYXlGcm9tRGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciBiZXR3ZWVuIDEgYW5kIDMxLCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nIHRoZSBkYXkKLSAqIGNvbXBvbmVudCBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mICRhcmcuIElmICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLAotICogcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkRheUZyb21EYXRlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRGF5RnJvbURhdGUuCi0JICovCi0JcHVibGljIEZuRGF5RnJvbURhdGUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZGF5LWZyb20tZGF0ZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZGF5X2Zyb21fZGF0ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBEYXktRnJvbS1EYXRlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRheS1mcm9tLWRhdGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZGF5X2Zyb21fZGF0ZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRGF0ZSBkdCA9IChYU0RhdGUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQuZGF5KCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5RnJvbURhdGVUaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5RnJvbURhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZTNkNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheUZyb21EYXRlVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciBiZXR3ZWVuIDEgYW5kIDMxLCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nIHRoZSBkYXkKLSAqIGNvbXBvbmVudCBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mICRhcmcuIElmICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLAotICogcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkRheUZyb21EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRheUZyb21EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5EYXlGcm9tRGF0ZVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZGF5LWZyb20tZGF0ZVRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRheV9mcm9tX2RhdGVfdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBEYXktRnJvbS1EYXRlVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkYXktZnJvbS1kYXRldGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkYXlfZnJvbV9kYXRlX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQuZGF5KCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EYXlzRnJvbUR1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5c0Zyb21EdXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzgzNDUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EYXlzRnJvbUR1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgZXhwZWN0ZWQgeHM6ZHVyYXRpb24gYXJndW1lbnQuIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGRheXMgY29tcG9uZW50IGluIHRoZSBjYW5vbmljYWwKLSAqIGxleGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mICRhcmcuIFRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLiBJZgotICogJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5EYXlzRnJvbUR1cmF0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRGF5c0Zyb21EdXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgRm5EYXlzRnJvbUR1cmF0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRheXMtZnJvbS1kdXJhdGlvbiIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZGF5c19mcm9tX2R1cmF0aW9uKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIERheXMtRnJvbS1EdXJhdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkYXlzLWZyb20tZHVyYXRpb24gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZGF5c19mcm9tX2R1cmF0aW9uKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEdXJhdGlvbiBkdGQgPSAoWFNEdXJhdGlvbikgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdGQuZGF5cygpOwotCi0JCWlmIChkdGQubmVnYXRpdmUoKSkKLQkJCXJlcyAqPSAtMTsKLQotCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRHVyYXRpb24oKSwKLQkJCQkJU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGVlcEVxdWFsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGVlcEVxdWFsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiM2IwODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRlZXBFcXVhbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgb3JnLnczYy5kb20uKjsKLQotLyoqCi0gKiBUaGUgZnVuY3Rpb24gYXNzZXNzZXMgd2hldGhlciB0d28gc2VxdWVuY2VzIGFyZSBkZWVwLWVxdWFsIHRvIGVhY2ggb3RoZXIuIFRvCi0gKiBiZSBkZWVwLWVxdWFsLCB0aGV5IG11c3QgY29udGFpbiBpdGVtcyB0aGF0IGFyZSBwYWlyd2lzZSBkZWVwLWVxdWFsOyBhbmQgZm9yCi0gKiB0d28gaXRlbXMgdG8gYmUgZGVlcC1lcXVhbCwgdGhleSBtdXN0IGVpdGhlciBieSBhdG9taWMgdmFsdWVzIHRoYXQgY29tcGFyZQotICogZXF1YWwsIG9yIG5vZGVzIG9mIHRoZSBzYW1lIGtpbmQsIHdpdGggdGhlIHNhbWUgbmFtZSwgd2hvc2UgY2hpbGRyZW4gYXJlCi0gKiBkZWVwLWVxdWFsLiBUaGlzIGlzIGRlZmluZWQgaW4gbW9yZSBkZXRhaWwgYmVsb3cuIFRoZSAkY29sbGF0aW9uIGFyZ3VtZW50Ci0gKiBpZGVudGlmaWVzIGEgY29sbGF0aW9uIHdoaWNoIGlzIHVzZWQgYXQgYWxsIGxldmVscyBvZiByZWN1cnNpb24gd2hlbiBzdHJpbmdzCi0gKiBhcmUgY29tcGFyZWQgKGJ1dCBub3Qgd2hlbiBuYW1lcyBhcmUgY29tcGFyZWQpLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGluCi0gKiA3LjMuMSBDb2xsYXRpb25zIGluIHRoZSBzcGVjaWZpY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRm5EZWVwRXF1YWwgZXh0ZW5kcyBBYnN0cmFjdENvbGxhdGlvbkVxdWFsRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRlZXBFcXVhbC4KLQkgKi8KLQlwdWJsaWMgRm5EZWVwRXF1YWwoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZGVlcC1lcXVhbCIpLCAyLCAzKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZGVlcF9lcXVhbChhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogRGVlcC1FcXVhbCBleHByZXNzaW9uIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGNvbnRleHQKLQkgKiAgICAgICAgICAgIER5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkZWVwLWVxdWFsIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGRlZXBfZXF1YWwoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmczID0gbnVsbDsKLQkJU3RyaW5nIGNvbGxhdGlvblVSSSA9IGNvbnRleHQuZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpOwotCQlpZiAoY2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlhcmczID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCQlpZiAoIWFyZzMuZW1wdHkoKSkgewotCQkJCWNvbGxhdGlvblVSSSA9IGFyZzMuZmlyc3QoKS5zdHJpbmdfdmFsdWUoKTsKLQkJCX0KLQkJfQotCi0JCWJvb2xlYW4gcmVzdWx0ID0gZGVlcF9lcXVhbChhcmcxLCBhcmcyLCBjb250ZXh0LCBjb2xsYXRpb25VUkkpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKHJlc3VsdCkpOwotCX0KLQotCS8qKgotCSAqIERlZXAtRXF1YWwgYm9vbGVhbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIG9uZQotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHR3bwotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIGNvbnRleHQKLQkgKiAgICAgICAgICAgIEN1cnJlbnQgZHluYW1pYyBjb250ZXh0IAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRlZXAtZXF1YWwgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWVwX2VxdWFsKFJlc3VsdFNlcXVlbmNlIG9uZSwgUmVzdWx0U2VxdWVuY2UgdHdvLCBEeW5hbWljQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgY29sbGF0aW9uVVJJKSB7Ci0JCWlmIChvbmUuZW1wdHkoKSAmJiB0d28uZW1wdHkoKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCWlmIChvbmUuc2l6ZSgpICE9IHR3by5zaXplKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJSXRlcmF0b3Igb25laSA9IG9uZS5pdGVyYXRvcigpOwotCQlJdGVyYXRvciB0d29pID0gdHdvLml0ZXJhdG9yKCk7Ci0KLQkJd2hpbGUgKG9uZWkuaGFzTmV4dCgpKSB7Ci0JCQlBbnlUeXBlIGEgPSAoQW55VHlwZSkgb25laS5uZXh0KCk7Ci0JCQlBbnlUeXBlIGIgPSAoQW55VHlwZSkgdHdvaS5uZXh0KCk7Ci0KLQkJCWlmICghZGVlcF9lcXVhbChhLCBiLCBjb250ZXh0LCBjb2xsYXRpb25VUkkpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBEZWVwLUVxdWFsIGJvb2xlYW4gb3BlcmF0aW9uIGZvciBpbnB1dHMgb2YgYW55IHR5cGUuCi0JICogCi0JICogQHBhcmFtIG9uZQotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHR3bwotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIGNvbnRleHQgCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZGVlcC1lcXVhbCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGRlZXBfZXF1YWwoQW55VHlwZSBvbmUsIEFueVR5cGUgdHdvLCBEeW5hbWljQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgY29sbGF0aW9uVVJJKSB7Ci0JCWlmICgob25lIGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkgJiYgKHR3byBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpKQotCQkJcmV0dXJuIGRlZXBfZXF1YWwoKEFueUF0b21pY1R5cGUpIG9uZSwgKEFueUF0b21pY1R5cGUpIHR3bywgY29udGV4dCwgY29sbGF0aW9uVVJJKTsKLQotCQllbHNlIGlmICgoKG9uZSBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpICYmICh0d28gaW5zdGFuY2VvZiBOb2RlVHlwZSkpCi0JCQkJfHwgKChvbmUgaW5zdGFuY2VvZiBOb2RlVHlwZSkgJiYgKHR3byBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJZWxzZSBpZiAoKG9uZSBpbnN0YW5jZW9mIE5vZGVUeXBlKSAmJiAodHdvIGluc3RhbmNlb2YgTm9kZVR5cGUpKQotCQkJcmV0dXJuIGRlZXBfZXF1YWwoKE5vZGVUeXBlKSBvbmUsIChOb2RlVHlwZSkgdHdvLCBjb250ZXh0KTsKLQkJZWxzZSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBEZWVwLUVxdWFsIGJvb2xlYW4gb3BlcmF0aW9uIGZvciBpbnB1dHMgb2YgYW55IGF0b21pYyB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBvbmUKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSB0d28KLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRlZXAtZXF1YWwgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWVwX2VxdWFsKEFueUF0b21pY1R5cGUgb25lLCBBbnlBdG9taWNUeXBlIHR3bywgRHluYW1pY0NvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgewotCQlpZiAoIShvbmUgaW5zdGFuY2VvZiBDbXBFcSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmICghKHR3byBpbnN0YW5jZW9mIENtcEVxKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlDbXBFcSBhID0gKENtcEVxKSBvbmU7Ci0KLQkJdHJ5IHsKLQkJCWlmIChpc051bWVyaWMob25lLCB0d28pKSB7Ci0JCQkJTnVtZXJpY1R5cGUgbnVtZXJpYyA9IChOdW1lcmljVHlwZSkgb25lOwotCQkJCWlmIChudW1lcmljLmVxKHR3bywgY29udGV4dCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJWFNTdHJpbmcgdmFsdWUxID0gbmV3IFhTU3RyaW5nKG9uZS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJCWlmICh2YWx1ZTEuZXEodHdvLCBjb250ZXh0KSkgewotCQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChhLmVxKHR3bywgY29udGV4dCkpCi0JCQkJcmV0dXJuIHRydWU7Ci0JCQkKLQkJCWlmIChuZWVkc1N0cmluZ0NvbXBhcmlzb24ob25lLCB0d28pKSB7Ci0JCQkJWFNTdHJpbmcgeHN0cjEgPSBuZXcgWFNTdHJpbmcob25lLnN0cmluZ192YWx1ZSgpKTsKLQkJCQlYU1N0cmluZyB4c3RyMiA9IG5ldyBYU1N0cmluZyh0d28uc3RyaW5nX3ZhbHVlKCkpOwotCQkJCWlmIChGbkNvbXBhcmUuY29tcGFyZV9zdHJpbmcoY29sbGF0aW9uVVJJLCB4c3RyMSwgeHN0cjIsCi0JCQkJCQljb250ZXh0KS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJldHVybiBmYWxzZTsgLy8gWFhYID8/PwotCQl9Ci0JfQotCi0JLyoqCi0JICogRGVlcC1FcXVhbCBib29sZWFuIG9wZXJhdGlvbiBmb3IgaW5wdXRzIG9mIG5vZGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gb25lCi0JICogICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gdHdvCi0JICogICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkZWVwLWVxdWFsIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVlcF9lcXVhbChOb2RlVHlwZSBvbmUsIE5vZGVUeXBlIHR3bywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgewotCQlOb2RlIGEgPSBvbmUubm9kZV92YWx1ZSgpOwotCQlOb2RlIGIgPSB0d28ubm9kZV92YWx1ZSgpOwotCQkKLQkJaWYgKGEuaXNFcXVhbE5vZGUoYikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EZWZhdWx0Q29sbGF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGVmYXVsdENvbGxhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTQ3MDk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EZWZhdWx0Q29sbGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIDxwPgotICogU3VtbWFyeTogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGRlZmF1bHQgY29sbGF0aW9uIHByb3BlcnR5IGZyb20gdGhlIHN0YXRpYwotICogY29udGV4dC4gQ29tcG9uZW50cyBvZiB0aGUgc3RhdGljIGNvbnRleHQgYXJlIGRpc2N1c3NlZCBpbiBTZWN0aW9uIEMuMSBTdGF0aWMKLSAqIENvbnRleHQgQ29tcG9uZW50cy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBOb3RlOgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoZSBkZWZhdWx0IGNvbGxhdGlvbiBwcm9wZXJ0eSBjYW4gbmV2ZXIgYmUgdW5kZWZpbmVkLiBJZiBpdCBpcyBub3QKLSAqIGV4cGxpY2l0bHkgZGVmaW5lZCwgYSBzeXN0ZW0gZGVmaW5lZCBkZWZhdWx0IGNhbiBiZSBpbnZva2VkLiBJZiB0aGlzIGlzIG5vdAotICogcHJvdmlkZWQsIHRoZSBVbmljb2RlIGNvZGUgcG9pbnQgY29sbGF0aW9uCi0gKiAoaHR0cDovL3d3dy53My5vcmcvMjAwNS94cGF0aC1mdW5jdGlvbnMvY29sbGF0aW9uL2NvZGVwb2ludCkgaXMgdXNlZC4KLSAqIDwvcD4KLSAqIAotICogQGF1dGhvciBkY2FydmVyCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkRlZmF1bHRDb2xsYXRpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQlwdWJsaWMgRm5EZWZhdWx0Q29sbGF0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRlZmF1bHQtY29sbGF0aW9uIiksIDApOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhkeW5hbWljX2NvbnRleHQoKS5kZWZhdWx0X2NvbGxhdGlvbl9uYW1lKCkpKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRpc3RpbmN0VmFsdWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGlzdGluY3RWYWx1ZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNjOTA0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGlzdGluY3RWYWx1ZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBkaXN0aW5jdC12YWx1ZXMgY29tcGFyaXNvbiBsb2dpYy4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgaXMgcHJvYmFibHkgYW4gZWFzaWVyIHdheSB0byBkbyB0aGUgY29tcGFyaXNvbi4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc2VxdWVuY2UgdGhhdCByZXN1bHRzIGZyb20gcmVtb3ZpbmcgZnJvbSAkYXJnIGFsbCBidXQgb25lIG9mIGEKLSAqIHNldCBvZiB2YWx1ZXMgdGhhdCBhcmUgZXEgdG8gb25lIG90aGVyLiBWYWx1ZXMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQsIGkuZS4KLSAqIHRoZSBlcSBvcGVyYXRvciBpcyBub3QgZGVmaW5lZCBmb3IgdGhlaXIgdHlwZXMsIGFyZSBjb25zaWRlcmVkIHRvIGJlCi0gKiBkaXN0aW5jdC4gVmFsdWVzIG9mIHR5cGUgeGR0OnVudHlwZWRBdG9taWMgYXJlIGNvbXBhcmVkIGFzIGlmIHRoZXkgd2VyZSBvZgotICogdHlwZSB4czpzdHJpbmcuIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIGlzIHJldHVybmVkIGlzCi0gKiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkRpc3RpbmN0VmFsdWVzIGV4dGVuZHMgQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EaXN0aW5jdFZhbHVlcy4KLQkgKi8KLQlwdWJsaWMgRm5EaXN0aW5jdFZhbHVlcygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkaXN0aW5jdC12YWx1ZXMiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRpc3RpbmN0X3ZhbHVlcyhhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogRGlzdGluY3QtdmFsdWVzIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRpc3RpbmN0LXZhbHVlcyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkaXN0aW5jdF92YWx1ZXMoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCWlmIChjaXRlci5oYXNOZXh0KCkpIHsKLQkJCWFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJfQotCQkKLQkJU3RyaW5nIGNvbGxhdGlvblVSSSA9IGNvbnRleHQuZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpOwotCQlpZiAoIWFyZzIuZW1wdHkoKSkgewotCQkJWFNTdHJpbmcgY29sbGF0aW9uID0gKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCk7Ci0JCQljb2xsYXRpb25VUkkgPSBjb2xsYXRpb24uc3RyaW5nX3ZhbHVlKCk7Ci0JCX0KLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcxLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBhdCA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCQlpZiAoIWNvbnRhaW5zKHJzLCAoQW55QXRvbWljVHlwZSkgYXQsIGNvbnRleHQsIGNvbGxhdGlvblVSSSkpCi0JCQkJcnMuYWRkKGF0KTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0JCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgQ29udGFpbnMgaW50ZXJmYWNlLgotCSAqIAotCSAqIEBwYXJhbSBycwotCSAqICAgICAgICAgICAgaW5wdXQxIGV4cHJlc3Npb24gc2VxdWVuY2UuCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlucHV0MiBleHByZXNzaW9uIG9mIGFueSBhdG9taWMgdHlwZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBjb250YWlucyhSZXN1bHRTZXF1ZW5jZSBycywgQW55QXRvbWljVHlwZSBpdGVtLAotCQkJRHluYW1pY0NvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmICghKGl0ZW0gaW5zdGFuY2VvZiBDbXBFcSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJcmV0dXJuIGhhc1ZhbHVlKHJzLCBpdGVtLCBjb250ZXh0LCBjb2xsYXRpb25VUkkpOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Eb2MuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Eb2MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBkY2E5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRG9jLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjgxMTU5IC0gZml4IGRvY3VtZW50IGxvYWRpbmcgYW5kIHJlc29sdmluZyBVUklzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0cmlldmVzIGEgZG9jdW1lbnQgdXNpbmcgYW4geHM6YW55VVJJIHN1cHBsaWVkIGFzIGFuIHhzOnN0cmluZy4gSWYgJHVyaSBpcwotICogbm90IGEgdmFsaWQgeHM6YW55VVJJLCBhbiBlcnJvciBpcyByYWlzZWQgW2VycjpGT0RDMDAwNV0uIElmIGl0IGlzIGEgcmVsYXRpdmUKLSAqIFVSSSBSZWZlcmVuY2UsIGl0IGlzIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZSB2YWx1ZSBvZiB0aGUgYmFzZSBVUkkgcHJvcGVydHkKLSAqIGZyb20gdGhlIHN0YXRpYyBjb250ZXh0LiBUaGUgcmVzdWx0aW5nIGFic29sdXRlIFVSSSBSZWZlcmVuY2UgaXMgY2FzdCB0byBhbgotICogeHM6c3RyaW5nLiBJZiB0aGUgQXZhaWxhYmxlIGRvY3VtZW50cyBkaXNjdXNzZWQgaW4gU2VjdGlvbiAyLjEuMiBEeW5hbWljCi0gKiBDb250ZXh0WFAgcHJvdmlkZXMgYSBtYXBwaW5nIGZyb20gdGhpcyBzdHJpbmcgdG8gYSBkb2N1bWVudCBub2RlLCB0aGUKLSAqIGZ1bmN0aW9uIHJldHVybnMgdGhhdCBkb2N1bWVudCBub2RlLiBJZiB0aGUgQXZhaWxhYmxlIGRvY3VtZW50cyBtYXBzIHRoZQotICogc3RyaW5nIHRvIGFuIGVtcHR5IHNlcXVlbmNlLCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IHNlcXVlbmNlLiBJZgotICogdGhlIEF2YWlsYWJsZSBkb2N1bWVudHMgcHJvdmlkZXMgbm8gbWFwcGluZyBmb3IgdGhlIHN0cmluZywgYW4gZXJyb3IgaXMKLSAqIHJhaXNlZCBbZXJyOkZPREMwMDA1XS4KLSAqLwotcHVibGljIGNsYXNzIEZuRG9jIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRG9jLgotCSAqLwotCXB1YmxpYyBGbkRvYygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkb2MiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRvYyhhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogRG9jIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZG9jIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGRvYyhDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJU3RyaW5nIHVyaSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlVUkkgcmVzb2x2ZWQgPSBkYy5yZXNvbHZlX3VyaSh1cmkpOwotCQlpZiAocmVzb2x2ZWQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkX2RvYyhudWxsKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGRjLmdldF9kb2MocmVzb2x2ZWQpOwotCQlpZiAocnMgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5kb2Nfbm90X2ZvdW5kKG51bGwpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRG9jdW1lbnRVcmkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Eb2N1bWVudFVyaS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmZjODc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Eb2N1bWVudFVyaS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcyNzQ3MzEgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjpkb2N1bWVudC11cmkgZnVuY3Rpb24KLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjgxMTU5IC0gZml4IGRvY3VtZW50IGxvYWRpbmcgYW5kIHJlc29sdmluZyBVUklzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBkb2N1bWVudC11cmkgcHJvcGVydHkgZm9yICRhcmcgYXMgZGVmaW5lZCBieSB0aGUKLSAqIGRtOmRvY3VtZW50LXVyaSBhY2Nlc3NvciBmdW5jdGlvbiBkZWZpbmVkIGluIFNlY3Rpb24gNi4xLjIgQWNjZXNzb3JzRE0uIElmCi0gKiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzIHJldHVybmVkLiBSZXR1cm5zIHRoZSBlbXB0eQotICogc2VxdWVuY2UgaWYgdGhlIG5vZGUgaXMgbm90IGEgZG9jdW1lbnQgbm9kZSBvciBpZiBpdHMgZG9jdW1lbnQtdXJpIHByb3BlcnR5Ci0gKiBpcyBhIHJlbGF0aXZlIFVSSS4gT3RoZXJ3aXNlLCByZXR1cm5zIGFuIGFic29sdXRlIFVSSSBleHByZXNzZWQgYXMgYW4KLSAqIHhzOnN0cmluZy4KLSAqLwotcHVibGljIGNsYXNzIEZuRG9jdW1lbnRVcmkgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Eb2N1bWVudFVyaS4KLQkgKi8KLQlwdWJsaWMgRm5Eb2N1bWVudFVyaSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkb2N1bWVudC11cmkiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRvY3VtZW50X3VyaShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBEb2N1bWVudC1Vcmkgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZG9jdW1lbnQtdXJpIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGRvY3VtZW50X3VyaShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkgIHJldHVybiByczsKLQotCQlOb2RlVHlwZSBudCA9IChOb2RlVHlwZSkgYXJnMS5maXJzdCgpOwotCi0JCWlmICghKG50IGluc3RhbmNlb2YgRG9jVHlwZSkpCi0JCSAgcmV0dXJuIHJzOwotCi0JCURvY1R5cGUgZHQgPSAoRG9jVHlwZSkgbnQ7Ci0JCVN0cmluZyBkb2N1bWVudFVSSSA9IGR0LnZhbHVlKCkuZ2V0RG9jdW1lbnRVUkkoKTsKLQkJCi0JCWlmIChkb2N1bWVudFVSSSAhPSBudWxsKSB7Ci0JCQlYU0FueVVSSSBkb2NVcmkgPSBuZXcgWFNBbnlVUkkoZG9jdW1lbnRVUkkpOwotCQkJcnMuYWRkKGRvY1VyaSk7Ci0JCX0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FbXB0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVtcHR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YzE4OWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVtcHR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBJZiB0aGUgdmFsdWUgb2YgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWU7Ci0gKiBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5FbXB0eSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5FbXB0eS4KLQkgKi8KLQlwdWJsaWMgRm5FbXB0eSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJlbXB0eSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZW1wdHkoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogRW1wdHkgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZW1wdHkgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZW1wdHkoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCQllbHNlCi0JCQlycy5hZGQobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW5jb2RlRm9yVVJJLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW5jb2RlRm9yVVJJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNjQ1Y2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVuY29kZUZvclVSSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBEYXZpZCBDYXJ2ZXIsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjg1MzIxIC0gaW5pdGlhbCBhcGkgYW5kIGltcGxlbWVudGF0aW9uIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTMxOSAtIGZpeCBVVEYtOCBlc2NhcGluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiA8cD4KLSAqIEZ1bmN0aW9uIHRvIGFwcGx5IFVSSSBlc2NhcGluZyBydWxlcy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46ZW5jb2RlLWZvci11cmkoJHVyaS1wYXJ0IGFzIHhzOnN0cmluZz8pCi0gKiBhcyB4czpzdHJpbmcKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIGFwcGxpZXMgdGhlIFVSSSBlc2NhcGluZyBydWxlcyAod2l0aCBvbmUgZXhjZXB0aW9uKSwgdG8gdGhlIHN0cmluZwotICogc3VwcGxpZWQgYXMgJHVyaS1wYXJ0LCB3aGljaCB0eXBpY2FsbHkgcmVwcmVzZW50cyBhbGwgb3IgcGFydCBvZiBhIFVSSS4gVGhlCi0gKiBlZmZlY3Qgb2YgdGhlIGZ1bmN0aW9uIGlzIHRvIGVzY2FwZSBhIHNldCBvZiBpZGVudGlmaWVkIGNoYXJhY3RlcnMgaW4gdGhlCi0gKiBzdHJpbmcuIEVhY2ggc3VjaCBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgaW4gdGhlIHN0cmluZyBieSBhbiBlc2NhcGUgc2VxdWVuY2UsCi0gKiB3aGljaCBpcyBmb3JtZWQgYnkgZW5jb2RpbmcgdGhlIGNoYXJhY3RlciBhcyBhIHNlcXVlbmNlIG9mIG9jdGV0cyBpbiBVVEYtOCwKLSAqIGFuZCB0aGVuIHJlcHJlc2VudGluZyBlYWNoIG9mIHRoZXNlIG9jdGV0cyBpbiB0aGUgZm9ybSAlSEgsIHdoZXJlIEhIIGlzIHRoZQotICogaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9jdGV0LgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmICR1cmktcGFydCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIHplcm8tbGVuZ3RoIHN0cmluZy4KLSAqIDwvcD4KLSAqIAotICogCi0gKiA8cD4KLSAqIFRvIGVuc3VyZSB0aGF0IGVzY2FwZWQgVVJJcyBjYW4gYmUgY29tcGFyZWQgdXNpbmcgc3RyaW5nIGNvbXBhcmlzb24KLSAqIGZ1bmN0aW9ucywgdGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyBnZW5lcmF0ZSBoZXhhZGVjaW1hbCB2YWx1ZXMgdXNpbmcgdGhlCi0gKiB1cHBlci1jYXNlIGxldHRlcnMgQS1GLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5FbmNvZGVGb3JVUkkgZXh0ZW5kcyBBYnN0cmFjdFVSSUZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Fc2NhcGUtZm9yLVVyaS4KLQkgKi8KLQlwdWJsaWMgRm5FbmNvZGVGb3JVUkkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZW5jb2RlLWZvci11cmkiKSwgMSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgYXJndW1lbnRzIGFmdGVyIGFwcGxpY2F0aW9uIG9mIHRoZSBVUkkKLQkgKiAgICAgICAgIGVzY2FwaW5nIHJ1bGVzLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZXNjYXBlX3VyaShhcmdzLCB0cnVlLCB0cnVlKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW5kc1dpdGguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FbmRzV2l0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjUxNzIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FbmRzV2l0aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWUgb2YgJGFyZzEgZW5kcyB3aXRoCi0gKiBhIHNlcXVlbmNlIG9mIGNvbGxhdGlvbiB1bml0cyB0aGF0IHByb3ZpZGVzIGEgbWluaW1hbCBtYXRjaCB0byB0aGUgY29sbGF0aW9uCi0gKiB1bml0cyBvZiBNJGFyZzIgYWNjb3JkaW5nIHRvIHRoZSBjb2xsYXRpb24gdGhhdCBpcyB1c2VkLgotICovCi1wdWJsaWMgY2xhc3MgRm5FbmRzV2l0aCBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkVuZHNXaXRoLgotCSAqLwotCXB1YmxpYyBGbkVuZHNXaXRoKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImVuZHMtd2l0aCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZW5kc193aXRoKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEVuZHMtd2l0aCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjplbmRzLXdpdGggb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZW5kc193aXRoKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBzdHIxID0gIiI7Ci0JCVN0cmluZyBzdHIyID0gIiI7Ci0JCWlmICghYXJnMS5lbXB0eSgpKQotCQkJc3RyMSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJaWYgKCFhcmcyLmVtcHR5KCkpCi0JCQlzdHIyID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCi0JCWludCBzdHIxbGVuID0gc3RyMS5sZW5ndGgoKTsKLQkJaW50IHN0cjJsZW4gPSBzdHIyLmxlbmd0aCgpOwotCi0JCWlmIChzdHIxbGVuID09IDAgJiYgc3RyMmxlbiAhPSAwKSB7Ci0JCQlycy5hZGQobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCWlmIChzdHIybGVuID09IDApIHsKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKHRydWUpKTsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCWlmIChzdHIxLmVuZHNXaXRoKHN0cjIpKQotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCQllbHNlCi0JCQlycy5hZGQobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YjgzZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MTQ5IC0gYWRkIHJlbWFpbmluZyBmbjplcnJvciBmdW5jdGlvbmFsaXR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFRoZSBmbjplcnJvciBmdW5jdGlvbiBjYXVzZXMgdGhlIGV2YWx1YXRpb24gb2YgdGhlIG91dGVybW9zdCBYUXVlcnkgb3IKLSAqIHRyYW5zZm9ybWF0aW9uIHRvIHN0b3AuIFdoaWxlIHRoaXMgZnVuY3Rpb24gbmV2ZXIgcmV0dXJucyBhIHZhbHVlLCBhbiBlcnJvciwKLSAqIGlmIGl0IG9jY3VycywgaXMgcmV0dXJuZWQgdG8gdGhlIGV4dGVybmFsIHByb2Nlc3NpbmcgZW52aXJvbm1lbnQgYXMgYW4KLSAqIHhzOmFueVVSSSBvciBhbiB4czpRTmFtZS4gVGhlIGVycm9yIHhzOmFueVVSSSBpcyBkZXJpdmVkIGZyb20gdGhlIGVycm9yCi0gKiB4czpRTmFtZS4gQW4gZXJyb3IgeHM6UU5hbWUgd2l0aCBuYW1lc3BhY2UgVVJJIE5TIGFuZCBsb2NhbCBwYXJ0IExQIHdpbGwgYmUKLSAqIHJldHVybmVkIGFzIHRoZSB4czphbnlVUkkgTlMjTFAuIFRoZSBtZXRob2QgYnkgd2hpY2ggdGhlIHhzOmFueVVSSSBvcgotICogeHM6UU5hbWUgaXMgcmV0dXJuZWQgdG8gdGhlIGV4dGVybmFsIHByb2Nlc3NpbmcgZW52aXJvbm1lbnQgaXMgaW1wbGVtZW50YXRpb24KLSAqIGRlcGVuZGVudC4KLSAqLwotcHVibGljIGNsYXNzIEZuRXJyb3IgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQlwcml2YXRlIHN0YXRpYyBBcnJheUxpc3QgX2V4cGVjdGVkX2FyZ3M7Ci0JcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0IF9leHBlY3RlZF9hcmdzMTsKLQotCS8vIFhYWCBvdmVybG9hZGVkLi4uCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRXJyb3IuCi0JICovCi0JcHVibGljIEZuRXJyb3IoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZXJyb3IiKSwgMCwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gRGlmZmVyZW50aWF0ZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGVyZSBpcyBvbmUgKHJlcXVpcmVkKSBhcmd1bWVudCBvciB3aGF0ZXZlci4KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGFyZ3Muc2l6ZSgpID09IDEgPyBleHBlY3RlZF9hcmdzMSgpIDogZXhwZWN0ZWRfYXJncygpKTsKLQotCQlRTmFtZSBjb2RlID0gbnVsbDsKLQkJUmVzdWx0U2VxdWVuY2UgaXRlbXMgPSBudWxsOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOwotCQkKLQkJLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcmdzCi0JCUl0ZXJhdG9yIGl0ID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJaWYgKGl0Lmhhc05leHQoKSkgewotCQkJUmVzdWx0U2VxdWVuY2UgcnNRTmFtZSA9IChSZXN1bHRTZXF1ZW5jZSlpdC5uZXh0KCk7Ci0JCQkvLyBmb3IgYXJpdHkgMiBhbmQgMywgdGhlIGNvZGUgaXMgbm90IG1hbmRhdG9yeSwgYXMgaW4gZm46Y29kZSgoKSwgImRlc2NyaXB0aW9uKS4gSGFuZGxlIHRoaXM6Ci0JCQlpZiAoISByc1FOYW1lLmVtcHR5KCkpIGNvZGUgPSAoUU5hbWUpcnNRTmFtZS5maXJzdCgpOwotCQl9Ci0JCS8vIE5leHQgYXJnIChpZiBwcmVzZW50KSBpcyB0aGUgZGVzY3JpcHRpb24KLQkJaWYgKGl0Lmhhc05leHQoKSkgewotCQkJUmVzdWx0U2VxdWVuY2UgcnNEZXNjcmlwdGlvbiA9IChSZXN1bHRTZXF1ZW5jZSlpdC5uZXh0KCk7Ci0JCQlkZXNjcmlwdGlvbiA9ICgoWFNTdHJpbmcpcnNEZXNjcmlwdGlvbi5maXJzdCgpKS52YWx1ZSgpOwotCQl9Ci0JCS8vIEZpbmFsIGFyZyAoaWYgcHJlc2VudCkgaXMgdGhlIGxpc3Qgb2YgaXRlbXMKLQkJaWYgKGl0Lmhhc05leHQoKSkgewotCQkJaXRlbXMgPSAoUmVzdWx0U2VxdWVuY2UpaXQubmV4dCgpOwotCQl9Ci0JCi0JCS8vIEhhbmRsZSB0aGUgY29kZSBpZiBtaXNzaW5nCi0JCWlmIChjb2RlID09IG51bGwpIGNvZGUgPSBuZXcgUU5hbWUoImVyciIsICJGT0VSMDAwMCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hxdC1lcnJvcnMiKTsKLQkJCi0JCXJldHVybiBlcnJvcihjb2RlLCBkZXNjcmlwdGlvbiwgaXRlbXMpOwotCX0KLQotCS8qKgotCSAqIEVycm9yIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmVycm9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGVycm9yKFFOYW1lIGVycm9yLCBTdHJpbmcgZGVzY3JpcHRpb24sIFJlc3VsdFNlcXVlbmNlIGl0ZW1zKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQl0aHJvdyBEeW5hbWljRXJyb3IudXNlcl9lcnJvcihlcnJvci5uYW1lc3BhY2UoKSwgZXJyb3IubG9jYWwoKSwgZGVzY3JpcHRpb24pOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgUU5hbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKEFueVR5cGUuY2xhc3MsIFNlcVR5cGUuT0NDX1NUQVIpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzMSgpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzMSA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJnczEgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJnczEuYWRkKG5ldyBTZXFUeXBlKG5ldyBRTmFtZSgpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3MxOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Fc2NhcGVIVE1MVXJpLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXNjYXBlSFRNTFVyaS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI1MjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Fc2NhcGVIVE1MVXJpLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyNjI3NjUgLSByZW5hbWVkIHRvIGNvcnJlY3QgZnVuY3Rpb24gbmFtZS4gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUzMTkgLSBmaXggVVRGLTggZXNjYXBpbmcsIGFuZCBmaXggYXJpdHkgYnVnCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIDxwPgotICogRnVuY3Rpb24gdG8gYXBwbHkgVVJJIGVzY2FwaW5nIHJ1bGVzLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjplc2NhcGUtaHRtbC11cmkoJHVyaS1wYXJ0IGFzIHhzOnN0cmluZz8sICRlc2NhcGUtcmVzZXJ2ZWQgYXMgeHM6Ym9vbGVhbikKLSAqIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgYXBwbGllcyB0aGUgVVJJIGVzY2FwaW5nIHJ1bGVzICh3aXRoIG9uZSBleGNlcHRpb24pLCB0byB0aGUgc3RyaW5nCi0gKiBzdXBwbGllZCBhcyAkdXJpLXBhcnQsIHdoaWNoIHR5cGljYWxseSByZXByZXNlbnRzIGFsbCBvciBwYXJ0IG9mIGEgVVJJLiBUaGUKLSAqIGVmZmVjdCBvZiB0aGUgZnVuY3Rpb24gaXMgdG8gZXNjYXBlIGEgc2V0IG9mIGlkZW50aWZpZWQgY2hhcmFjdGVycyBpbiB0aGUKLSAqIHN0cmluZy4gRWFjaCBzdWNoIGNoYXJhY3RlciBpcyByZXBsYWNlZCBpbiB0aGUgc3RyaW5nIGJ5IGFuIGVzY2FwZSBzZXF1ZW5jZSwKLSAqIHdoaWNoIGlzIGZvcm1lZCBieSBlbmNvZGluZyB0aGUgY2hhcmFjdGVyIGFzIGEgc2VxdWVuY2Ugb2Ygb2N0ZXRzIGluIFVURi04LAotICogYW5kIHRoZW4gcmVwcmVzZW50aW5nIGVhY2ggb2YgdGhlc2Ugb2N0ZXRzIGluIHRoZSBmb3JtICVISCwgd2hlcmUgSEggaXMgdGhlCi0gKiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2N0ZXQuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGVzY2FwZWQgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiB0aGUgYm9vbGVhbgotICogYXJndW1lbnQgJGVzY2FwZS1yZXNlcnZlZC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiAkdXJpLXBhcnQgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSB6ZXJvLWxlbmd0aCBzdHJpbmcuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgJGVzY2FwZS1yZXNlcnZlZCBpcyB0cnVlLCBhbGwgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCBvdGhlciB0aGFuIHRoZSBsb3dlcgotICogY2FzZSBsZXR0ZXJzIGEteiwgdGhlIHVwcGVyIGNhc2UgbGV0dGVycyBBLVosIHRoZSBkaWdpdHMgMC05LCB0aGUgUEVSQ0VOVAotICogU0lHTiAiJSIgYW5kIHRoZSBOVU1CRVIgU0lHTiAiIyIsIGFzIHdlbGwgYXMgY2VydGFpbiBvdGhlciBjaGFyYWN0ZXJzOgotICogc3BlY2lmaWNhbGx5LCBIWVBIRU4tTUlOVVMgKCItIiksIExPVyBMSU5FICgiXyIpLCBGVUxMIFNUT1AgIi4iLCBFWENMQU1BVElPTgotICogTUFSSyAiISIsIFRJTERFICJ+IiwgQVNURVJJU0sgIioiLCBBUE9TVFJPUEhFICInIiwgTEVGVCBQQVJFTlRIRVNJUyAiKCIsIGFuZAotICogUklHSFQgUEFSRU5USEVTSVMgIikiLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmICRlc2NhcGUtcmVzZXJ2ZWQgaXMgZmFsc2UsIGFkZGl0aW9uYWwgY2hhcmFjdGVycyBhcmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YKLSAqIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGVzY2FwZWQuIFRoZXNlIGFyZSB0aGUgZm9sbG93aW5nOiBTRU1JQ09MT04gIjsiLAotICogU09MSURVUyAiLyIsIFFVRVNUSU9OIE1BUksgIj8iLCBDT0xPTiAiOiIsIENPTU1FUkNJQUwgQVQgIkAiLCBBTVBFUlNBTkQgIiYiLAotICogRVFVQUxTIFNJR04gIj0iLCBQTFVTIFNJR04gIisiLCBET0xMQVIgU0lHTiAiJCIsIENPTU1BICIsIiwgTEVGVCBTUVVBUkUKLSAqIEJSQUNLRVQgIlsiIGFuZCBSSUdIVCBTUVVBUkUgQlJBQ0tFVCAiXSIuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVG8gZW5zdXJlIHRoYXQgZXNjYXBlZCBVUklzIGNhbiBiZSBjb21wYXJlZCB1c2luZyBzdHJpbmcgY29tcGFyaXNvbgotICogZnVuY3Rpb25zLCB0aGlzIGZ1bmN0aW9uIG11c3QgYWx3YXlzIGdlbmVyYXRlIGhleGFkZWNpbWFsIHZhbHVlcyB1c2luZyB0aGUKLSAqIHVwcGVyLWNhc2UgbGV0dGVycyBBLUYuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogR2VuZXJhbGx5LCAkZXNjYXBlLXJlc2VydmVkIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIGVzY2FwaW5nIGEgc3RyaW5nIHRoYXQKLSAqIGlzIHRvIGZvcm0gYSBzaW5nbGUgcGFydCBvZiBhIFVSSSwgYW5kIHRvIGZhbHNlIHdoZW4gZXNjYXBpbmcgYW4gZW50aXJlIFVSSQotICogb3IgVVJJIHJlZmVyZW5jZS4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGVzY2FwZSB0aGUgUEVSQ0VOVCBTSUdOICIlIiBhbmQgdGhpcyBjaGFyYWN0ZXIKLSAqIGlzIG5vdCBhbGxvd2VkIGluIGEgVVJJLCB1c2VycyB3aXNoaW5nIHRvIGNvbnZlcnQgY2hhcmFjdGVyIHN0cmluZ3MsIHN1Y2ggYXMKLSAqIGZpbGUgbmFtZXMsIHRoYXQgaW5jbHVkZSAiJSIgdG8gYSBVUkkgc2hvdWxkIG1hbnVhbGx5IGVzY2FwZSAiJSIgYnkgcmVwbGFjaW5nCi0gKiBpdCB3aXRoICIlMjUiLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5Fc2NhcGVIVE1MVXJpIGV4dGVuZHMgQWJzdHJhY3RVUklGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRXNjYXBlLWh0bWwtVXJpLgotCSAqLwotCXB1YmxpYyBGbkVzY2FwZUhUTUxVcmkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZXNjYXBlLWh0bWwtdXJpIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyBhZnRlciBhcHBsaWNhdGlvbiBvZiB0aGUgVVJJCi0JICogICAgICAgICBlc2NhcGluZyBydWxlcy4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGVzY2FwZV91cmkoYXJncywgZmFsc2UsIGZhbHNlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXhhY3RseU9uZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkV4YWN0bHlPbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlkMGQ4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXhhY3RseU9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zICRhcmcgaWYgaXQgY29udGFpbnMgZXhhY3RseSBvbmUgaXRlbS4gT3RoZXJ3aXNlLCByYWlzZXMgYW4gZXJyb3IKLSAqIFtlcnI6Rk9SRzAwMDVdLiBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgJGFyZy4KLSAqLwotcHVibGljIGNsYXNzIEZuRXhhY3RseU9uZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5FeGFjdGx5T25lLgotCSAqLwotCXB1YmxpYyBGbkV4YWN0bHlPbmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZXhhY3RseS1vbmUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGV4YWN0bHlfb25lKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEV4YWN0bHktb25lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmV4YWN0bHktb25lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGV4YWN0bHlfb25lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAxOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGNpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLm5vdF9vbmUobnVsbCk7Ci0KLQkJcmV0dXJuIGFyZzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXhpc3RzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXhpc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjAzOTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkV4aXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIElmIHRoZSB2YWx1ZSBvZiAkYXJnIGlzIG5vdCB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWU7Ci0gKiBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5FeGlzdHMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRXhpc3RzLgotCSAqLwotCXB1YmxpYyBGbkV4aXN0cygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJleGlzdHMiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGV4aXN0cyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBFeGlzdHMgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZXhpc3RzIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGV4aXN0cyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAxOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCQlycy5hZGQobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCQllbHNlCi0JCQlycy5hZGQobmV3IFhTQm9vbGVhbih0cnVlKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GYWxzZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkZhbHNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYTliNWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkZhbHNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgeHM6Ym9vbGVhbiB2YWx1ZSBmYWxzZS4gRXF1aXZhbGVudCB0byB4czpib29sZWFuKCIwIikuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkZhbHNlIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkZhbHNlLgotCSAqLwotCXB1YmxpYyBGbkZhbHNlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImZhbHNlIiksIDApOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBmbl9mYWxzZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBGYWxzZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpmYWxzZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9mYWxzZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GbG9vci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkZsb29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NjU5YzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkZsb29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBsYXJnZXN0IChjbG9zZXN0IHRvIHBvc2l0aXZlIGluZmluaXR5KSBudW1iZXIgd2l0aCBubyBmcmFjdGlvbmFsCi0gKiBwYXJ0IHRoYXQgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgJGFyZy4gSWYgdHlwZSBvZiAkYXJnIGlzIG9uZSBvZgotICogdGhlIGZvdXIgbnVtZXJpYyB0eXBlcyB4czpmbG9hdCwgeHM6ZG91YmxlLCB4czpkZWNpbWFsIG9yIHhzOmludGVnZXIgdGhlIHR5cGUKLSAqIG9mIHRoZSByZXR1cm4gaXMgdGhlIHNhbWUgYXMgdGhlIHR5cGUgb2YgJGFyZy4gSWYgdGhlIHR5cGUgb2YgJGFyZyBpcyBhIHR5cGUKLSAqIGRlcml2ZWQgZnJvbSBvbmUgb2YgdGhlIG51bWVyaWMgdHlwZXMsIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gaXMgdGhlIGJhc2UKLSAqIG51bWVyaWMgdHlwZS4gRm9yIGZsb2F0IGFuZCBkb3VibGUgYXJndW1lbnRzLCBpZiB0aGUgYXJndW1lbnQgaXMgcG9zaXRpdmUKLSAqIHplcm8gKCswKSwgdGhlbiBwb3NpdGl2ZSB6ZXJvICgrMCkgaXMgcmV0dXJuZWQuIElmIHRoZSBhcmd1bWVudCBpcyBuZWdhdGl2ZQotICogemVybyAoLTApLCB0aGVuIG5lZ2F0aXZlIHplcm8gKC0wKSBpcyByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuRmxvb3IgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRmxvb3IuCi0JICovCi0JcHVibGljIEZuRmxvb3IoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZmxvb3IiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gMSBhcmd1bWVudCBvbmx5IQotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJndW1lbnQgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJcmV0dXJuIGZuX2Zsb29yKGFyZ3VtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBGbG9vciBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmZsb29yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZuX2Zsb29yKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gc2FuaXR5IGNoZXgKLQkJTnVtZXJpY1R5cGUgbnQgPSBGbkFicy5nZXRfc2luZ2xlX251bWVyaWNfYXJnKGFyZyk7Ci0KLQkJLy8gZW1wdHkgYXJnCi0JCWlmIChudCA9PSBudWxsKQotCQkJcmV0dXJuIHJzOwotCi0JCXJzLmFkZChudC5mbG9vcigpKTsKLQkJcmV0dXJuIHJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ib3Vyc0Zyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkhvdXJzRnJvbURhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0Y2I2YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkhvdXJzRnJvbURhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjMsIGJvdGggaW5jbHVzaXZlLCByZXByZXNlbnRpbmcgdGhlCi0gKiBob3VycyBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eQotICogc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Ib3Vyc0Zyb21EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkhvdXJzRnJvbURhdGVUaW1lLgotCSAqLwotCXB1YmxpYyBGbkhvdXJzRnJvbURhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImhvdXJzLWZyb20tZGF0ZVRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGhvdXJzX2Zyb21fZGF0ZV90aW1lKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEhvdXJzLWZyb20tRGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46aG91cnMtZnJvbS1kYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBob3Vyc19mcm9tX2RhdGVfdGltZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRGF0ZVRpbWUgZHQgPSAoWFNEYXRlVGltZSkgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdC5ob3VyKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ib3Vyc0Zyb21EdXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkhvdXJzRnJvbUR1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NWE3MTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkhvdXJzRnJvbUR1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBleHBlY3RlZCB4czpkdXJhdGlvbiBhcmd1bWVudC4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgaG91cnMgY29tcG9uZW50IGluIHRoZSBjYW5vbmljYWwKLSAqIGxleGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mICRhcmcuIFRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLiBJZgotICogJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Ib3Vyc0Zyb21EdXJhdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkhvdXJzRnJvbUR1cmF0aW9uLgotCSAqLwotCXB1YmxpYyBGbkhvdXJzRnJvbUR1cmF0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImhvdXJzLWZyb20tZHVyYXRpb24iKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGhvdXJzX2Zyb21fZHVyYXRpb24oYXJncyk7Ci0JfQotCi0JLyoqCi0JICogSG91cnMtZnJvbS1EdXJhdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpob3Vycy1mcm9tLWR1cmF0aW9uIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGhvdXJzX2Zyb21fZHVyYXRpb24oQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0R1cmF0aW9uIGR0ZCA9IChYU0R1cmF0aW9uKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0ZC5ob3VycygpOwotCi0JCWlmIChkdGQubmVnYXRpdmUoKSkKLQkJCXJlcyAqPSAtMTsKLQotCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRHVyYXRpb24oKSwKLQkJCQkJU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSG91cnNGcm9tVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkhvdXJzRnJvbVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA5MjllOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSG91cnNGcm9tVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciBiZXR3ZWVuIDAgYW5kIDIzLCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nIHRoZQotICogdmFsdWUgb2YgdGhlIGhvdXJzIGNvbXBvbmVudCBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mICRhcmcuIElmICRhcmcgaXMgdGhlCi0gKiBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkhvdXJzRnJvbVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Ib3Vyc0Zyb21UaW1lLgotCSAqLwotCXB1YmxpYyBGbkhvdXJzRnJvbVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaG91cnMtZnJvbS10aW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBob3Vyc19mcm9tX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogSG91cnMtZnJvbS1UaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmhvdXJzLWZyb20tdGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBob3Vyc19mcm9tX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU1RpbWUgZHQgPSAoWFNUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0LmhvdXIoKTsKLQotCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JRC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbklELmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNTY4OGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbklELmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZCBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAJICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODExNjggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgIC0gYnVnIDI4MTE4NiAtIGltcGxlbWVudGF0aW9uIG9mIGZuOmlkIGFuZCBmbjppZHJlZgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudCBub2RlcyB0aGF0IGhhdmUgYW4gSUQgdmFsdWUgbWF0Y2hpbmcgdGhlIHZhbHVlIG9mIG9uZQotICogb3IgbW9yZSBvZiB0aGUgSURSRUYgdmFsdWVzIHN1cHBsaWVkIGluICRhcmcgLgotICovCi1wdWJsaWMgY2xhc3MgRm5JRCBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5JbnNlcnRCZWZvcmUuCi0JICovCi0JcHVibGljIEZuSUQoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaWQiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGlkKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQtQmVmb3JlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmluc2VydC1iZWZvcmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaWQoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkKLQkJSXRlcmF0b3IgYXJnSXQgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBpZHJlZlJTID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdJdC5uZXh0KCk7Ci0JCVN0cmluZ1tdIGlkcmVmc3QgPSBpZHJlZlJTLmZpcnN0KCkuc3RyaW5nX3ZhbHVlKCkuc3BsaXQoIiAiKTsKLQotCQlBcnJheUxpc3QgaWRyZWZzID0gY3JlYXRlSURSZWZzKGlkcmVmc3QpOwotCQlSZXN1bHRTZXF1ZW5jZSBub2RlQXJnID0gbnVsbDsKLQkJTm9kZVR5cGUgbm9kZVR5cGUgPSBudWxsOwotCQlpZiAoYXJnSXQuaGFzTmV4dCgpKSB7Ci0JCQlub2RlQXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdJdC5uZXh0KCk7Ci0JCQlub2RlVHlwZSA9IChOb2RlVHlwZSlub2RlQXJnLmZpcnN0KCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoY29udGV4dC5jb250ZXh0X2l0ZW0oKSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCX0KLQkJCWlmICghKGNvbnRleHQuY29udGV4dF9pdGVtKCkgaW5zdGFuY2VvZiBOb2RlVHlwZSkpIHsKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJfQotCQkJbm9kZVR5cGUgPSAoTm9kZVR5cGUpIGNvbnRleHQuY29udGV4dF9pdGVtKCk7Ci0JCQlpZiAobm9kZVR5cGUubm9kZV92YWx1ZSgpLmdldE93bmVyRG9jdW1lbnQoKSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCX0KLQkJfQotCQkKLQkJTm9kZSBub2RlID0gbm9kZVR5cGUubm9kZV92YWx1ZSgpOwotCQlpZiAobm9kZS5nZXRPd25lckRvY3VtZW50KCkgPT0gbnVsbCkgewotCQkJLy8gVzNDIFRlc3Qgc3VpdGUgc2VlbXMgdG8gd2FudCBYUERZMDAwMgotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCS8vdGhyb3cgRHluYW1pY0Vycm9yLm5vQ29udGV4dERvYygpOwotCQl9Ci0JCQotCQlpZiAoaGFzSURSRUYoaWRyZWZzLCBub2RlKSkgewotCQkJRWxlbWVudFR5cGUgZWxlbWVudCA9IG5ldyBFbGVtZW50VHlwZSgoRWxlbWVudCkgbm9kZSk7Ci0JCQlycy5hZGQoZWxlbWVudCk7Ci0JCX0KLQkJCi0JCXJzID0gcHJvY2Vzc0F0dHJpYnV0ZXMobm9kZSwgaWRyZWZzLCBycyk7Ci0JCXJzID0gcHJvY2Vzc0NoaWxkTm9kZXMobm9kZSwgaWRyZWZzLCBycyk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBBcnJheUxpc3QgY3JlYXRlSURSZWZzKFN0cmluZ1tdIGlkUmVmdG9rZW5zKSB7Ci0JCUFycmF5TGlzdCB4c2lkUmVmID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGlkUmVmdG9rZW5zLmxlbmd0aDsgaSsrKSB7Ci0JCQlYU0lEUkVGIGlkcmVmID0gbmV3IFhTSURSRUYoaWRSZWZ0b2tlbnNbaV0pOwotCQkJeHNpZFJlZi5hZGQoaWRyZWYpOwotCQl9Ci0JCXJldHVybiB4c2lkUmVmOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBwcm9jZXNzQ2hpbGROb2RlcyhOb2RlIG5vZGUsIExpc3QgaWRyZWZzLCBSZXN1bHRTZXF1ZW5jZSBycykgewotCQlpZiAoIW5vZGUuaGFzQ2hpbGROb2RlcygpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJCi0JCU5vZGVMaXN0IG5vZGVMaXN0ID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JCWZvciAoaW50IG5vZGVjbnQgPSAwOyBub2RlY250IDwgbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7IG5vZGVjbnQrKykgewotCQkJTm9kZSBjaGlsZE5vZGUgPSBub2RlTGlzdC5pdGVtKG5vZGVjbnQpOwotCQkJaWYgKGNoaWxkTm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFICYmICFpc0R1cGxpY2F0ZShjaGlsZE5vZGUsIHJzKSkgewotCQkJCUVsZW1lbnRUeXBlIGVsZW1lbnQgPSBuZXcgRWxlbWVudFR5cGUoKEVsZW1lbnQpY2hpbGROb2RlKTsKLQkJCQlpZiAoZWxlbWVudC5pc0lEKCkpIHsKLQkJCQkJaWYgKGhhc0lEUkVGKGlkcmVmcywgY2hpbGROb2RlKSkgewotCQkJCQkJcnMuYWRkKGVsZW1lbnQpOwotCQkJCQl9Ci0JCQkJfSAKLQkJCQlycyA9IHByb2Nlc3NBdHRyaWJ1dGVzKGNoaWxkTm9kZSwgaWRyZWZzLCBycyk7Ci0JCQkJcnMgPSBwcm9jZXNzQ2hpbGROb2RlcyhjaGlsZE5vZGUsIGlkcmVmcywgcnMpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcnM7Ci0KLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgcHJvY2Vzc0F0dHJpYnV0ZXMoTm9kZSBub2RlLCBMaXN0IGlkcmVmcywgUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJaWYgKCFub2RlLmhhc0F0dHJpYnV0ZXMoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCQotCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlTGlzdCA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQlmb3IgKGludCBhdHN1YiA9IDA7IGF0c3ViIDwgYXR0cmlidXRlTGlzdC5nZXRMZW5ndGgoKTsgYXRzdWIrKykgewotCQkJQXR0ciBhdE5vZGUgPSAoQXR0cikgYXR0cmlidXRlTGlzdC5pdGVtKGF0c3ViKTsKLQkJCU5vZGVUeXBlIGF0VHlwZSA9IG5ldyBBdHRyVHlwZShhdE5vZGUpOwotCQkJaWYgKGF0VHlwZS5pc0lEKCkpIHsKLQkJCQlpZiAoaGFzSURSRUYoaWRyZWZzLCBhdE5vZGUpKSB7Ci0JCQkJCWlmICghaXNEdXBsaWNhdGUobm9kZSwgcnMpKSB7Ci0JCQkJCQlFbGVtZW50VHlwZSBlbGVtZW50ID0gbmV3IEVsZW1lbnRUeXBlKChFbGVtZW50KW5vZGUpOwotCQkJCQkJcnMuYWRkKGVsZW1lbnQpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiByczsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNJRFJFRihMaXN0IGlkcmVmcywgTm9kZSBub2RlKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaWRyZWZzLnNpemUoKTsgaSsrKSB7Ci0JCQlYU0lEUkVGIGlkcmVmID0gKFhTSURSRUYpIGlkcmVmcy5nZXQoaSk7Ci0JCQlpZiAoaWRyZWYuc3RyaW5nX3ZhbHVlKCkuZXF1YWxzKG5vZGUuZ2V0Tm9kZVZhbHVlKCkpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRHVwbGljYXRlKE5vZGUgbm9kZSwgUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJSXRlcmF0b3IgaXQgPSBycy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlpZiAoaXQubmV4dCgpLmVxdWFscyhub2RlKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19TVEFSKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSURSRUYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JRFJFRi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTZiYWMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JRFJFRi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmQgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogCSAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgxMTY4IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyICAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgRm5JRFJFRiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5JbnNlcnRCZWZvcmUuCi0JICovCi0JcHVibGljIEZuSURSRUYoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaWRyZWYiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGlkcmVmKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQtQmVmb3JlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmluc2VydC1iZWZvcmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaWRyZWYoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkKLQkJSXRlcmF0b3IgYXJnSXQgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBpZHJlZlJTID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdJdC5uZXh0KCk7Ci0JCVN0cmluZ1tdIGlkc3QgPSBpZHJlZlJTLmZpcnN0KCkuc3RyaW5nX3ZhbHVlKCkuc3BsaXQoIiAiKTsKLQotCQlBcnJheUxpc3QgaWRzID0gY3JlYXRlSURzKGlkc3QpOwotCQlSZXN1bHRTZXF1ZW5jZSBub2RlQXJnID0gbnVsbDsKLQkJTm9kZVR5cGUgbm9kZVR5cGUgPSBudWxsOwotCQlpZiAoYXJnSXQuaGFzTmV4dCgpKSB7Ci0JCQlub2RlQXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdJdC5uZXh0KCk7Ci0JCQlub2RlVHlwZSA9IChOb2RlVHlwZSlub2RlQXJnLmZpcnN0KCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoY29udGV4dC5jb250ZXh0X2l0ZW0oKSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCX0KLQkJCWlmICghKGNvbnRleHQuY29udGV4dF9pdGVtKCkgaW5zdGFuY2VvZiBOb2RlVHlwZSkpIHsKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJfQotCQkJbm9kZVR5cGUgPSAoTm9kZVR5cGUpIGNvbnRleHQuY29udGV4dF9pdGVtKCk7Ci0JCQlpZiAobm9kZVR5cGUubm9kZV92YWx1ZSgpLmdldE93bmVyRG9jdW1lbnQoKSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCX0KLQkJfQotCQkKLQkJTm9kZSBub2RlID0gbm9kZVR5cGUubm9kZV92YWx1ZSgpOwotCQlpZiAobm9kZS5nZXRPd25lckRvY3VtZW50KCkgPT0gbnVsbCkgewotCQkJLy8gVzNDIHRlc3Qgc3VpdGUgc2VlbXMgdG8gd2FudCBYUERZMDAwMiBoZXJlCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJLy90aHJvdyBEeW5hbWljRXJyb3Iubm9Db250ZXh0RG9jKCk7Ci0JCX0KLQkJCi0JCWlmIChoYXNJRChpZHMsIG5vZGUpKSB7Ci0JCQlFbGVtZW50VHlwZSBlbGVtZW50ID0gbmV3IEVsZW1lbnRUeXBlKChFbGVtZW50KSBub2RlKTsKLQkJCXJzLmFkZChlbGVtZW50KTsKLQkJfQotCQkKLQkJcnMgPSBwcm9jZXNzQXR0cmlidXRlcyhub2RlLCBpZHMsIHJzKTsKLQkJcnMgPSBwcm9jZXNzQ2hpbGROb2Rlcyhub2RlLCBpZHMsIHJzKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIEFycmF5TGlzdCBjcmVhdGVJRHMoU3RyaW5nW10gaWR0b2tlbnMpIHsKLQkJQXJyYXlMaXN0IHhzaWQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaWR0b2tlbnMubGVuZ3RoOyBpKyspIHsKLQkJCVhTSUQgaWQgPSBuZXcgWFNJRChpZHRva2Vuc1tpXSk7Ci0JCQl4c2lkLmFkZChpZCk7Ci0JCX0KLQkJcmV0dXJuIHhzaWQ7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHByb2Nlc3NDaGlsZE5vZGVzKE5vZGUgbm9kZSwgTGlzdCBpZHMsIFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCWlmICghbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCQkKLQkJTm9kZUxpc3Qgbm9kZUxpc3QgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQkJZm9yIChpbnQgbm9kZWNudCA9IDA7IG5vZGVjbnQgPCBub2RlTGlzdC5nZXRMZW5ndGgoKTsgbm9kZWNudCsrKSB7Ci0JCQlOb2RlIGNoaWxkTm9kZSA9IG5vZGVMaXN0Lml0ZW0obm9kZWNudCk7Ci0JCQlpZiAoY2hpbGROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUgJiYgIWlzRHVwbGljYXRlKGNoaWxkTm9kZSwgcnMpKSB7Ci0JCQkJRWxlbWVudFR5cGUgZWxlbWVudCA9IG5ldyBFbGVtZW50VHlwZSgoRWxlbWVudCljaGlsZE5vZGUpOwotCQkJCWlmIChlbGVtZW50LmlzSURSRUYoKSkgewotCQkJCQlpZiAoaGFzSUQoaWRzLCBjaGlsZE5vZGUpKSB7Ci0JCQkJCQlycy5hZGQoZWxlbWVudCk7Ci0JCQkJCX0KLQkJCQl9IAotCQkJCXJzID0gcHJvY2Vzc0F0dHJpYnV0ZXMoY2hpbGROb2RlLCBpZHMsIHJzKTsKLQkJCQlycyA9IHByb2Nlc3NDaGlsZE5vZGVzKGNoaWxkTm9kZSwgaWRzLCBycyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByczsKLQotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBwcm9jZXNzQXR0cmlidXRlcyhOb2RlIG5vZGUsIExpc3QgaWRyZWZzLCBSZXN1bHRTZXF1ZW5jZSBycykgewotCQlpZiAoIW5vZGUuaGFzQXR0cmlidXRlcygpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJCi0JCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVMaXN0ID0gbm9kZS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCWZvciAoaW50IGF0c3ViID0gMDsgYXRzdWIgPCBhdHRyaWJ1dGVMaXN0LmdldExlbmd0aCgpOyBhdHN1YisrKSB7Ci0JCQlBdHRyIGF0Tm9kZSA9IChBdHRyKSBhdHRyaWJ1dGVMaXN0Lml0ZW0oYXRzdWIpOwotCQkJTm9kZVR5cGUgYXRUeXBlID0gbmV3IEF0dHJUeXBlKGF0Tm9kZSk7Ci0JCQlpZiAoYXRUeXBlLmlzSUQoKSkgewotCQkJCWlmIChoYXNJRChpZHJlZnMsIGF0Tm9kZSkpIHsKLQkJCQkJaWYgKCFpc0R1cGxpY2F0ZShub2RlLCBycykpIHsKLQkJCQkJCUVsZW1lbnRUeXBlIGVsZW1lbnQgPSBuZXcgRWxlbWVudFR5cGUoKEVsZW1lbnQpbm9kZSk7Ci0JCQkJCQlycy5hZGQoZWxlbWVudCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGhhc0lEKExpc3QgaWRzLCBOb2RlIG5vZGUpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspIHsKLQkJCVhTSUQgaWRyZWYgPSAoWFNJRCkgaWRzLmdldChpKTsKLQkJCWlmIChpZHJlZi5zdHJpbmdfdmFsdWUoKS5lcXVhbHMobm9kZS5nZXROb2RlVmFsdWUoKSkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEdXBsaWNhdGUoTm9kZSBub2RlLCBSZXN1bHRTZXF1ZW5jZSBycykgewotCQlJdGVyYXRvciBpdCA9IHJzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCWlmIChpdC5uZXh0KCkuZXF1YWxzKG5vZGUpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1NUQVIpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JbXBsaWNpdFRpbWV6b25lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW1wbGljaXRUaW1lem9uZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTc4NDkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JbXBsaWNpdFRpbWV6b25lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbXBsaWNpdCB0aW1lem9uZSBwcm9wZXJ0eSBmcm9tIHRoZSBkeW5hbWljIGNvbnRleHQuCi0gKiBDb21wb25lbnRzIG9mIHRoZSBkeW5hbWljIGNvbnRleHQgYXJlIGRpc2N1c3NlZCBpbiBTZWN0aW9uIEMuMiBEeW5hbWljCi0gKiBDb250ZXh0IENvbXBvbmVudHMKLSAqLwotcHVibGljIGNsYXNzIEZuSW1wbGljaXRUaW1lem9uZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5JbXBsaWNpdFRpbWV6b25lLgotCSAqLwotCXB1YmxpYyBGbkltcGxpY2l0VGltZXpvbmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaW1wbGljaXQtdGltZXpvbmUiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGltcGxpY2l0X3RpbWV6b25lKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBJbXBsaWNpdC1UaW1lem9uZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmltcGxpY2l0LXRpbWV6b25lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGltcGxpY2l0X3RpbWV6b25lKENvbGxlY3Rpb24gYXJncywKLQkJCUR5bmFtaWNDb250ZXh0IGRjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDA7Ci0KLQkJdHJ5IHsKLQkJCUFueVR5cGUgcmVzID0gKFhTRHVyYXRpb24pIGRjLnR6KCkuY2xvbmUoKTsKLQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGVycikgewotCQkJYXNzZXJ0IGZhbHNlOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW5TY29wZVByZWZpeGVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW5TY29wZVByZWZpeGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MDlkNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkluU2NvcGVQcmVmaXhlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotaW1wb3J0IGphdmF4LnhtbC5YTUxDb25zdGFudHM7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgaW4tc2NvcGUtcHJlZml4ZXMgZm9yIHRoZSBlbGVtZW50IGFuZCBhbnkgb2YgaXQncyBhbmNlc3RvcnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkluU2NvcGVQcmVmaXhlcyBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblByZWZpeEZyb21RTmFtZQotCSAqLwotCXB1YmxpYyBGbkluU2NvcGVQcmVmaXhlcygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJpbi1zY29wZS1wcmVmaXhlcyIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gaW5TY29wZVByZWZpeGVzKGFyZ3MsIF9mbC5keW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogUHJlZml4LWZyb20tUU5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cHJlZml4LWZyb20tUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaW5TY29wZVByZWZpeGVzKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0vLwkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBhcmdzOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkgIHJldHVybiByczsKLQkJCi0JCUFueVR5cGUgYW55dHlwZSA9IGFyZzEuZmlyc3QoKTsKLQkJaWYgKCEoYW55dHlwZSBpbnN0YW5jZW9mIEVsZW1lbnRUeXBlKSkgewotCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJfQotCi0JCUVsZW1lbnRUeXBlIGVsZW1lbnQgPSAoRWxlbWVudFR5cGUpIGFyZzEuZmlyc3QoKTsKLQkJTGlzdCBwcmVmaXhMaXN0ID0gbG9va3VwUHJlZml4ZXMoZWxlbWVudCk7Ci0JCWNyZWF0ZVByZWZpeFJlc3VsdFNldChycywgcHJlZml4TGlzdCk7Ci0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVByZWZpeFJlc3VsdFNldChSZXN1bHRTZXF1ZW5jZSBycywgTGlzdCBwcmVmaXhMaXN0KSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJlZml4TGlzdC5zaXplKCk7IGkrKykgewotCQkJU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIHByZWZpeExpc3QuZ2V0KGkpOwotCQkJcnMuYWRkKG5ldyBYU1N0cmluZyhwcmVmaXgpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIExpc3QgbG9va3VwUHJlZml4ZXMoRWxlbWVudFR5cGUgZWxlbWVudCkgewotCQlFbGVtZW50IGRvbUVsbSA9IChFbGVtZW50KSBlbGVtZW50Lm5vZGVfdmFsdWUoKTsKLQkJCi0JCUxpc3QgcHJlZml4TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTm9kZSBub2RlID0gZG9tRWxtOwotCQkKLQkJd2hpbGUgKG5vZGUgIT0gbnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7Ci0JCQlOYW1lZE5vZGVNYXAgYXR0cnMgPSBub2RlLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCU5vZGUgYXR0ciA9IGF0dHJzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIHByZWZpeCA9IG51bGw7Ci0JCQkJaWYgKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCAmJgotCQkJCQlhdHRyLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhYTUxDb25zdGFudHMuWE1MTlNfQVRUUklCVVRFX05TX1VSSSkpIHsKLQkJCQkJLy8gRGVmYXVsdCBOYW1lc3BhY2UKLQkJCQkJaWYgKGF0dHIuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMoWE1MQ29uc3RhbnRzLlhNTE5TX0FUVFJJQlVURSkpIHsKLQkJCQkJCXByZWZpeCA9ICIiOwotCQkJCQl9IGVsc2UgewotCQkJCQkJLy8gU2hvdWxkIHdlIGNoZWNrIHRoZSBuYW1lc3BhY2UgaW4gdGhlIER5bmFtaWMgQ29udGV4dCBhbmQgcmV0dXJuIHRoYXQ/Pz8KLQkJCQkJCXByZWZpeCA9IGF0dHIuZ2V0TG9jYWxOYW1lKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKHByZWZpeCAhPSBudWxsKSB7Ci0JCQkJCQlpZiAoIXByZWZpeExpc3QuY29udGFpbnMocHJlZml4KSkgewotCQkJCQkJCXByZWZpeExpc3QuYWRkKHByZWZpeCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCW5vZGUgPSBub2RlLmdldFBhcmVudE5vZGUoKTsKLQkJfQotCQlyZXR1cm4gcHJlZml4TGlzdDsKLQl9Ci0JCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgRWxlbWVudFR5cGUoKSwgU2VxVHlwZS5PQ0NfUExVUyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW5kZXhPZi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkluZGV4T2YuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkODY0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW5kZXhPZi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGNvbGxhdGlvbiBhbmQgY29tcGFyaXNvbiBpc3N1ZXMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogUmV0dXJucyBhIHNlcXVlbmNlIG9mIHBvc2l0aXZlIGludGVnZXJzIGdpdmluZyB0aGUgcG9zaXRpb25zIHdpdGhpbiB0aGUKLSAqIHNlcXVlbmNlICRzZXFQYXJhbSBvZiBpdGVtcyB0aGF0IGFyZSBlcXVhbCB0byAkc3JjaFBhcmFtLgotICovCi1wdWJsaWMgY2xhc3MgRm5JbmRleE9mIGV4dGVuZHMgQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5JbmRleE9mLgotCSAqLwotCXB1YmxpYyBGbkluZGV4T2YoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaW5kZXgtb2YiKSwgMiwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGluZGV4X29mKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBjb21wYXJhYmxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGF0Ci0JICogICAgICAgICAgICBleHByZXNzaW9uIG9mIGFueSB0eXBlLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgQ21wRXEgZ2V0X2NvbXBhcmFibGUoQW55VHlwZSBhdCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQlYU1N0cmluZyBub2RlU3RyaW5nID0gbmV3IFhTU3RyaW5nKGF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCXJldHVybiBub2RlU3RyaW5nOwotCQl9Ci0JCQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCi0JCWlmICghKGF0IGluc3RhbmNlb2YgQ21wRXEpKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLm5vdF9jbXAobnVsbCk7Ci0KLQkJcmV0dXJuIChDbXBFcSkgYXQ7Ci0JfQotCi0JLyoqCi0JICogSW5kZXgtT2Ygb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZHluYW1pY0NvbnRleHQgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmluZGV4LW9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGluZGV4X29mKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQkvLyBzYW5pdHkgY2hleAotCQlpZiAoYXJnMi5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQotCQlTdHJpbmcgY29sbGF0aW9uVXJpID0gZHluYW1pY0NvbnRleHQuZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpOwotCQlpZiAoY2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBhcmczID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCQlpZiAoIWFyZzMuZW1wdHkoKSkgewotCQkJCVhTU3RyaW5nIGNvbGxhdGlvbiA9IChYU1N0cmluZykgYXJnMy5maXJzdCgpOwotCQkJCWNvbGxhdGlvblVyaSA9IGNvbGxhdGlvbi5zdHJpbmdfdmFsdWUoKTsKLQkJCX0KLQkJfQotCi0JCUFueUF0b21pY1R5cGUgYXQgPSAoQW55QXRvbWljVHlwZSlhcmcyLmZpcnN0KCk7Ci0KLQkJZ2V0X2NvbXBhcmFibGUoYXQpOwotCi0JCWludCBpbmRleCA9IDE7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJnMS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgY21wdHlwZSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQkJCWdldF9jb21wYXJhYmxlKGNtcHR5cGUpOwotCi0JCQlpZiAoIShhdCBpbnN0YW5jZW9mIENtcEVxKSkKLQkJCQljb250aW51ZTsKLQkJCQotCQkJaWYgKGlzQm9vbGVhbihjbXB0eXBlLCBhdCkpIHsKLQkJCQlYU0Jvb2xlYW4gYm9vbGF0ID0gKFhTQm9vbGVhbikgY21wdHlwZTsKLQkJCQlpZiAoYm9vbGF0LmVxKGF0LCBkeW5hbWljQ29udGV4dCkpIHsKLSAJCQkJICAgcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGluZGV4KSkpOwotCQkJCX0KLQkJCX0gZWxzZSAKLQkJCQotCQkJaWYgKGlzTnVtZXJpYyhjbXB0eXBlLCBhdCkpIHsKLQkJCQlOdW1lcmljVHlwZSBudW1lcmljYXQgPSAoTnVtZXJpY1R5cGUpIGF0OwotCQkJCWlmIChudW1lcmljYXQuZXEoY21wdHlwZSwgZHluYW1pY0NvbnRleHQpKSB7Ci0JCQkJCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihpbmRleCkpKTsKLQkJCQl9Ci0JCQl9IGVsc2UKLQkJCQotCQkJaWYgKGlzRHVyYXRpb24oY21wdHlwZSwgYXQpKSB7Ci0JCQkJWFNEdXJhdGlvbiBkdXJhdCA9IChYU0R1cmF0aW9uKSBhdDsKLQkJCQlpZiAoZHVyYXQuZXEoY21wdHlwZSwgZHluYW1pY0NvbnRleHQpKSB7Ci0JCQkJCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihpbmRleCkpKTsKLQkJCQl9Ci0JCQl9IGVsc2UKLQkJCQotCQkJaWYgKG5lZWRzU3RyaW5nQ29tcGFyaXNvbihjbXB0eXBlLCBhdCkpIHsKLQkJCQlYU1N0cmluZyB4c3RyMSA9IG5ldyBYU1N0cmluZyhjbXB0eXBlLnN0cmluZ192YWx1ZSgpKTsKLQkJCQlYU1N0cmluZyBpdGVtU3RyID0gbmV3IFhTU3RyaW5nKGF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQlpZiAoRm5Db21wYXJlLmNvbXBhcmVfc3RyaW5nKGNvbGxhdGlvblVyaSwgeHN0cjEsIGl0ZW1TdHIsIGR5bmFtaWNDb250ZXh0KS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkgewotCQkJCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoaW5kZXgpKSk7Ci0JCQkJfQotCQkJfSAKLQkJCQotCQkJaW5kZXgrKzsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKEFueVR5cGUuY2xhc3MsIFNlcVR5cGUuT0NDX1NUQVIpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoQW55QXRvbWljVHlwZS5jbGFzcywgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW5zZXJ0QmVmb3JlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW5zZXJ0QmVmb3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NDY1YjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkluc2VydEJlZm9yZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhIG5ldyBzZXF1ZW5jZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSB2YWx1ZSBvZiAkdGFyZ2V0IHdpdGggdGhlIHZhbHVlCi0gKiBvZiAkaW5zZXJ0cyBpbnNlcnRlZCBhdCB0aGUgcG9zaXRpb24gc3BlY2lmaWVkIGJ5IHRoZSB2YWx1ZSBvZiAkcG9zaXRpb24uCi0gKiAoVGhlIHZhbHVlIG9mICR0YXJnZXQgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBzZXF1ZW5jZSBjb25zdHJ1Y3Rpb24uKQotICovCi1wdWJsaWMgY2xhc3MgRm5JbnNlcnRCZWZvcmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSW5zZXJ0QmVmb3JlLgotCSAqLwotCXB1YmxpYyBGbkluc2VydEJlZm9yZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJpbnNlcnQtYmVmb3JlIiksIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBpbnNlcnRfYmVmb3JlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEluc2VydC1CZWZvcmUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46aW5zZXJ0LWJlZm9yZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBpbnNlcnRfYmVmb3JlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAzOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdGFyZ2V0ID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgaW5zZXJ0cyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCS8vIHNhbml0eSBjaGV4Ci0JCWlmIChhcmcyLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlBbnlUeXBlIGF0ID0gYXJnMi5maXJzdCgpOwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIFhTSW50ZWdlcikpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCS8vIFhYWCBjbG9uaW5nIQotCQlpZiAodGFyZ2V0LmVtcHR5KCkpCi0JCQlyZXR1cm4gaW5zZXJ0czsKLQkJaWYgKGluc2VydHMuZW1wdHkoKSkKLQkJCXJldHVybiB0YXJnZXQ7Ci0KLQkJaW50IHBvc2l0aW9uID0gKChYU0ludGVnZXIpIGF0KS5pbnRfdmFsdWUoKS5pbnRWYWx1ZSgpOwotCi0JCWlmIChwb3NpdGlvbiA8IDEpCi0JCQlwb3NpdGlvbiA9IDE7Ci0JCWludCB0YXJnZXRfc2l6ZSA9IHRhcmdldC5zaXplKCk7Ci0KLQkJaWYgKHBvc2l0aW9uID4gdGFyZ2V0X3NpemUpCi0JCQlwb3NpdGlvbiA9IHRhcmdldF9zaXplICsgMTsKLQotCQlpbnQgY3VycG9zID0gMTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSB0YXJnZXQuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlhdCA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJaWYgKGN1cnBvcyA9PSBwb3NpdGlvbikKLQkJCQlycy5jb25jYXQoaW5zZXJ0cyk7Ci0KLQkJCXJzLmFkZChhdCk7Ci0KLQkJCWN1cnBvcysrOwotCQl9Ci0JCWlmIChjdXJwb3MgPT0gcG9zaXRpb24pCi0JCQlycy5jb25jYXQoaW5zZXJ0cyk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JcmlUb1VSSS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbklyaVRvVVJJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZWFiNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbklyaVRvVVJJLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI2Mjc2NSAtIHJlbmFtZWQgdG8gY29ycmVjdCBmdW5jdGlvbiBuYW1lLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTMxOSAtIGZpeCBVVEYtOCBlc2NhcGluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLXB1YmxpYyBjbGFzcyBGbklyaVRvVVJJIGV4dGVuZHMgQWJzdHJhY3RVUklGdW5jdGlvbiB7Ci0KLQlwdWJsaWMgRm5JcmlUb1VSSSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJpcmktdG8tdXJpIiksIDEpOwotCX0KLQkKLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBhcmd1bWVudHMgYWZ0ZXIgYXBwbGljYXRpb24gb2YgdGhlIFVSSQotCSAqICAgICAgICAgZXNjYXBpbmcgcnVsZXMuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBlc2NhcGVfdXJpKGFyZ3MsIGZhbHNlLCB0cnVlKTsKLQl9CQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTGFuZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxhbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgyZmJiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTGFuZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgwOTcyIC0gZml4IGZuOmxhbmcgaW1wbGVtZW50YXRpb24gc28gaXQgbWF0Y2hlcyBzcGVjLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gY29ycmVjdCBpbnZhbGlkVHlwZSB0byB0aHJvdyBYUFRZMDAwNCBpbnN0ZWFkIG9mIEZPUkcwMDA2Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiB0ZXN0cyB3aGV0aGVyIHRoZSBsYW5ndWFnZSBvZiAkbm9kZSwgb3IgdGhlIGNvbnRleHQgbm9kZSBpZiB0aGUKLSAqIHNlY29uZCBhcmd1bWVudCBpcyBvbWl0dGVkLCBhcyBzcGVjaWZpZWQgYnkgeG1sOmxhbmcgYXR0cmlidXRlcyBpcyB0aGUgc2FtZQotICogYXMsIG9yIGlzIGEgc3VibGFuZ3VhZ2Ugb2YsIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgJHRlc3RsYW5nLiBUaGUgbGFuZ3VhZ2UKLSAqIG9mIHRoZSBhcmd1bWVudCBub2RlLCBvciB0aGUgY29udGV4dCBub2RlIGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgb21pdHRlZCwKLSAqIGlzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mIHRoZSB4bWw6bGFuZyBhdHRyaWJ1dGUgb24gdGhlIG5vZGUsIG9yLCBpZiB0aGUKLSAqIG5vZGUgaGFzIG5vIHN1Y2ggYXR0cmlidXRlLCBieSB0aGUgdmFsdWUgb2YgdGhlIHhtbDpsYW5nIGF0dHJpYnV0ZSBvbiB0aGUKLSAqIG5lYXJlc3QgYW5jZXN0b3Igb2YgdGhlIG5vZGUgdGhhdCBoYXMgYW4geG1sOmxhbmcgYXR0cmlidXRlLiBJZiB0aGVyZSBpcyBubwotICogc3VjaCBhbmNlc3RvciwgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTGFuZyBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkxhbmcuCi0JICovCi0JcHVibGljIEZuTGFuZygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJsYW5nIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBsYW5nKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBMYW5ndWFnZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpsYW5nIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGxhbmcoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZwotCQlJdGVyYXRvciBjaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IG51bGw7Ci0JCWlmIChjYXJncy5zaXplKCkgPT0gMSkgewotCQkJaWYgKGNvbnRleHQuY29udGV4dF9pdGVtKCkgPT0gbnVsbCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCQl9Ci0JCQlhcmcyID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCWFyZzIuYWRkKGNvbnRleHQuY29udGV4dF9pdGVtKCkpOwotCQl9IGVsc2UgewotCQkJYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQl9Ci0JCQotCQlTdHJpbmcgbGFuZyA9ICIiOwotCi0JCWlmICghYXJnMS5lbXB0eSgpKSB7Ci0JCQlsYW5nID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCQl9Ci0KLQkJCi0JCWlmICghKGFyZzIuZmlyc3QoKSBpbnN0YW5jZW9mIE5vZGVUeXBlKSApIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0JCQotCQlOb2RlVHlwZSBhbiA9IChOb2RlVHlwZSkgYXJnMi5maXJzdCgpOwotCi0JCXJzLmFkZChuZXcgWFNCb29sZWFuKHRlc3RfbGFuZyhhbi5ub2RlX3ZhbHVlKCksIGxhbmcpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIExhbmd1YWdlIHRlc3Qgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBOb2RlIHRvIHRlc3QuCi0JICogQHBhcmFtIGxhbmcKLQkgKiAgICAgICAgICAgIExhbmd1YWdlIHRvIHRlc3QgZm9yLgotCSAqIEByZXR1cm4gQm9vbGVhbiByZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gdGVzdF9sYW5nKE5vZGUgbm9kZSwgU3RyaW5nIGxhbmcpIHsKLQkJTmFtZWROb2RlTWFwIGF0dHJzID0gbm9kZS5nZXRBdHRyaWJ1dGVzKCk7Ci0KLQkJaWYgKGF0dHJzICE9IG51bGwpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCUF0dHIgYXR0ciA9IChBdHRyKSBhdHRycy5pdGVtKGkpOwotCi0JCQkJaWYgKCEieG1sOmxhbmciLmVxdWFscyhhdHRyLmdldE5hbWUoKSkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCQotCQkJCVN0cmluZyB4bWxsYW5nVmFsdWUgPSBhdHRyLmdldFZhbHVlKCk7Ci0JCQkJaW50IGh5cGhlbkluZGV4ID0geG1sbGFuZ1ZhbHVlLmluZGV4T2YoJy0nKTsKLQkJCQkKLQkJCQlpZiAoaHlwaGVuSW5kZXggPiAtMSkgewotCQkJCQl4bWxsYW5nVmFsdWUgPSB4bWxsYW5nVmFsdWUuc3Vic3RyaW5nKDAsIGh5cGhlbkluZGV4KTsKLQkJCQl9Ci0KLQkJCQkKLQkJCQlTdHJpbmcgbGFuZ0xhbmd1YWdlID0gbGFuZzsKLQkJCQlpZiAobGFuZy5sZW5ndGgoKSA+IDIpIHsKLQkJCQkJbGFuZ0xhbmd1YWdlID0gbGFuZy5zdWJzdHJpbmcoMCwgMik7Ci0JCQkJfQotCQkJCQotCQkJCXJldHVybiB4bWxsYW5nVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShsYW5nTGFuZ3VhZ2UpOwotCQkJfQotCQl9Ci0KLQkJTm9kZSBwYXJlbnQgPSBub2RlLmdldFBhcmVudE5vZGUoKTsKLQkJaWYgKHBhcmVudCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCXJldHVybiB0ZXN0X2xhbmcocGFyZW50LCBsYW5nKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotCQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5MYXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTGFzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGZjZjY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5MYXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNlcXVlbmNlIG9mIGl0ZW1zCi0gKiBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiBJZiB0aGUgY29udGV4dCBpdGVtIGlzIHVuZGVmaW5lZCwgYW4gZXJyb3IgaXMKLSAqIHJhaXNlZCBbZXJyOkZPTkMwMDAxXS4KLSAqLwotcHVibGljIGNsYXNzIEZuTGFzdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5MYXN0LgotCSAqLwotCXB1YmxpYyBGbkxhc3QoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibGFzdCIpLCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbGFzdChhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogTGFzdCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmxhc3Qgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbGFzdChDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAwOwotCQkKLQkJaWYgKGRjLmZvY3VzKCkgPT0gbnVsbCB8fCBkYy5jb250ZXh0X2l0ZW0oKSA9PSBudWxsKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQl9Ci0KLQkJaW50IGxhc3QgPSBkYy5sYXN0KCk7Ci0KLQkJYXNzZXJ0IGxhc3QgIT0gMDsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YobGFzdCkpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTG9jYWxOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTG9jYWxOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ODJlODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjYyNzY1IC0gZml4ZWQgaW1wbGVtZW50YXRpb24gb2YgZm46bG9jYWwtbmFtZSBhY2NvcmRpbmcgdG8gc3BlYy4gIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIGxvY2FsIHBhcnQgb2YgdGhlIG5hbWUgb2YgJGFyZyBhcyBhbiB4czpzdHJpbmcgdGhhdCB3aWxsIGVpdGhlcgotICogYmUgdGhlIHplcm8tbGVuZ3RoIHN0cmluZyBvciB3aWxsIGhhdmUgdGhlIGxleGljYWwgZm9ybSBvZiBhbiB4czpOQ05hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkxvY2FsTmFtZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkxvY2FsTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5Mb2NhbE5hbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibG9jYWwtbmFtZSIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbG9jYWxfbmFtZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogTG9jYWwtTmFtZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpsb2NhbC1uYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGxvY2FsX25hbWUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmcKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IG51bGw7Ci0JCQotCQlpZiAoY2FyZ3MuaXNFbXB0eSgpKSB7Ci0JCQlpZiAoY29udGV4dC5jb250ZXh0X2l0ZW0oKSA9PSBudWxsKQotCQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCQllbHNlIHsKLQkJCQlhcmcxID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCQlhcmcxLmFkZChjb250ZXh0LmNvbnRleHRfaXRlbSgpKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCX0KLQkJCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJzLmFkZChuZXcgWFNTdHJpbmcoIiIpKTsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCU5vZGVUeXBlIGFuID0gKE5vZGVUeXBlKSBhcmcxLmZpcnN0KCk7Ci0JCQotCi0JCVFOYW1lIG5hbWUgPSBhbi5ub2RlX25hbWUoKTsKLQotCQlTdHJpbmcgc25hbWUgPSAiIjsKLQkJaWYgKG5hbWUgIT0gbnVsbCkKLQkJCXNuYW1lID0gbmFtZS5sb2NhbCgpOwotCi0JCXJzLmFkZChuZXcgWFNTdHJpbmcoc25hbWUpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTG9jYWxOYW1lRnJvbVFOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTG9jYWxOYW1lRnJvbVFOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OTQyYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZUZyb21RTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6TkNOQU1FIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgcGFydCBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZQotICogZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Mb2NhbE5hbWVGcm9tUU5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Mb2NhbE5hbWVGcm9tUU5hbWUuCi0JICovCi0JcHVibGljIEZuTG9jYWxOYW1lRnJvbVFOYW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImxvY2FsLW5hbWUtZnJvbS1RTmFtZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbG9jYWxfbmFtZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBMb2NhbC1OYW1lLWZyb20tUU5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bG9jYWwtbmFtZS1mcm9tLVFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGxvY2FsX25hbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmcKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQlRTmFtZSBxbmFtZSA9IChRTmFtZSkgYXJnMS5maXJzdCgpOwotCi0JCXJzLmFkZChuZXcgWFNOQ05hbWUocW5hbWUubG9jYWwoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBRTmFtZSgpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTG93ZXJDYXNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTG93ZXJDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMTdiNDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkxvd2VyQ2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiA8cD4KLSAqIENvbnZlcnNpb24gdG8gbG93ZXItY2FzZSBmdW5jdGlvbi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46bG93ZXItY2FzZSgkYXJnIGFzIHhzOnN0cmluZz8pIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyB0aGUgdmFsdWUgb2YgJGFyZyBhZnRlciB0cmFuc2xhdGluZyBldmVyeSBjaGFyYWN0ZXIgdG8gaXRzCi0gKiBsb3dlci1jYXNlIGNvcnJlc3BvbmRlbnQuIEV2ZXJ5IGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGhhdmUgYW4gbG93ZXItY2FzZQotICogY29ycmVzcG9uZGVudCBpcyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW4gaXRzIG9yaWdpbmFsIGZvcm0uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgdGhlIHZhbHVlIG9mICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgemVyby1sZW5ndGggc3RyaW5nIGlzCi0gKiByZXR1cm5lZC4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuTG93ZXJDYXNlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTG93ZXJDYXNlLgotCSAqLwotCXB1YmxpYyBGbkxvd2VyQ2FzZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJsb3dlci1jYXNlIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyBiZWluZyBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGxvd2VyX2Nhc2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydCBhcmd1bWVudHMgdG8gbG93ZXIgY2FzZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgYXJndW1lbnRzIHRvIGxvd2VyIGNhc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBsb3dlcl9jYXNlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJU3RyaW5nIHN0ciA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHN0ci50b0xvd2VyQ2FzZSgpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWF0Y2hlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1hdGNoZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk1MGM0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWF0Y2hlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBpbXByb3ZlbWVudHMgdG8gUmVndWxhciBFeHByZXNzaW9uICAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguKjsKLQotLyoqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmICRpbnB1dCBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gc3VwcGxpZWQKLSAqIGFzICRwYXR0ZXJuIGFzIGluZmx1ZW5jZWQgYnkgdGhlIHZhbHVlIG9mICRmbGFncywgaWYgcHJlc2VudDsgb3RoZXJ3aXNlLCBpdAotICogcmV0dXJucyBmYWxzZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTWF0Y2hlcyBleHRlbmRzIEFic3RyYWN0UmVnRXhGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5NYXRjaGVzLgotCSAqLwotCXB1YmxpYyBGbk1hdGNoZXMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibWF0Y2hlcyIpLCAyLCAzKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbWF0Y2hlcyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRjaGVzIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm1hdGNoZXMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbWF0Y2hlcyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlTdHJpbmcgc3RyMSA9ICIiOwotCQlpZiAoIWFyZzEuZW1wdHkoKSkgewotCQkJc3RyMSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJfQotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlTdHJpbmcgcGF0dGVybiA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQkJU3RyaW5nIGZsYWdzID0gbnVsbDsKLQotCQlpZiAoYXJnaXRlci5oYXNOZXh0KCkpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIGZsYWdSUyA9IG51bGw7Ci0JCQlmbGFnUlMgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQkJZmxhZ3MgPSBmbGFnUlMuZmlyc3QoKS5zdHJpbmdfdmFsdWUoKTsKLQkJCWlmICh2YWxpZGZsYWdzLmluZGV4T2YoZmxhZ3MpID09IC0xICYmIGZsYWdzLmxlbmd0aCgpID4gMCApIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IucmVnZXhfZmxhZ3NfZXJyb3IobnVsbCk7Ci0JCQl9Ci0JCX0KLQotCQl0cnkgewotCQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJCXJlc3VsdCA9IG1hdGNoZXMocGF0dGVybiwgZmxhZ3MsIHN0cjEpOwotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4ocmVzdWx0KSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKFBhdHRlcm5TeW50YXhFeGNlcHRpb24gcGV4KSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IucmVnZXhfZXJyb3IocGV4LmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0JCi0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1heC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1heC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjZmYjM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NYXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBwcm9tb3Rpb24gaXNzdWUKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGZpeCBwcm9tb3Rpb24gcnVsZXMgZm9yIGZuOm1heAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29tcGFyYWJsZVR5cGVQcm9tb3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuVHlwZVByb21vdGVyOwotCi0vKioKLSAqIFNlbGVjdHMgYW4gaXRlbSBmcm9tIHRoZSBpbnB1dCBzZXF1ZW5jZSAkYXJnIHdob3NlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvcgotICogZXF1YWwgdG8gdGhlIHZhbHVlIG9mIGV2ZXJ5IG90aGVyIGl0ZW0gaW4gdGhlIGlucHV0IHNlcXVlbmNlLiBJZiB0aGVyZSBhcmUKLSAqIHR3byBvciBtb3JlIHN1Y2ggaXRlbXMsIHRoZW4gdGhlIHNwZWNpZmljIGl0ZW0gd2hvc2UgdmFsdWUgaXMgcmV0dXJuZWQgaXMKLSAqIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KLSAqLwotcHVibGljIGNsYXNzIEZuTWF4IGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk1heC4KLQkgKi8KLQlwdWJsaWMgRm5NYXgoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibWF4IiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBtYXgoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE1heCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBjb250ZXh0IAotCSAqICAgICAgICAgICAgUmVsZXZhbnQgZHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm1heCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBtYXgoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSBnZXRfYXJnKGFyZ3MsIENtcEd0LmNsYXNzKTsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJQ21wR3QgbWF4ID0gbnVsbDsKLQotCQlUeXBlUHJvbW90ZXIgdHAgPSBuZXcgQ29tcGFyYWJsZVR5cGVQcm9tb3RlcigpOwotCQl0cC5jb25zaWRlclNlcXVlbmNlKGFyZyk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJnLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55QXRvbWljVHlwZSBjb252ID0gdHAucHJvbW90ZSgoQW55VHlwZSkgaS5uZXh0KCkpOwotCQkJCi0JCQlpZiAoY29udiBpbnN0YW5jZW9mIFhTRG91YmxlICYmICgoWFNEb3VibGUpY29udikubmFuKCkgfHwgY29udiBpbnN0YW5jZW9mIFhTRmxvYXQgJiYgKChYU0Zsb2F0KWNvbnYpLm5hbigpKSB7Ci0JCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHRwLnByb21vdGUobmV3IFhTRmxvYXQoRmxvYXQuTmFOKSkpOwotCQkJfQotCQkJaWYgKG1heCA9PSBudWxsIHx8ICgoQ21wR3QpY29udikuZ3QoKEFueVR5cGUpbWF4LCBjb250ZXh0KSkgewotCQkJCW1heCA9IChDbXBHdCljb252OwotCQkJfQotCQl9Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygoQW55VHlwZSkgbWF4KTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBleHByZXNzaW9ucy4KLQkgKiBAcGFyYW0gb3AKLQkgKiAgICAgICAgICAgIGlucHV0IGNsYXNzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBnZXRfYXJnKENvbGxlY3Rpb24gYXJncywgQ2xhc3Mgb3ApCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBhcmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjQzMDc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIHByb21vdGlvbiBpc3N1ZSAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGZpeCBwcm9tb3Rpb24gcnVsZXMgZm9yIGZuOm1pbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29tcGFyYWJsZVR5cGVQcm9tb3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuVHlwZVByb21vdGVyOwotCi0vKioKLSAqIHNlbGVjdHMgYW4gaXRlbSBmcm9tIHRoZSBpbnB1dCBzZXF1ZW5jZSAkYXJnIHdob3NlIHZhbHVlIGlzIGxlc3MgdGhhbiBvcgotICogZXF1YWwgdG8gdGhlIHZhbHVlIG9mIGV2ZXJ5IG90aGVyIGl0ZW0gaW4gdGhlIGlucHV0IHNlcXVlbmNlLiBJZiB0aGVyZSBhcmUKLSAqIHR3byBvciBtb3JlIHN1Y2ggaXRlbXMsIHRoZW4gdGhlIHNwZWNpZmljIGl0ZW0gd2hvc2UgdmFsdWUgaXMgcmV0dXJuZWQgaXMKLSAqIGltcGxlbWVudGF0aW9uIGluZGVwZW5kZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5NaW4gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTWluLgotCSAqLwotCXB1YmxpYyBGbk1pbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtaW4iKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1pbihhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogTWluIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGR5bmFtaWMgCi0JICogICAgICAgICAgICBEeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bWluIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG1pbihDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IEZuTWF4LmdldF9hcmcoYXJncywgQ21wTHQuY2xhc3MpOwotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlDbXBMdCBtYXggPSBudWxsOwotCi0JCVR5cGVQcm9tb3RlciB0cCA9IG5ldyBDb21wYXJhYmxlVHlwZVByb21vdGVyKCk7Ci0JCXRwLmNvbnNpZGVyU2VxdWVuY2UoYXJnKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlBbnlBdG9taWNUeXBlIGNvbnYgPSB0cC5wcm9tb3RlKChBbnlUeXBlKSBpLm5leHQoKSk7Ci0JCQkKLQkJCWlmIChjb252IGluc3RhbmNlb2YgWFNEb3VibGUgJiYgKChYU0RvdWJsZSljb252KS5uYW4oKSB8fCBjb252IGluc3RhbmNlb2YgWFNGbG9hdCAmJiAoKFhTRmxvYXQpY29udikubmFuKCkpIHsKLQkJCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcodHAucHJvbW90ZShuZXcgWFNGbG9hdChGbG9hdC5OYU4pKSk7Ci0JCQl9Ci0JCQlpZiAobWF4ID09IG51bGwgfHwgKChDbXBMdCljb252KS5sdCgoQW55VHlwZSltYXgsIGNvbnRleHQpKSB7Ci0JCQkJbWF4ID0gKENtcEx0KWNvbnY7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KChBbnlUeXBlKSBtYXgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbnV0ZXNGcm9tRGF0ZVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW51dGVzRnJvbURhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZTNmNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbnV0ZXNGcm9tRGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgdmFsdWUgYmV0d2VlbiAwIGFuZCA1OSwgYm90aCBpbmNsdXNpdmUsIHJlcHJlc2VudGluZwotICogdGhlIG1pbnV0ZSBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eQotICogc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5NaW51dGVzRnJvbURhdGVUaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTWludXRlc0Zyb21EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5NaW51dGVzRnJvbURhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1pbnV0ZXMtZnJvbS1kYXRlVGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbWludXRlc19mcm9tX2RhdGVfdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNaW51dGVzLWZyb20tRGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bWludXRlcy1mcm9tLWRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG1pbnV0ZXNfZnJvbV9kYXRlX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQubWludXRlKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW51dGVzRnJvbUR1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWludXRlc0Zyb21EdXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODE3MjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW51dGVzRnJvbUR1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgZXhwZWN0ZWQgYXJncyBmb3IgZm5NaW51dGVzRnJvbUR1cmF0aW9uIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG1pbnV0ZXMgY29tcG9uZW50IGluIHRoZSBjYW5vbmljYWwKLSAqIGxleGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mICRhcmcuIFRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLiBJZgotICogJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5NaW51dGVzRnJvbUR1cmF0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTWludXRlc0Zyb21EdXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgRm5NaW51dGVzRnJvbUR1cmF0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1pbnV0ZXMtZnJvbS1kdXJhdGlvbiIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbWludXRlc19mcm9tX2R1cmF0aW9uKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIE1pbnV0ZXMtZnJvbS1EdXJhdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptaW51dGVzLWZyb20tZHVyYXRpb24gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbWludXRlc19mcm9tX2R1cmF0aW9uKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEdXJhdGlvbiBkdGQgPSAoWFNEdXJhdGlvbikgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdGQubWludXRlcygpOwotCi0JCWlmIChkdGQubmVnYXRpdmUoKSkKLQkJCXJlcyAqPSAtMTsKLQotCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRHVyYXRpb24oKSwKLQkJCQkJU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWludXRlc0Zyb21UaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWludXRlc0Zyb21UaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NjdmODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbnV0ZXNGcm9tVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciB2YWx1ZSBiZXR3ZWVuIDAgdG8gNTksIGJvdGggaW5jbHVzaXZlLCByZXByZXNlbnRpbmcgdGhlCi0gKiB2YWx1ZSBvZiB0aGUgbWludXRlcyBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZQotICogZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5NaW51dGVzRnJvbVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5NaW51dGVzRnJvbVRpbWUuCi0JICovCi0JcHVibGljIEZuTWludXRlc0Zyb21UaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1pbnV0ZXMtZnJvbS10aW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBtaW51dGVzX2Zyb21fdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNaW51dGVzLWZyb20tVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptaW51dGVzLWZyb20tdGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBtaW51dGVzX2Zyb21fdGltZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTVGltZSBkdCA9IChYU1RpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQubWludXRlKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1RpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTW9udGhGcm9tRGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoRnJvbURhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkZDA4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTW9udGhGcm9tRGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEyLCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nIHRoZQotICogbW9udGggY29tcG9uZW50IGluIHRoZSBsb2NhbGl6ZWQgdmFsdWUgb2YgJGFyZy4gSWYgJGFyZyBpcyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTW9udGhGcm9tRGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk1vbnRoRnJvbURhdGUuCi0JICovCi0JcHVibGljIEZuTW9udGhGcm9tRGF0ZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtb250aC1mcm9tLWRhdGUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1vbnRoX2Zyb21fZGF0ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNb250aC1mcm9tLURhdGUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bW9udGgtZnJvbS1kYXRlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG1vbnRoX2Zyb21fZGF0ZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRGF0ZSBkdCA9IChYU0RhdGUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQubW9udGgoKTsKLQotCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Nb250aEZyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoRnJvbURhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjOGZmNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoRnJvbURhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTIsIGJvdGggaW5jbHVzaXZlLCByZXByZXNlbnRpbmcgdGhlCi0gKiBtb250aCBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eQotICogc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Nb250aEZyb21EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk1vbnRoRnJvbURhdGVUaW1lLgotCSAqLwotCXB1YmxpYyBGbk1vbnRoRnJvbURhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1vbnRoLWZyb20tZGF0ZVRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1vbnRoX2Zyb21fZGF0ZV90aW1lKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIE1vbnRoLWZyb20tRGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bW9udGgtZnJvbS1kYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBtb250aF9mcm9tX2RhdGVfdGltZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRGF0ZVRpbWUgZHQgPSAoWFNEYXRlVGltZSkgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdC5tb250aCgpOwotCi0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZVRpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTW9udGhzRnJvbUR1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTW9udGhzRnJvbUR1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MjdiYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoc0Zyb21EdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24uIAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgZXhwZWN0ZWQgeHM6ZHVyYXRpb24gYXJndW1lbnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBtb250aHMgY29tcG9uZW50IGluIHRoZSBjYW5vbmljYWwKLSAqIGxleGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mICRhcmcuIFRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLiBJZgotICogJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Nb250aHNGcm9tRHVyYXRpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Nb250aHNGcm9tRHVyYXRpb24uCi0JICovCi0JcHVibGljIEZuTW9udGhzRnJvbUR1cmF0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1vbnRocy1mcm9tLWR1cmF0aW9uIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBtb250aHNfZnJvbV9kdXJhdGlvbihhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNb250aHMtZnJvbS1EdXJhdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptb250aHMtZnJvbS1kdXJhdGlvbiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBtb250aHNfZnJvbV9kdXJhdGlvbihDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRHVyYXRpb24geW1kID0gKFhTRHVyYXRpb24pIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0geW1kLm1vbnRoKCk7Ci0KLQkJaWYgKHltZC5uZWdhdGl2ZSgpKQotCQkJcmVzICo9IC0xOwotCi0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEdXJhdGlvbigpLAotCQkJCQlTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWExNGZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyNjI3NjUgLSBGaXhlZCBhcmd1bWVudHMgZm9yIE5hbWUgZnVuY3Rpb24uIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIG5vZGUsIGFzIGFuIHhzOnN0cmluZyB0aGF0IGlzIGVpdGhlciB0aGUgemVyby1sZW5ndGgKLSAqIHN0cmluZywgb3IgaGFzIHRoZSBsZXhpY2FsIGZvcm0gb2YgYW4geHM6UU5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5OYW1lLgotCSAqLwotCXB1YmxpYyBGbk5hbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibmFtZSIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbmFtZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBOYW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbmFtZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWlmIChhcmdzLmlzRW1wdHkoKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJfQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKCIiKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlOb2RlVHlwZSBhbiA9IChOb2RlVHlwZSkgYXJnMS5maXJzdCgpOwotCi0JCVFOYW1lIG5hbWUgPSBhbi5ub2RlX25hbWUoKTsKLQotCQlTdHJpbmcgc25hbWUgPSAiIjsKLQkJaWYgKG5hbWUgIT0gbnVsbCkKLQkJCXNuYW1lID0gbmFtZS5zdHJpbmcoKTsKLQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHNuYW1lKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5hbWVzcGFjZVVyaS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5hbWVzcGFjZVVyaS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWUxNTU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lc3BhY2VVcmkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gY29ycmVjdGVkIGltcGxlbWVudGF0aW9uIGFjY29yZGluZyB0byBzcGVjLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSB4czpRTmFtZSBvZiAkYXJnLgotICovCi1wdWJsaWMgY2xhc3MgRm5OYW1lc3BhY2VVcmkgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5OYW1lc3BhY2VVcmkuCi0JICovCi0JcHVibGljIEZuTmFtZXNwYWNlVXJpKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm5hbWVzcGFjZS11cmkiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5hbWVzcGFjZV91cmkoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE5hbWVzcGFjZS1Vcmkgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bmFtZXNwYWNlLXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBuYW1lc3BhY2VfdXJpKENvbGxlY3Rpb24gYXJncywKLQkJCUR5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IG51bGw7Ci0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJCWlmIChjb250ZXh0LmNvbnRleHRfaXRlbSgpID09IG51bGwpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJfQotCQkJYXJnMSA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQlhcmcxLmFkZChjb250ZXh0LmNvbnRleHRfaXRlbSgpKTsKLQkJfSBlbHNlIHsKLQkJCS8vIGdldCBhcmcKLQkJCWFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQl9Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcnMuYWRkKG5ldyBYU0FueVVSSSgiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJTm9kZVR5cGUgYW4gPSAoTm9kZVR5cGUpIGFyZzEuZmlyc3QoKTsKLQotCQlRTmFtZSBuYW1lID0gYW4ubm9kZV9uYW1lKCk7Ci0KLQkJU3RyaW5nIHNuYW1lID0gIiI7Ci0JCWlmIChuYW1lICE9IG51bGwpCi0JCQlzbmFtZSA9IG5hbWUubmFtZXNwYWNlKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0FueVVSSShzbmFtZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lc3BhY2VVcmlGcm9tUU5hbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lc3BhY2VVcmlGcm9tUU5hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU3MTFjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmFtZXNwYWNlVXJpRnJvbVFOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbmFtZXNwYWNlIFVSSSBmb3IgJGFyZyBhcyBhbiB4czpzdHJpbmcuIElmICRhcmcgaXMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZSwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzIHJldHVybmVkLiBJZiAkYXJnIGlzIGluIG5vIG5hbWVzcGFjZSwgdGhlCi0gKiB6ZXJvLWxlbmd0aCBzdHJpbmcgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk5hbWVzcGFjZVVyaUZyb21RTmFtZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk5hbWVzcGFjZVVyaUZyb21RTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5OYW1lc3BhY2VVcmlGcm9tUU5hbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibmFtZXNwYWNlLXVyaS1mcm9tLVFOYW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBuYW1lc3BhY2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTmFtZXNwYWNlLXVyaS1mcm9tLVFOYW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm5hbWVzcGFjZS11cmktZnJvbS1RTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBuYW1lc3BhY2UoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCVFOYW1lIHFuYW1lID0gKFFOYW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJU3RyaW5nIG5zID0gcW5hbWUubmFtZXNwYWNlKCk7Ci0KLQkJaWYgKG5zID09IG51bGwpCi0JCQlucyA9ICIiOwotCQlycy5hZGQobmV3IFhTQW55VVJJKG5zKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFFOYW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OaWxsZWQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OaWxsZWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM3N2MwYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmlsbGVkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYXJndW1lbnQgbm9kZSBpcyAibmlsbGVkIi4gSWYKLSAqIHRoZSBhcmd1bWVudCBpcyBub3QgYW4gZWxlbWVudCBub2RlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTmlsbGVkIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTmlsbGVkLgotCSAqLwotCXB1YmxpYyBGbk5pbGxlZCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJuaWxsZWQiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5pbGxlZChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBOaWxsZWQgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bmlsbGVkIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG5pbGxlZChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQkKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gYXJnMTsKLQkJfQotCQlOb2RlVHlwZSBudCA9IChOb2RlVHlwZSkgYXJnMS5maXJzdCgpOwotCQkKLQkJcmV0dXJuIG50Lm5pbGxlZCgpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob2RlTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vZGVOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YzUzMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vZGVOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiBleHBhbmRlZC1RTmFtZSBmb3Igbm9kZSBraW5kcyB0aGF0IGNhbiBoYXZlIG5hbWVzLiBGb3Igb3RoZXIga2luZHMKLSAqIG9mIG5vZGVzIGl0IHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlCi0gKiBlbXB0eSBzZXF1ZW5jZSBpcyByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuTm9kZU5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Ob2RlTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5Ob2RlTmFtZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJub2RlLW5hbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5vZGVfbmFtZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBOb2RlLU5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bm9kZS1uYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG5vZGVfbmFtZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGFyZzEuZmlyc3QoKTsKLQotCQlRTmFtZSBub2RlbmFtZSA9IG50Lm5vZGVfbmFtZSgpOwotCQlpZiAobm9kZW5hbWUgPT0gbnVsbCkKLQkJCXJldHVybiByczsKLQotCQlycy5hZGQobm9kZW5hbWUpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm9ybWFsaXplU3BhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob3JtYWxpemVTcGFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzA2OTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob3JtYWxpemVTcGFjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ0NzEgLSBpbXByb3ZlbWVudHMgdG8gbm9ybWFsaXplLXNwYWNlIGZ1bmN0aW9uIChzdXBwb3J0IGZvciBhcml0eSAwKQotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gY29ycmVjdCBpbXBsZW1lbnRhdGlvbiB0byBjb3JyZWN0bHkgZ2V0IGNvbnRleHQgbm9kZSAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI4MTkzOCAtIGhhbmRsZSBjb250ZXh0IGFuZCBlbXB0eSBzZXF1ZW5jZXMgY29ycmVjdGx5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIDxwPgotICogRnVuY3Rpb24gdG8gbm9ybWFsaXplIHdoaXRlc3BhY2UuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOm5vcm1hbGl6ZS1zcGFjZSgkYXJnIGFzIHhzOnN0cmluZz8pIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyB0aGUgdmFsdWUgb2YgJGFyZyB3aXRoIHdoaXRlc3BhY2Ugbm9ybWFsaXplZCBieSBzdHJpcHBpbmcKLSAqIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2luZyBzZXF1ZW5jZXMgb2Ygb25lIG9yIG1vcmUgdGhhbgotICogb25lIHdoaXRlc3BhY2UgY2hhcmFjdGVyIHdpdGggYSBzaW5nbGUgc3BhY2UsICN4MjAuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgZGVmaW5lZCBhcyBUQUIgKCN4OSksIExJTkUgRkVFRCAoI3hBKSwgQ0FSUklBR0UKLSAqIFJFVFVSTiAoI3hEKSBhbmQgU1BBQ0UgKCN4MjApLiBJZiB0aGUgdmFsdWUgb2YgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsCi0gKiB0aGUgY2xhc3MgcmV0dXJucyB0aGUgemVyby1sZW5ndGggc3RyaW5nLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5Ob3JtYWxpemVTcGFjZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk5vcm1hbGl6ZVNwYWNlLgotCSAqLwotCXB1YmxpYyBGbk5vcm1hbGl6ZVNwYWNlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm5vcm1hbGl6ZS1zcGFjZSIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBzcGFjZSBpbiB0aGUgYXJndW1lbnRzIGJlaW5nIG5vcm1hbGl6ZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBub3JtYWxpemVfc3BhY2UoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE5vcm1hbGl6ZSBzcGFjZSBpbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgdXNlZCB0byBvYnRhaW4gc3BhY2UgZnJvbSwgaW4gb3JkZXIgdG8gYmUgbm9ybWFsaXplZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIG5vcm1hbGl6aW5nIHRoZSBzcGFjZSBpbiB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugbm9ybWFsaXplX3NwYWNlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZF9jb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSBudWxsOwotCQkKLQkJaWYgKGNhcmdzLmlzRW1wdHkoKSkgewotCQkgIC8vIHN1cHBvcnQgZm9yIGFyaXR5ID0gMAotCQkgIGFyZzEgPSBnZXRSZXN1bHRTZXRGb3JBcml0eVplcm8oZF9jb250ZXh0KTsKLQkJfQotCQllbHNlIHsKLQkJICBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJfQotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJU3RyaW5nIHN0ciA9ICIiOwotCQlpZiAoISBhcmcxLmVtcHR5KCkpIHsKLQkJCXN0ciA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJfSAKLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhub3JtYWxpemUoc3RyKSkpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogVGhlIG5vcm1hbGl6aW5nIHByb2Nlc3MuCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgaXMgdGhlIHN0cmluZyB0aGF0IHNwYWNlIHdpbGwgYmUgbm9ybWFsaXplZCBpbi4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgdGhlIG5vcm1hbGl6aW5nIG9wZXJhdGlvbi4KLQkgKi8KLQkvLyBYWFggZml4IHRoaXMKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIHN0cikgewotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQkJaW50IHN0YXRlID0gMDsgLy8gMCBiZWdpbgotCQkvLyAxIG1pZGRsZQotCQkvLyAyIGVuZAotCQkvLyAzIHNraXBwaW5nCi0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykgewotCQkJY2hhciB4ID0gc3RyLmNoYXJBdChpKTsKLQotCQkJYm9vbGVhbiB3aGl0ZSA9IGlzX3doaXRlc3BhY2UoeCk7Ci0KLQkJCXN3aXRjaCAoc3RhdGUpIHsKLQkJCS8vIGRvaW5nIHRoZSBiZWdpbm5pbmcKLQkJCWNhc2UgMDoKLQkJCQlpZiAod2hpdGUpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWVsc2UgewotCQkJCQlzYi5hcHBlbmQoeCk7Ci0JCQkJCXN0YXRlID0gMTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCS8vIGRvaW5nIHRoZSBtaWRkbGUKLQkJCWNhc2UgMToKLQkJCQlpZiAod2hpdGUpIHsKLQkJCQkJc3RhdGUgPSAzOwotCQkJCQlzYi5hcHBlbmQoJyAnKTsKLQkJCQl9IGVsc2UKLQkJCQkJc2IuYXBwZW5kKHgpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDM6Ci0JCQkJaWYgKCF3aGl0ZSkgewotCQkJCQlzdGF0ZSA9IDE7Ci0JCQkJCXNiLmFwcGVuZCh4KTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJYXNzZXJ0IGZhbHNlOwotCQkJfQotCQl9Ci0KLQkJLy8gbm93IGJhc2ljYWxseSB3ZSBjYW4gb25seSBoYXZlIGEgd2hpdGVzcGFjZSBhdCB0aGUgZW5kLi4uCi0JCVN0cmluZyByZXN1bHQgPSBzYi50b1N0cmluZygpOwotCQlpbnQgbGVuID0gcmVzdWx0Lmxlbmd0aCgpOwotCi0JCWlmIChsZW4gPT0gMCkKLQkJCXJldHVybiByZXN1bHQ7Ci0JCWlmIChyZXN1bHQuY2hhckF0KGxlbiAtIDEpID09ICcgJykKLQkJCXJldHVybiByZXN1bHQuc3Vic3RyaW5nKDAsIGxlbiAtIDEpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZSBvciBub3QuCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjaGFyYWN0ZXIgdGhpcyBvcGVyYXRpb24gd2lsbCB0YWtlIHBsYWNlIG9uLgotCSAqIEByZXR1cm4gV2hldGhlciBvciBub3QgdGhlIGNoYXJhY3RlciBpcyB3aGl0ZXNwYWNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc193aGl0ZXNwYWNlKGNoYXIgeCkgewotCQlzd2l0Y2ggKHgpIHsKLQkJY2FzZSAnICc6Ci0JCWNhc2UgJ1xyJzoKLQkJY2FzZSAnXHQnOgotCQljYXNlICdcbic6Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm9ybWFsaXplVW5pY29kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vcm1hbGl6ZVVuaWNvZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyYTBjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm9ybWFsaXplVW5pY29kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgSmVzcGVyIFN0ZWVuIE1vZWxsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE1MiAtIGltcGxlbWVudCBmbjpub3JtYWxpemUtdW5pY29jZGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0Lk5vcm1hbGl6ZXI7Ci0KLS8qKgotICogPHA+Ci0gKiBGdW5jdGlvbiB0byBub3JtYWxpemUgdW5pY29kZS4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46bm9ybWFsaXplLXVuaWNvZGUoJGFyZyBhcyB4czpzdHJpbmc/KSBhcyB4czpzdHJpbmcKLSAqIG9yIGZuOm5vcm1hbGl6ZS11bmljb2RlKCRhcmcgYXMgeHM6c3RyaW5nPywgJG5vcm1hbGl6YXRpb24tZm9ybSBhcyB4czpzdHJpbmcpIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQgaW4gdGhlIG5vcm1hbGl6YXRpb24gZm9ybSBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBhcmd1bWVudC4KLSAqIDwvcD4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgRm5Ob3JtYWxpemVVbmljb2RlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTm9ybWFsaXplVW5pY29kZQotCSAqLwotCXB1YmxpYyBGbk5vcm1hbGl6ZVVuaWNvZGUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibm9ybWFsaXplLXVuaWNvZGUiKSwgMSwgMik7Ci0JfQotCi0JcHVibGljIGludGVyZmFjZSBXM0NOb3JtYWxpemVyIHsKLQkJU3RyaW5nIG5vcm1hbGl6ZShTdHJpbmcgYXJndW1lbnQsIFN0cmluZyBub3JtYWxpemF0aW9uRm9ybSkgdGhyb3dzIER5bmFtaWNFcnJvcjsKLQl9OwotCQotCXN0YXRpYyBjbGFzcyBJQ1VOb3JtYWxpemVyIGltcGxlbWVudHMgVzNDTm9ybWFsaXplciB7Ci0JCQotCQlwdWJsaWMgU3RyaW5nIG5vcm1hbGl6ZShTdHJpbmcgYXJndW1lbnQsIFN0cmluZyBub3JtYWxpemF0aW9uRm9ybSkKLQkJCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJCWlmIChub3JtYWxpemF0aW9uRm9ybS5lcXVhbHMoIk5GQyIpKSB7Ci0JCQkJcmV0dXJuIE5vcm1hbGl6ZXIubm9ybWFsaXplKGFyZ3VtZW50LCBOb3JtYWxpemVyLk5GQyk7Ci0JCQl9IGVsc2UgaWYgKG5vcm1hbGl6YXRpb25Gb3JtLmVxdWFscygiTkZEIikpIHsKLQkJCQlyZXR1cm4gTm9ybWFsaXplci5ub3JtYWxpemUoYXJndW1lbnQsIE5vcm1hbGl6ZXIuTkZEKTsKLQkJCX0gZWxzZSBpZiAobm9ybWFsaXphdGlvbkZvcm0uZXF1YWxzKCJORktDIikpIHsKLQkJCQlyZXR1cm4gTm9ybWFsaXplci5ub3JtYWxpemUoYXJndW1lbnQsIE5vcm1hbGl6ZXIuTkZLQyk7Ci0JCQl9IGVsc2UgaWYgKG5vcm1hbGl6YXRpb25Gb3JtLmVxdWFscygiTkZLRCIpKSB7Ci0JCQkJcmV0dXJuIE5vcm1hbGl6ZXIubm9ybWFsaXplKGFyZ3VtZW50LCBOb3JtYWxpemVyLk5GS0QpOwotLy8JCQl9IGVsc2UgaWYgKG5vcm1hbGl6YXRpb25Gb3JtLmVxdWFscygiRlVMTFktTk9STUFMSVpFRCIpKSB7Ci0vLwkJCQlTdHJpbmcgbm9ybWFsaXplZF9idXRfcG9zc2libHlfcGFydGlhbCA9IE5vcm1hbGl6ZXIubm9ybWFsaXplKGFyZ3VtZW50LCBOb3JtYWxpemVyLk5GQyk7Ci0JCQkJLy8gWFhYOiBDaGVjayB0byBzZWUgdGhhdCB0aGUgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgbW9kaWZpZXIsIGFuZCwgaWYgcmVxdWlyZWQsIG5ldXRyYWxpemUgaXQgdG8gaXRzIGNvbXBvc2VkIGVxdWl2YWxlbnQKLS8vCQkJCXJldHVybiBub3JtYWxpemVkX2J1dF9wb3NzaWJseV9wYXJ0aWFsOwotCQkJfSBlbHNlIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IudW5zdXBwb3J0ZWRfbm9ybWFsaXphdGlvbl9mb3JtKG5vcm1hbGl6YXRpb25Gb3JtKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBzcGFjZSBpbiB0aGUgYXJndW1lbnRzIGJlaW5nIG5vcm1hbGl6ZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBub3JtYWxpemVfdW5pY29kZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogTm9ybWFsaXplIHVuaWNvZGUgY29kZXBvaW50cyBpbiB0aGUgYXJndW1lbnQuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSB1c2VkIHRvIG9idGFpbiB0aGUgaW5wdXQgc3RyaW5nIGFuZCBvcHRpb25hbGx5IHRoZSBub3JtYWxpemF0aW9uIHR5cGUgZnJvbS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIG5vcm1hbGl6aW5nIHRoZSBzcGFjZSBpbiB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugbm9ybWFsaXplX3VuaWNvZGUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkX2NvbnRleHQpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IDEgJiYgYXJncy5zaXplKCkgPD0gMjsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQkJCi0JCUl0ZXJhdG9yIGNhcmdzSXRlcmF0b3IgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJnc0l0ZXJhdG9yLm5leHQoKTsKLQotCi0JCVN0cmluZyBub3JtYWxpemF0aW9uVHlwZSA9ICJORkMiOwotCQlpZiAoY2FyZ3NJdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpY2FyZ3NJdGVyYXRvci5uZXh0KCk7Ci0JCQkvLyBUcmltIGFuZCBjb252ZXJ0IHRvIHVwcGVyIGFzIHBlciB0aGUgc3BlYwotCQkJaWYgKGFyZzIuZW1wdHkoKSkgewotCQkJCW5vcm1hbGl6YXRpb25UeXBlID0gIiI7Ci0JCQl9IGVsc2UgewotCQkJCW5vcm1hbGl6YXRpb25UeXBlID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwotCQkJfQotCQl9Ci0JCQotCQlTdHJpbmcgYXJndW1lbnQgPSAiIjsKLQkJaWYgKCEgYXJnMS5lbXB0eSgpKSBhcmd1bWVudCA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJCQkKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlTdHJpbmcgbm9ybWFsaXplZCA9IG5vcm1hbGl6YXRpb25UeXBlLmVxdWFscygiIikgPyBhcmd1bWVudCA6IGdldE5vcm1hbGl6ZXIoKS5ub3JtYWxpemUoYXJndW1lbnQsIG5vcm1hbGl6YXRpb25UeXBlKTsKLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhub3JtYWxpemVkKSk7Ci0JCQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgVzNDTm9ybWFsaXplciBnZXROb3JtYWxpemVyKCkgewotCQlyZXR1cm4gbmV3IElDVU5vcm1hbGl6ZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm90LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm90LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTQyODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjYyNzY1IC0gcHJvcGFnYXRlIHBvc3NpYmxlIGVycm9ycyBmcm9tIHhzOmJvb2xlYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiAkYXJnIGlzIGZpcnN0IHJlZHVjZWQgdG8gYW4gZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUgYnkgYXBwbHlpbmcgdGhlCi0gKiBmbjpib29sZWFuKCkgZnVuY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiB0aGUgZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUgaXMgZmFsc2UsCi0gKiBhbmQgZmFsc2UgaWYgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlIGlzIHRydWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk5vdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Ob3QuCi0JICovCi0JcHVibGljIEZuTm90KCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm5vdCIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IgCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIDEgYXJndW1lbnQgb25seSEKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBmbl9ub3QoYXJndW1lbnQpOwotCX0KLQotCS8qKgotCSAqIE5vdCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bm90ZSBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IgCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9ub3QoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNCb29sZWFuIHJldCA9IEZuQm9vbGVhbi5mbl9ib29sZWFuKGFyZyk7Ci0KLQkJYm9vbGVhbiBhbnN3ZXIgPSBmYWxzZTsKLQotCQlpZiAocmV0LnZhbHVlKCkgPT0gZmFsc2UpCi0JCQlhbnN3ZXIgPSB0cnVlOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGFuc3dlcikpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk51bWJlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk51bWJlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWE3OWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OdW1iZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyNjI3NjUgLSBmaXhlcyBmbG9hdCBoYW5kbGluZyBmb3IgZm46bnVtYmVyIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyOTg1MTkgLSBpbXByb3ZlbWVudHMgdG8gZm46bnVtYmVyIGltcGxlbWVudGF0aW9uLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlcmluZyB0byBub2RlIGFyZ3VtZW50cy4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHZhbHVlIGluZGljYXRlZCBieSAkYXJnIG9yLCBpZiAkYXJnIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250ZXh0Ci0gKiBpdGVtIGFmdGVyIGF0b21pemF0aW9uLCBjb252ZXJ0ZWQgdG8gYW4geHM6ZG91YmxlLiBJZiAkYXJnIG9yIHRoZSBjb250ZXh0Ci0gKiBpdGVtIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYW4geHM6ZG91YmxlLCB0aGUgeHM6ZG91YmxlIHZhbHVlIE5hTiBpcwotICogcmV0dXJuZWQuIElmIHRoZSBjb250ZXh0IGl0ZW0gaXMgdW5kZWZpbmVkIGFuIGVycm9yIGlzIHJhaXNlZDoKLSAqIFtlcnI6Rk9OQzAwMDFdLgotICovCi1wdWJsaWMgY2xhc3MgRm5OdW1iZXIgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTnVtYmVyLgotCSAqLwotCXB1YmxpYyBGbk51bWJlcigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJudW1iZXIiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJndW1lbnQgPSBudWxsOwotCQlpZiAoYXJncy5pc0VtcHR5KCkpIHsKLQkJCWFyZ3VtZW50ID0gZ2V0UmVzdWx0U2V0Rm9yQXJpdHlaZXJvKGR5bmFtaWNfY29udGV4dCgpKTsKLQkJfSBlbHNlIHsKLQkJCWFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQl9Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlycy5hZGQoZm5fbnVtYmVyKGFyZ3VtZW50LCBkeW5hbWljX2NvbnRleHQoKSkpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogTnVtYmVyIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpudW1iZXIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNEb3VibGUgZm5fbnVtYmVyKFJlc3VsdFNlcXVlbmNlIGFyZywgRHluYW1pY0NvbnRleHQgZGMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlpZiAoYXJnLnNpemUoKSA+IDEpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZSgiYmFkIGFyZ3VtZW50IHBhc3NlZCB0byBmbjpudW1iZXIoKSIpKTsKLQkJfSBlbHNlIGlmIChhcmcuc2l6ZSgpID09IDEpIHsKLQkJCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQotCQkJLyoKLQkJCWlmICghKGF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpCi0JCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCSovCi0JCQkKLQkJCWlmIChhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpIHsKLQkJCSAgaWYgKChhdCBpbnN0YW5jZW9mIFhTRG91YmxlKSkgewotCQkJCSByZXR1cm4gKFhTRG91YmxlKWF0OwotCQkJICB9IGVsc2UgaWYgKChhdCBpbnN0YW5jZW9mIFhTRmxvYXQpKSB7Ci0JCQkJICBmbG9hdCB2YWx1ZSA9ICgoWFNGbG9hdClhdCkuZmxvYXRfdmFsdWUoKTsKLQkJCQkgIGlmIChGbG9hdC5pc05hTih2YWx1ZSkpIHsKLQkJCQkJICByZXR1cm4gbmV3IFhTRG91YmxlKERvdWJsZS5OYU4pOwotCQkJCSAgfSBlbHNlIGlmICh2YWx1ZSA9PSBGbG9hdC5ORUdBVElWRV9JTkZJTklUWSkgewotCQkJCQkgIHJldHVybiBuZXcgWFNEb3VibGUoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKTsKLQkJCQkgIH0gZWxzZSBpZiAodmFsdWUgPT0gRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFkpIHsKLQkJCQkJICByZXR1cm4gbmV3IFhTRG91YmxlKERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSk7Ci0JCQkJICB9IGVsc2UgewotCQkJCQkgIHJldHVybiBuZXcgWFNEb3VibGUoKGRvdWJsZSl2YWx1ZSk7IAotCQkJCSAgfQotCQkJICB9IGVsc2UgewotCQkJCSBYU0RvdWJsZSBkID0gWFNEb3VibGUucGFyc2VfZG91YmxlKGF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQkgcmV0dXJuIGQgIT0gbnVsbCA/IGQgOiBuZXcgWFNEb3VibGUoRG91YmxlLk5hTik7Ci0JCQkgIH0KLQkJCX0KLQkJCWVsc2UgaWYgKGF0IGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCQlYU0RvdWJsZSBkID0gWFNEb3VibGUucGFyc2VfZG91YmxlKChGbkRhdGEuYXRvbWl6ZShhdCkpLnN0cmluZ192YWx1ZSgpKTsKLQkJCQlyZXR1cm4gZCAhPSBudWxsID8gZCA6IG5ldyBYU0RvdWJsZShEb3VibGUuTmFOKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJldHVybiBuZXcgWFNEb3VibGUoRG91YmxlLk5hTik7Ci0JCX0KLQkJCi0JCS8vIHVucmVhY2gKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuT25lT3JNb3JlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuT25lT3JNb3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMDNiZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk9uZU9yTW9yZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zICRhcmcgaWYgaXQgY29udGFpbnMgb25lIG9yIG1vcmUgaXRlbXMuIE90aGVyd2lzZSwgcmFpc2VzIGFuIGVycm9yCi0gKiBbZXJyOkZPUkcwMDA0XS4gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mICRhcmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk9uZU9yTW9yZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5PbmVPck1vcmUuCi0JICovCi0JcHVibGljIEZuT25lT3JNb3JlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm9uZS1vci1tb3JlIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBvbmVfb3JfbW9yZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPbmUtb3ItTW9yZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpvbmUtb3ItbW9yZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBvbmVfb3JfbW9yZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmVtcHR5X3NlcShudWxsKTsKLQotCQlyZXR1cm4gYXJnOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Qb3NpdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblBvc2l0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YjdjYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblBvc2l0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgaW5kaWNhdGluZyB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbnRleHQgaXRlbSB3aXRoaW4gdGhlCi0gKiBzZXF1ZW5jZSBvZiBpdGVtcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiBJZiB0aGUgY29udGV4dCBpdGVtIGlzCi0gKiB1bmRlZmluZWQsIGFuIGVycm9yIGlzIHJhaXNlZCBbZXJyOkZPTkMwMDAxXS4KLSAqLwotcHVibGljIGNsYXNzIEZuUG9zaXRpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuUG9zaXRpb24uCi0JICovCi0JcHVibGljIEZuUG9zaXRpb24oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicG9zaXRpb24iKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHBvc2l0aW9uKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBQb3NpdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnBvc2l0aW9uIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHBvc2l0aW9uKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDA7Ci0KLQkJaWYgKGRjLmZvY3VzKCkuY29udGV4dF9pdGVtKCkgPT0gbnVsbCkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJfQotCQkKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGRjCi0JCQkJLmNvbnRleHRfcG9zaXRpb24oKSkpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUHJlZml4RnJvbVFOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUHJlZml4RnJvbVFOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZDkzODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblByZWZpeEZyb21RTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpOQ05hbWUgcmVwcmVzZW50aW5nIHRoZSBwcmVmaXggZm9yICRhcmcuIElmICRhcmcgaXMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZSwgb3IgJGFyZyBoYXMgbm8gcHJlZml4LCBhbiBlbXB0eSBzZXF1ZW5jZSBpcyByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuUHJlZml4RnJvbVFOYW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuUHJlZml4RnJvbVFOYW1lCi0JICovCi0JcHVibGljIEZuUHJlZml4RnJvbVFOYW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInByZWZpeC1mcm9tLVFOYW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBwcmVmaXgoYXJncywgX2ZsLmR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmVmaXgtZnJvbS1RTmFtZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpwcmVmaXgtZnJvbS1RTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBwcmVmaXgoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmcKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJICByZXR1cm4gcnM7Ci0KLQkJUU5hbWUgcW5hbWUgPSAoUU5hbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlTdHJpbmcgcHJlZml4ID0gcW5hbWUucHJlZml4KCk7Ci0JCQotCi0JCWlmIChwcmVmaXggIT0gbnVsbCkgewotCQkJaWYgKGRjLnByZWZpeF9leGlzdHMocHJlZml4KSkgewotCQkJCSAgcnMuYWRkKG5ldyBYU05DTmFtZShwcmVmaXgpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRQcmVmaXgoKTsKLQkJCX0KLQkJfSAKLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFFOYW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5RTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblFOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMDgyN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblFOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6UU5hbWUgd2l0aCB0aGUgbmFtZXNwYWNlIFVSSSBnaXZlbiBpbiAkcGFyYW1VUkkuIElmICRwYXJhbVVSSQotICogaXMgdGhlIGVtcHR5IHN0cmluZyBvciB0aGUgZW1wdHkgc2VxdWVuY2UsIGl0IHJlcHJlc2VudHMgIm5vIG5hbWVzcGFjZSIuIFRoZQotICogcHJlZml4IChvciBhYnNlbmNlIG9mIGEgcHJlZml4KSBpbiAkcGFyYW1RTmFtZSBpcyByZXRhaW5lZCBpbiB0aGUgcmV0dXJuZWQKLSAqIHhzOlFOYW1lIHZhbHVlLiBUaGUgbG9jYWwgbmFtZSBpbiB0aGUgcmVzdWx0IGlzIHRha2VuIGZyb20gdGhlIGxvY2FsIHBhcnQgb2YKLSAqICRwYXJhbVFOYW1lLgotICovCi1wdWJsaWMgY2xhc3MgRm5RTmFtZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblFOYW1lLgotCSAqLwotCXB1YmxpYyBGblFOYW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIlFOYW1lIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZXNvbHZlX1FOYW1lKGFyZ3MsIHN0YXRpY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIFJlc29sdmUgdGhlIFFOYW1lIG9mIHRoZSBnaXZlbiBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRlaCBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIHN0YXRpYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIGZuOlFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHJlc29sdmVfUU5hbWUoQ29sbGVjdGlvbiBhcmdzLCBTdGF0aWNDb250ZXh0IHNjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQlTdHJpbmcgbnMgPSBudWxsOwotCQlpZiAoIWFyZzEuZW1wdHkoKSkKLQkJCW5zID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIG5hbWUgPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJUU5hbWUgcW4gPSBRTmFtZS5wYXJzZV9RTmFtZShuYW1lKTsKLQkJaWYgKHFuID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IubGV4aWNhbF9lcnJvcihudWxsKTsKLQkJcW4uc2V0X25hbWVzcGFjZShucyk7Ci0KLQkJcnMuYWRkKHFuKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVtb3ZlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVtb3ZlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMGIxYzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlbW92ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhIG5ldyBzZXF1ZW5jZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSB2YWx1ZSBvZiAkdGFyZ2V0IHdpdGggdGhlIGl0ZW0gYXQKLSAqIHRoZSBwb3NpdGlvbiBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlIG9mICRwb3NpdGlvbiByZW1vdmVkLiBJZiAkcG9zaXRpb24gaXMKLSAqIGxlc3MgdGhhbiAxIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluICR0YXJnZXQsICR0YXJnZXQgaXMKLSAqIHJldHVybmVkLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24gY29uc2lzdHMgb2YgYWxsIGl0ZW1zCi0gKiBvZiAkdGFyZ2V0IHdob3NlIGluZGV4IGlzIGxlc3MgdGhhbiAkcG9zaXRpb24sIGZvbGxvd2VkIGJ5IGFsbCBpdGVtcyBvZgotICogJHRhcmdldCB3aG9zZSBpbmRleCBpcyBncmVhdGVyIHRoYW4gJHBvc2l0aW9uLiBJZiAkdGFyZ2V0IGlzIHRoZSBlbXB0eQotICogc2VxdWVuY2UsIHRoZSBlbXB0eSBzZXF1ZW5jZSBpcyByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuUmVtb3ZlIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblJlbW92ZS4KLQkgKi8KLQlwdWJsaWMgRm5SZW1vdmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicmVtb3ZlIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZW1vdmUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogUmVtb3ZlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnJlbW92ZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSByZW1vdmUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMjsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHRhcmdldCA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJLy8gc2FuaXR5IGNoZXgKLQkJaWYgKGFyZzIuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBhcmcyLmZpcnN0KCk7Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNJbnRlZ2VyKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJaW50IHBvc2l0aW9uID0gKChYU0ludGVnZXIpIGF0KS5pbnRfdmFsdWUoKS5pbnRWYWx1ZSgpOwotCi0JCWlmIChwb3NpdGlvbiA8IDEpCi0JCQlyZXR1cm4gdGFyZ2V0OwotCi0JCWlmIChwb3NpdGlvbiA+IHRhcmdldC5zaXplKCkpCi0JCQlyZXR1cm4gdGFyZ2V0OwotCi0JCWlmICh0YXJnZXQuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQlpbnQgY3VycG9zID0gMTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSB0YXJnZXQuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlhdCA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJaWYgKGN1cnBvcyAhPSBwb3NpdGlvbikKLQkJCQlycy5hZGQoYXQpOwotCi0JCQljdXJwb3MrKzsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVwbGFjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlcGxhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlMzQ1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVwbGFjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gYWRkZWQgZXhjZXB0aW9uIGhhbmRsaW5nIHRvIHRvc3MgY29ycmVjdCBlcnJvciBudW1iZXJzLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC4qOwotCi0vKioKLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB4czpzdHJpbmcgdGhhdCBpcyBvYnRhaW5lZCBieSByZXBsYWNpbmcgZWFjaAotICogbm9uLW92ZXJsYXBwaW5nIHN1YnN0cmluZyBvZiAkaW5wdXQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiAkcGF0dGVybiB3aXRoIGFuCi0gKiBvY2N1cnJlbmNlIG9mIHRoZSAkcmVwbGFjZW1lbnQgc3RyaW5nLgotICovCi1wdWJsaWMgY2xhc3MgRm5SZXBsYWNlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFJuUmVwbGFjZS4KLQkgKi8KLQlwdWJsaWMgRm5SZXBsYWNlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInJlcGxhY2UiKSwgMywgNCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHJlcGxhY2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogUmVwbGFjZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpyZXBsYWNlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHJlcGxhY2UoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpCi0JCQlzdHIxID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmczID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnNCA9IG51bGw7Ci0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJYXJnNCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCQlTdHJpbmcgZmxhZ3MgPSBhcmc0LmZpcnN0KCkuc3RyaW5nX3ZhbHVlKCk7Ci0JCQkKLQkJCWlmIChmbGFncy5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJYXJnNCA9IG51bGw7Ci0JCQl9IGVsc2UgaWYgKGlzRmxhZ1ZhbGlkKGZsYWdzKSA9PSBmYWxzZSkgewotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDAxIiwgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uLiBmbGFncyIpOwotCQkJfQotCQl9Ci0JCVN0cmluZyBwYXR0ZXJuID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCQlTdHJpbmcgcmVwbGFjZW1lbnQgPSAoKFhTU3RyaW5nKSBhcmczLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCQotCQl0cnkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZyhzdHIxLnJlcGxhY2VBbGwocGF0dGVybiwgcmVwbGFjZW1lbnQpKSk7Ci0JCQlyZXR1cm4gcnM7IAotCQl9IGNhdGNoIChQYXR0ZXJuU3ludGF4RXhjZXB0aW9uIGVycikgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X2Vycm9yKG51bGwpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDA0IiwgImludmFsaWQgcmVnZXguIik7Ci0JCX0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZXgpIHsKLQkJCVN0cmluZyBjbGFzc05hbWUgPSBleC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJCWlmIChjbGFzc05hbWUuZW5kc1dpdGgoIlN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iKSkgewotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDA0IiwgInJlc3VsdCBvdXQgb2YgYm91bmRzIik7Ci0JCQl9Ci0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKCJGT1JYMDAwMyIsICJpbnZhbGlkIHJlZ2V4LiIpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDA0IiwgImludmFsaWQgcmVnZXguIik7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0ZsYWdWYWxpZChTdHJpbmcgZmxhZykgewotCQljaGFyIGZsYWdzW10gPSB7J3MnLCAnbScsICdpJywgJ3gnfTsKLQkJCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZmxhZ3MubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChmbGFnLmluZGV4T2YoZmxhZ3NbaV0pICE9IC0xKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JCi0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVzb2x2ZVFOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVzb2x2ZVFOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNDE2MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlc29sdmVRTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4ODg4NiAtIGFkZCB1bml0IHRlc3RzIGFuZCBmaXggZm46cmVzb2x2ZS1xbmFtZSBmdW5jdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpRTmFtZSB2YWx1ZSAodGhhdCBpcywgYW4gZXhwYW5kZWQtUU5hbWUpIGJ5IHRha2luZyBhbiB4czpzdHJpbmcKLSAqIHRoYXQgaGFzIHRoZSBsZXhpY2FsIGZvcm0gb2YgYW4geHM6UU5hbWUgKGEgc3RyaW5nIGluIHRoZSBmb3JtCi0gKiAicHJlZml4OmxvY2FsLW5hbWUiIG9yICJsb2NhbC1uYW1lIikgYW5kIHJlc29sdmluZyBpdCB1c2luZyB0aGUgaW4tc2NvcGUKLSAqIG5hbWVzcGFjZXMgZm9yIGEgZ2l2ZW4gZWxlbWVudC4KLSAqLwotcHVibGljIGNsYXNzIEZuUmVzb2x2ZVFOYW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuUmVzb2x2ZVFOYW1lLgotCSAqLwotCXB1YmxpYyBGblJlc29sdmVRTmFtZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJyZXNvbHZlLVFOYW1lIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZXNvbHZlX1FOYW1lKGFyZ3MsIHN0YXRpY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIFJlc29sdmUtUU5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gc2MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBzdGF0aWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnJlc29sdmUtUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgcmVzb2x2ZV9RTmFtZShDb2xsZWN0aW9uIGFyZ3MsIFN0YXRpY0NvbnRleHQgc2MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvL0NvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCQlDb2xsZWN0aW9uIGNhcmdzID0gYXJnczsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0JCQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQlTdHJpbmcgbmFtZSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlRTmFtZSBxbiA9IFFOYW1lLnBhcnNlX1FOYW1lKG5hbWUpOwotCi0JCWlmIChxbiA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmxleGljYWxfZXJyb3IobnVsbCk7Ci0KLQkJRWxlbWVudFR5cGUgeHNlbGVtZW50ID0gKEVsZW1lbnRUeXBlKSBhcmcyLmZpcnN0KCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSB4c2VsZW1lbnQubm9kZV92YWx1ZSgpOwotCi0JCWlmIChxbi5wcmVmaXgoKSAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgbmFtZXNwYWNlVVJJID0gZWxlbWVudC5sb29rdXBOYW1lc3BhY2VVUkkocW4ucHJlZml4KCkpOwotCQkJCi0JCQlpZiAobmFtZXNwYWNlVVJJID09IG51bGwpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFByZWZpeCgpOwotCQkJfQotCQkJcW4uc2V0X25hbWVzcGFjZShuYW1lc3BhY2VVUkkpOwotCQl9IGVsc2UgewotCQkJaWYgKHFuLmxvY2FsKCkuZXF1YWxzKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpICYmIGVsZW1lbnQuaXNEZWZhdWx0TmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKSB7Ci0JCQkJcW4uc2V0X25hbWVzcGFjZShlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKTsKLQkJCX0KLQkJfQotCQkKLQotCQlycy5hZGQocW4pOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IEVsZW1lbnRUeXBlKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVzb2x2ZVVSSS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlc29sdmVVUkkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E0ZWY2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVzb2x2ZVVSSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGVuYWJsZSBhIHJlbGF0aXZlIFVSSSB0byBiZSByZXNvbHZlZAotICogYWdhaW5zdCBhbiBhYnNvbHV0ZSBVUkkuIFRoZSBmaXJzdCBmb3JtIG9mIHRoaXMgZnVuY3Rpb24gcmVzb2x2ZXMgJHJlbGF0aXZlCi0gKiBhZ2FpbnN0IHRoZSB2YWx1ZSBvZiB0aGUgYmFzZS11cmkgcHJvcGVydHkgZnJvbSB0aGUgc3RhdGljIGNvbnRleHQuIElmIHRoZQotICogYmFzZS11cmkgcHJvcGVydHkgaXMgbm90IGluaXRpYWxpemVkIGluIHRoZSBzdGF0aWMgY29udGV4dCBhbiBlcnJvciBpcyByYWlzZWQKLSAqIFtlcnI6Rk9OUzAwMDVdLgotICogCi0gKiBJZiAkcmVsYXRpdmUgaXMgYSByZWxhdGl2ZSBVUkkgcmVmZXJlbmNlLCBpdCBpcyByZXNvbHZlZCBhZ2FpbnN0ICRiYXNlLCBvcgotICogdGhlIGJhc2UtdXJpIHByb3BlcnR5IGZyb20gdGhlIHN0YXRpYyBjb250ZXh0LCB1c2luZyBhbiBhbGdvcml0aG0gc3VjaCBhcyB0aGUKLSAqIG9uZXMgZGVzY3JpYmVkIGluIFtSRkMgMjM5Nl0gb3IgW1JGQyAzOTg2XSwgYW5kIHRoZSByZXN1bHRpbmcgYWJzb2x1dGUgVVJJCi0gKiByZWZlcmVuY2UgaXMgcmV0dXJuZWQuIEFuIGVycm9yIG1heSBiZSByYWlzZWQgW2VycjpGT1JHMDAwOV0gaW4gdGhlCi0gKiByZXNvbHV0aW9uIHByb2Nlc3MuIElmICRyZWxhdGl2ZSBpcyBhbiBhYnNvbHV0ZSBVUkkgcmVmZXJlbmNlLCBpdCBpcyByZXR1cm5lZAotICogdW5jaGFuZ2VkLiBJZiAkcmVsYXRpdmUgb3IgJGJhc2UgaXMgbm90IGEgdmFsaWQgeHM6YW55VVJJIGFuIGVycm9yIGlzIHJhaXNlZAotICogW2VycjpGT1JHMDAwMl0uIElmICRyZWxhdGl2ZSBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSBlbXB0eSBzZXF1ZW5jZSBpcwotICogcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblJlc29sdmVVUkkgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5CYXNlVXJpLgotCSAqLwotCXB1YmxpYyBGblJlc29sdmVVUkkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicmVzb2x2ZS11cmkiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHJlc29sdmVVUkkoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIFJlc29sdmUtVVJJIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRfY29udGV4dAotCSAqICAgICAgICAgICAgRHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnJlc29sdmUtdXJpIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHJlc29sdmVVUkkoQ29sbGVjdGlvbiBhcmdzLAotCQkJRHluYW1pY0NvbnRleHQgZF9jb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGRfY29udGV4dC5iYXNlX3VyaSgpID09IG51bGwpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5ub0Jhc2VVUkkoKTsKLQkJfQotCQkKLQkJQ29sbGVjdGlvbiBjYXJncyA9IGFyZ3M7Ci0JCUl0ZXJhdG9yIGFyZ2l0ID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgcmVsYXRpdmVSUyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXQubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBiYXNlVXJpUlMgPSBudWxsOwotCQlpZiAoYXJnaXQuaGFzTmV4dCgpKSB7Ci0JCQliYXNlVXJpUlMgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0Lm5leHQoKTsKLQkJfQotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCi0JCWlmIChyZWxhdGl2ZVJTLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCUFueVR5cGUgcmVsYXRpdmVVUkkgPSByZWxhdGl2ZVJTLmZpcnN0KCk7Ci0JCVN0cmluZyByZXNvbHZlZFVSSSA9IG51bGw7Ci0JCQkJCi0JCWlmIChiYXNlVXJpUlMgPT0gbnVsbCkgewotCQkJcmVzb2x2ZWRVUkkgPSByZXNvbHZlVVJJKGRfY29udGV4dC5iYXNlX3VyaSgpLnN0cmluZ192YWx1ZSgpLCByZWxhdGl2ZVVSSS5zdHJpbmdfdmFsdWUoKSk7Ci0JCX0gZWxzZSB7Ci0JCQlBbnlUeXBlIGJhc2VVUkkgPSBiYXNlVXJpUlMuZmlyc3QoKTsKLQkJCXJlc29sdmVkVVJJID0gcmVzb2x2ZVVSSShiYXNlVVJJLnN0cmluZ192YWx1ZSgpLCByZWxhdGl2ZVVSSS5zdHJpbmdfdmFsdWUoKSk7Ci0JCX0KLQotCQlycy5hZGQobmV3IFhTQW55VVJJKHJlc29sdmVkVVJJKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyByZXNvbHZlVVJJKFN0cmluZyBiYXNlLCBTdHJpbmcgcmVsYXRpdmUpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlTdHJpbmcgcmVzb2x2ZWQgPSBudWxsOwotCQl0cnkgewotCQkJVVJJIGJhc2VVUkkgPSBuZXcgVVJJKGJhc2UpOwotCQkJcmVzb2x2ZWQgPSBiYXNlVVJJLnJlc29sdmUocmVsYXRpdmUpLnRvU3RyaW5nKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmVycm9yUmVzb2x2aW5nVVJJKCk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkOwotCX0KLQkKLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19RTUFSSykpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmV2ZXJzZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJldmVyc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3MDE5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmV2ZXJzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIDxwPgotICogU2VxdWVuY2UgcmV2ZXJzZSBmdW5jdGlvbi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46cmV2ZXJzZSgkYXJnIGFzIGl0ZW0oKSopIGFzIGl0ZW0oKSoKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIHJldmVyc2VzIHRoZSBvcmRlciBvZiBpdGVtcyBpbiBhIHNlcXVlbmNlLiBJZiAkYXJnIGlzIHRoZSBlbXB0eQotICogc2VxdWVuY2UsIHRoZSBlbXB0eSBzZXF1ZW5jZSBpcyByZXR1cm5lZC4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuUmV2ZXJzZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblJldmVyc2UuCi0JICovCi0JcHVibGljIEZuUmV2ZXJzZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJyZXZlcnNlIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIHJldmVyc2FsIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZXZlcnNlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFJldmVyc2UgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIHJldmVyc2VkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgdGhlIHJldmVyc2FsIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSByZXZlcnNlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGNpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gWFhYIGxhbWUKLQkJTGlzdEl0ZXJhdG9yIGkgPSBhcmcuaXRlcmF0b3IoKTsKLQotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCQlpLm5leHQoKTsKLQotCQl3aGlsZSAoaS5oYXNQcmV2aW91cygpKQotCQkJcnMuYWRkKChBbnlUeXBlKSBpLnByZXZpb3VzKCkpOwotCi0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm9vdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvb3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg0ZmJiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm9vdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjYyNzY1IC0gY2xlYW4gdXAgZm46cm9vdCBhY2NvcmRpbmcgdG8gc3BlYy4gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODExNTkgLSB0YWsgZXh0cmEgY2FyZSB0byBmaW5kIHRoZSByb290IAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgb3JnLnczYy5kb20uKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSByb290IG9mIHRoZSB0cmVlIHRvIHdoaWNoICRhcmcgYmVsb25ncy4gVGhpcyB3aWxsIHVzdWFsbHksIGJ1dAotICogbm90IG5lY2Vzc2FyaWx5LCBiZSBhIGRvY3VtZW50IG5vZGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblJvb3QgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Sb290LgotCSAqLwotCXB1YmxpYyBGblJvb3QoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicm9vdCIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQkvL1Jlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBmbl9yb290KGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSb290IG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpyb290IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZuX3Jvb3QoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCQkKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIHNhbml0eSBjaGVjayBhcmcKLS8vCQlpZiAoY2FyZ3MuaXNFbXB0eSgpKQotLy8JCQlyZXR1cm4gcnM7Ci0KLQkJaWYgKGNhcmdzLnNpemUoKSA+IDEpCi0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gbnVsbDsKLQkJaWYgKGNhcmdzLmlzRW1wdHkoKSkgewotCQkJYXJnID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCWlmIChkYy5jb250ZXh0X2l0ZW0oKSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCX0KLQkJCWFyZy5hZGQoZGMuY29udGV4dF9pdGVtKCkpOwotCQl9IGVsc2UgewotCQkJYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsJCQkKLQkJfQotCQkKLQkJaWYgKGFyZy5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJCi0JCUFueVR5cGUgYWEgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoIShhYSBpbnN0YW5jZW9mIE5vZGVUeXBlKSkKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGFhOwotCi0JCS8vIG9rIHdlIGdvdCBhIHNhbmUgYXJndW1lbnQuLi4gb3duIGl0LgotCi0JCU5vZGUgcm9vdCA9IG50Lm5vZGVfdmFsdWUoKTsKLQotCQl3aGlsZSAocm9vdCAhPSBudWxsICYmICEgKHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCkpIHsKLQkJCU5vZGUgbmV3cm9vdCA9IHJvb3QuZ2V0UGFyZW50Tm9kZSgpOwotCQkJaWYgKG5ld3Jvb3QgPT0gbnVsbCAmJiByb290IGluc3RhbmNlb2YgQXR0cikgewotCQkJCW5ld3Jvb3QgPSAoKEF0dHIpcm9vdCkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQl9Ci0JCQkJCi0JCQkvLyBmb3VuZCBpdAotCQkJaWYgKG5ld3Jvb3QgPT0gbnVsbCkKLQkJCQlicmVhazsKLQotCQkJcm9vdCA9IG5ld3Jvb3Q7Ci0JCX0KLQotCQlycy5hZGQoTm9kZVR5cGUuZG9tX3RvX3hwYXRoKHJvb3QpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm91bmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Sb3VuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDUwNWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Sb3VuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbnVtYmVyIHdpdGggbm8gZnJhY3Rpb25hbCBwYXJ0IHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgYXJndW1lbnQuCi0gKiBJZiB0aGVyZSBhcmUgdHdvIHN1Y2ggbnVtYmVycywgdGhlbiB0aGUgb25lIHRoYXQgaXMgY2xvc2VzdCB0byBwb3NpdGl2ZQotICogaW5maW5pdHkgaXMgcmV0dXJuZWQuIE1vcmUgZm9ybWFsbHksIGZuOnJvdW5kKHgpIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdCBhcwotICogZm46Zmxvb3IoeCswLjUpLiBJZiB0eXBlIG9mICRhcmcgaXMgb25lIG9mIHRoZSBmb3VyIG51bWVyaWMgdHlwZXMgeHM6ZmxvYXQsCi0gKiB4czpkb3VibGUsIHhzOmRlY2ltYWwgb3IgeHM6aW50ZWdlciB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIGlzIHRoZSBzYW1lIGFzIHRoZQotICogdHlwZSBvZiAkYXJnLiBJZiB0aGUgdHlwZSBvZiAkYXJnIGlzIGEgdHlwZSBkZXJpdmVkIGZyb20gb25lIG9mIHRoZSBudW1lcmljCi0gKiB0eXBlcywgdGhlIHR5cGUgb2YgdGhlIHJldHVybiBpcyB0aGUgYmFzZSBudW1lcmljIHR5cGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblJvdW5kIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblJvdW5kLgotCSAqLwotCXB1YmxpYyBGblJvdW5kKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInJvdW5kIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIDEgYXJndW1lbnQgb25seSEKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBmbl9yb3VuZChhcmd1bWVudCk7Ci0JfQotCi0JLyoqCi0JICogUm91bmQgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpyb3VuZCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9yb3VuZChSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIHNhbml0eSBjaGV4Ci0JCU51bWVyaWNUeXBlIG50ID0gRm5BYnMuZ2V0X3NpbmdsZV9udW1lcmljX2FyZyhhcmcpOwotCi0JCS8vIGVtcHR5IGFyZwotCQlpZiAobnQgPT0gbnVsbCkKLQkJCXJldHVybiByczsKLQotCQlycy5hZGQobnQucm91bmQoKSk7Ci0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm91bmRIYWxmVG9FdmVuLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm91bmRIYWxmVG9FdmVuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZTA2OGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvdW5kSGFsZlRvRXZlbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgbmVhcmVzdCAodGhhdCBpcywgbnVtZXJpY2FsbHkgY2xvc2VzdCkgbnVtZXJpYyB0bwotICogJGFyZyB0aGF0IGlzIGEgbXVsdGlwbGUgb2YgdGVuIHRvIHRoZSBwb3dlciBvZiBtaW51cyAkcHJlY2lzaW9uLiBJZiB0d28gc3VjaAotICogdmFsdWVzIGFyZSBlcXVhbGx5IG5lYXIgKGUuZy4gaWYgdGhlIGZyYWN0aW9uYWwgcGFydCBpbiAkYXJnIGlzIGV4YWN0bHkKLSAqIC41MDAuLi4pLCByZXR1cm5zIHRoZSBvbmUgd2hvc2UgbGVhc3Qgc2lnbmlmaWNhbnQgZGlnaXQgaXMgZXZlbi4gSWYgdHlwZSBvZgotICogJGFyZyBpcyBvbmUgb2YgdGhlIGZvdXIgbnVtZXJpYyB0eXBlcyB4czpmbG9hdCwgeHM6ZG91YmxlLCB4czpkZWNpbWFsIG9yCi0gKiB4czppbnRlZ2VyIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gaXMgdGhlIHNhbWUgYXMgdGhlIHR5cGUgb2YgJGFyZy4gSWYgdGhlCi0gKiB0eXBlIG9mICRhcmcgaXMgYSB0eXBlIGRlcml2ZWQgZnJvbSBvbmUgb2YgdGhlIG51bWVyaWMgdHlwZXMsIHRoZSB0eXBlIG9mIHRoZQotICogcmV0dXJuIGlzIHRoZSBiYXNlIG51bWVyaWMgdHlwZS4KLSAqLwotcHVibGljIGNsYXNzIEZuUm91bmRIYWxmVG9FdmVuIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblJvdW5kSGFsZlRvRXZlbi4KLQkgKi8KLQlwdWJsaWMgRm5Sb3VuZEhhbGZUb0V2ZW4oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicm91bmQtaGFsZi10by1ldmVuIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQlpZiAoYXJncy5zaXplKCkgPT0gMikgewotCQkJcmV0dXJuIGZuX3JvdW5kX2hhbGZfdG9fZXZlbihhcmdzKTsKLQkJfQotCQkKLQkJcmV0dXJuIGZuX3JvdW5kX2hhbGZfdG9fZXZlbihhcmd1bWVudCk7Ci0JfQotCi0JLyoqCi0JICogUm91bmQtSGFsZi10by1FdmVuIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cm91bmQtaGFsZi10by1ldmVuIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZuX3JvdW5kX2hhbGZfdG9fZXZlbihSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCU51bWVyaWNUeXBlIG50ID0gRm5BYnMuZ2V0X3NpbmdsZV9udW1lcmljX2FyZyhhcmcpOwotCi0JCS8vIGVtcHR5IGFyZwotCQlpZiAobnQgPT0gbnVsbCkKLQkJCXJldHVybiByczsKLQkJCi0JCXJzLmFkZChudC5yb3VuZF9oYWxmX3RvX2V2ZW4oKSk7Ci0JCXJldHVybiByczsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9yb3VuZF9oYWxmX3RvX2V2ZW4oQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJCi0JCWlmIChhcmdzLnNpemUoKSA+IDIgfHwgYXJncy5zaXplKCkgPD0gMSkgewotCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJfQotCQkKLQkJSXRlcmF0b3IgYXJnSXQgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzQXJnMSA9ICAoUmVzdWx0U2VxdWVuY2UpIGFyZ0l0Lm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgcnNQcmVjaXNpb24gPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ0l0Lm5leHQoKTsKLQkJCi0JCU51bWVyaWNUeXBlIG50ID0gKE51bWVyaWNUeXBlKSByc0FyZzEuZmlyc3QoKTsKLQkJTnVtZXJpY1R5cGUgbnRQcmVjaXNpb24gPSAoTnVtZXJpY1R5cGUpIHJzUHJlY2lzaW9uLmZpcnN0KCk7Ci0JCQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQotCQlycy5hZGQobnQucm91bmRfaGFsZl90b19ldmVuKEludGVnZXIucGFyc2VJbnQobnRQcmVjaXNpb24uc3RyaW5nX3ZhbHVlKCkpKSk7Ci0JCXJldHVybiByczsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TZWNvbmRzRnJvbURhdGVUaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU2Vjb25kc0Zyb21EYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYThjMWIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TZWNvbmRzRnJvbURhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI3Nzc3NCAtIFhTREVjaW1hbCByZXR1cm5pbmcgd3JvbmcgdmFsdWVzLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmRlY2ltYWwgdmFsdWUgYmV0d2VlbiAwIGFuZCA2MC45OTkuLi4sIGJvdGggaW5jbHVzaXZlCi0gKiByZXByZXNlbnRpbmcgdGhlIHNlY29uZHMgYW5kIGZyYWN0aW9uYWwgc2Vjb25kcyBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mCi0gKiAkYXJnLiBOb3RlIHRoYXQgdGhlIHZhbHVlIGNhbiBiZSBncmVhdGVyIHRoYW4gNjAgc2Vjb25kcyB0byBhY2NvbW1vZGF0ZQotICogb2NjYXNpb25hbCBsZWFwIHNlY29uZHMgdXNlZCB0byBrZWVwIGh1bWFuIHRpbWUgc3luY2hyb25pemVkIHdpdGggdGhlCi0gKiByb3RhdGlvbiBvZiB0aGUgcGxhbmV0LiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5TZWNvbmRzRnJvbURhdGVUaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU2Vjb25kc0Zyb21EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5TZWNvbmRzRnJvbURhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInNlY29uZHMtZnJvbS1kYXRlVGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc2Vjb25kc19mcm9tX2RhdGVfdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBTZWNvbmRzLWZyb20tZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c2Vjb25kcy1mcm9tLWRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHNlY29uZHNfZnJvbV9kYXRlX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlkb3VibGUgcmVzID0gZHQuc2Vjb25kKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0RlY2ltYWwoQmlnRGVjaW1hbC52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TZWNvbmRzRnJvbUR1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU2Vjb25kc0Zyb21EdXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzI3Njc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TZWNvbmRzRnJvbUR1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI3Nzc3NCAtIFhTRGVjaW1hbCByZXR1cm5pbmcgd3JvbmcgdmFsdWVzLgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgeHM6ZHVyYXRpb24gZXhwZWN0ZWQgYXJndW1lbnQuIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6ZGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIHNlY29uZHMgY29tcG9uZW50IGluIHRoZSBjYW5vbmljYWwKLSAqIGxleGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mICRhcmcuIFRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLiBJZgotICogJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5TZWNvbmRzRnJvbUR1cmF0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU2Vjb25kc0Zyb21EdXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgRm5TZWNvbmRzRnJvbUR1cmF0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInNlY29uZHMtZnJvbS1kdXJhdGlvbiIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc2Vjb25kc19mcm9tX2R1cmF0aW9uKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFNlY29uZHMtZnJvbS1EdXJhdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpzZWNvbmRzLWZyb20tZHVyYXRpb24gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc2Vjb25kc19mcm9tX2R1cmF0aW9uKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEdXJhdGlvbiBkdGQgPSAoWFNEdXJhdGlvbikgYXJnMS5maXJzdCgpOwotCi0JCWRvdWJsZSByZXMgPSBkdGQuc2Vjb25kcygpOwotCi0JCWlmIChkdGQubmVnYXRpdmUoKSkKLQkJCXJlcyAqPSAtMTsKLQotCQlycy5hZGQobmV3IFhTRGVjaW1hbChCaWdEZWNpbWFsLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRHVyYXRpb24oKSwKLQkJCQkJU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU2Vjb25kc0Zyb21UaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU2Vjb25kc0Zyb21UaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNWRiM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI3Nzc3NCAtIFhTRGVjaW1hbCByZXR1cmluZyB3cm9uZyB2YWx1ZXMuIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6ZGVjaW1hbCB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDYwLjk5OS4uLiwgYm90aCBpbmNsdXNpdmUsCi0gKiByZXByZXNlbnRpbmcgdGhlIHNlY29uZHMgYW5kIGZyYWN0aW9uYWwgc2Vjb25kcyBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mCi0gKiAkYXJnLiBOb3RlIHRoYXQgdGhlIHZhbHVlIGNhbiBiZSBncmVhdGVyIHRoYW4gNjAgc2Vjb25kcyB0byBhY2NvbW1vZGF0ZQotICogb2NjYXNpb25hbCBsZWFwIHNlY29uZHMgdXNlZCB0byBrZWVwIGh1bWFuIHRpbWUgc3luY2hyb25pemVkIHdpdGggdGhlCi0gKiByb3RhdGlvbiBvZiB0aGUgcGxhbmV0LiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5TZWNvbmRzRnJvbVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TZWNvbmRzRnJvbVRpbWUuCi0JICovCi0JcHVibGljIEZuU2Vjb25kc0Zyb21UaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInNlY29uZHMtZnJvbS10aW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBzZWNvbmRzX2Zyb21fdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBCYXNlLVVyaSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpiYXNlLXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzZWNvbmRzX2Zyb21fdGltZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTVGltZSBkdCA9IChYU1RpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlkb3VibGUgcmVzID0gZHQuc2Vjb25kKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0RlY2ltYWwoQmlnRGVjaW1hbC52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1RpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RhcnRzV2l0aC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0YXJ0c1dpdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk0MjY4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RhcnRzV2l0aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWUgb2YgJGFyZzEgc3RhcnRzCi0gKiB3aXRoIGEgc2VxdWVuY2Ugb2YgY29sbGF0aW9uIHVuaXRzIHRoYXQgcHJvdmlkZXMgYSBtaW5pbWFsIG1hdGNoIHRvIHRoZQotICogY29sbGF0aW9uIHVuaXRzIG9mICRhcmcyIGFjY29yZGluZyB0byB0aGUgY29sbGF0aW9uIHRoYXQgaXMgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIEZuU3RhcnRzV2l0aCBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN0YXJ0c1dpdGguCi0JICovCi0JcHVibGljIEZuU3RhcnRzV2l0aCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdGFydHMtd2l0aCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc3RhcnRzX3dpdGgoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogU3RhcnRzLXdpdGggb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c3RhcnRzLXdpdGggb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3RhcnRzX3dpdGgoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBzdHIxID0gIiI7Ci0JCVN0cmluZyBzdHIyID0gIiI7Ci0JCWlmICghYXJnMS5lbXB0eSgpKQotCQkJc3RyMSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJaWYgKCFhcmcyLmVtcHR5KCkpCi0JCQlzdHIyID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCi0JCWludCBzdHIxbGVuID0gc3RyMS5sZW5ndGgoKTsKLQkJaW50IHN0cjJsZW4gPSBzdHIyLmxlbmd0aCgpOwotCi0JCWlmIChzdHIxbGVuID09IDAgJiYgc3RyMmxlbiAhPSAwKSB7Ci0JCQlycy5hZGQobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCWlmIChzdHIybGVuID09IDApIHsKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKHRydWUpKTsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCWlmIChzdHIxLnN0YXJ0c1dpdGgoc3RyMikpCi0JCQlycy5hZGQobmV3IFhTQm9vbGVhbih0cnVlKSk7Ci0JCWVsc2UKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKGZhbHNlKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0YXRpY0Jhc2VVcmkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdGF0aWNCYXNlVXJpLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MGEzZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0YXRpY0Jhc2VVcmkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgYmFzZS11cmkgcHJvcGVydHkgZnJvbSB0aGUgc3RhdGljIGNvbnRleHQuIElmIHRoZQotICogYmFzZS11cmkgcHJvcGVydHkgaXMgdW5kZWZpbmVkLCB0aGUgZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuIENvbXBvbmVudHMgb2YKLSAqIHRoZSBzdGF0aWMgY29udGV4dCBhcmUgZGlzY3Vzc2VkIGluIFNlY3Rpb24gQy4xIFN0YXRpYyBDb250ZXh0IENvbXBvbmVudHMgaW4KLSAqIHRoZSBzcGVjaWZpY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRm5TdGF0aWNCYXNlVXJpIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN0YXRpY0Jhc2VVcmkuCi0JICovCi0JcHVibGljIEZuU3RhdGljQmFzZVVyaSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdGF0aWMtYmFzZS11cmkiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN0YXRpY19iYXNlX3VyaShhcmdzLCBzdGF0aWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBTdGF0aWMtYmFzZS1Vcmkgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gc2MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBzdGF0aWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnN0YXRpYy1iYXNlLXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzdGF0aWNfYmFzZV91cmkoQ29sbGVjdGlvbiBhcmdzLAotCQkJU3RhdGljQ29udGV4dCBzYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAwOwotCQlhc3NlcnQgc2MgIT0gbnVsbDsKLQotCQkvLyBtYWtlIGEgY29weSBwcm9sbHkKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHNjLmJhc2VfdXJpKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFmNmE5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0NDcxIC0gaW1wcm92ZW1lbnRzIHRvIGZuOnN0cmluZyBmdW5jdGlvbiAoc3VwcG9ydCBmb3IgYXJpdHkgMCkgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyODE5MzggLSBoYW5kbGUgY29udGV4dCBhbmQgZW1wdHkgc2VxdWVuY2VzIGNvcnJlY3RseQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiAkYXJnIHJlcHJlc2VudGVkIGFzIGEgeHM6c3RyaW5nLiBJZiBubyBhcmd1bWVudCBpcwotICogc3VwcGxpZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBjb250ZXh0IGl0ZW0gKC4pLgotICovCi1wdWJsaWMgY2xhc3MgRm5TdHJpbmcgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3RyaW5nLgotCSAqLwotCXB1YmxpYyBGblN0cmluZygpIHsKLQkgIHN1cGVyKG5ldyBRTmFtZSgic3RyaW5nIiksIDAsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBzdHJpbmcoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIFN0cmluZyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpzdHJpbmcgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3RyaW5nKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZF9jb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgKGFyZ3Muc2l6ZSgpID09IDAgfHwgYXJncy5zaXplKCkgPT0gMSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IG51bGw7Ci0JCQkJCi0JCWlmIChhcmdzLmlzRW1wdHkoKSkgewotCQkJLy8gc3VwcG9ydCBmb3IgYXJpdHkgPSAwCi0JCQlyZXR1cm4gZ2V0UmVzdWx0U2V0Rm9yQXJpdHlaZXJvKGRfY29udGV4dCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwkKLQkJfQotCi0JCS8vIHNhbml0eSBjaGVjayBhcmdzCi0JCWlmIChhcmcxLnNpemUoKSA+IDEpCi0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQl9IGVsc2UgewotCQkJQW55VHlwZSBhdCA9IGFyZzEuZmlyc3QoKTsKLQkJCXJzLmFkZChuZXcgWFNTdHJpbmcoYXQuc3RyaW5nX3ZhbHVlKCkpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZ0pvaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdKb2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZDA5M2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZ0pvaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogPHA+Ci0gKiBGdW5jdGlvbiB0byBqb2luIHN0cmluZ3MgdG9nZXRoZXIuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOnN0cmluZy1qb2luKCRhcmcxIGFzIHhzOnN0cmluZyosICRhcmcyIGFzIHhzOnN0cmluZykgYXMgeHM6c3RyaW5nCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyByZXR1cm5zIGEgeHM6c3RyaW5nIGNyZWF0ZWQgYnkgY29uY2F0ZW5hdGluZyB0aGUgbWVtYmVycyBvZiB0aGUKLSAqICRhcmcxIHNlcXVlbmNlIHVzaW5nICRhcmcyIGFzIGEgc2VwYXJhdG9yLiBJZiB0aGUgdmFsdWUgb2YgJGFyZzIgaXMgdGhlCi0gKiB6ZXJvLWxlbmd0aCBzdHJpbmcsIHRoZW4gdGhlIG1lbWJlcnMgb2YgJGFyZzEgYXJlIGNvbmNhdGVuYXRlZCB3aXRob3V0IGEKLSAqIHNlcGFyYXRvci4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiB0aGUgdmFsdWUgb2YgJGFyZzEgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgemVyby1sZW5ndGggc3RyaW5nIGlzCi0gKiByZXR1cm5lZC4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuU3RyaW5nSm9pbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN0cmluZ0pvaW4KLQkgKi8KLQlwdWJsaWMgRm5TdHJpbmdKb2luKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInN0cmluZy1qb2luIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGpvaW5pbmcgb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN0cmluZ19qb2luKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEpvaW4gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGpvaW5lZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBhcmd1bWVudHMgYmVpbmcgam9pbmVkIHRvZ2V0aGVyLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3RyaW5nX2pvaW4oQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCUl0ZXJhdG9yIGFyZ2kgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCVN0cmluZyByZXN1bHQgPSAiIjsKLQkJU3RyaW5nIHNlcGFyYXRvciA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcxLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJWFNTdHJpbmcgaXRlbSA9IChYU1N0cmluZykgaS5uZXh0KCk7Ci0JCQlidWYuYXBwZW5kKGl0ZW0udmFsdWUoKSk7Ci0JCQkKLQkJCWlmIChpLmhhc05leHQoKSkKLQkJCQlidWYuYXBwZW5kKHNlcGFyYXRvcik7Ci0JCX0KLQkJCi0JCXJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotCQlycy5hZGQobmV3IFhTU3RyaW5nKHJlc3VsdCkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1NUQVIpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdMZW5ndGguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdMZW5ndGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YyZDA5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nTGVuZ3RoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDQ3MSAtIGltcHJvdmVtZW50cyB0byBzdHJpbmctbGVuZ3RoIGZ1bmN0aW9uIChzdXBwb3J0IGZvciBhcml0eSAwKQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUgIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjA5NiAtIGltcHJvdmVtZW50cyBmb3Igc3Vycm9nYXRlIGhhbmRsaW5nIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGNsZWFuIHVwIHN0cmluZyBzdG9yYWdlCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgxOTM4IC0gaGFuZGxlIGNvbnRleHQgYW5kIGVtcHR5IHNlcXVlbmNlcyBjb3JyZWN0bHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogPHA+Ci0gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgc3RyaW5nIGxlbmd0aC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46c3RyaW5nLWxlbmd0aCgkYXJnIGFzIHhzOnN0cmluZz8pIGFzIHhzOmludGVnZXIKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIHJldHVybnMgYW4geHM6aW50ZWdlciBlcXVhbCB0byB0aGUgbGVuZ3RoIGluIGNoYXJhY3RlcnMgb2YgdGhlCi0gKiB2YWx1ZSBvZiAkYXJnLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmIHRoZSB2YWx1ZSBvZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIHhzOmludGVnZXIgMCBpcyByZXR1cm5lZC4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuU3RyaW5nTGVuZ3RoIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3RyaW5nTGVuZ3RoCi0JICovCi0JcHVibGljIEZuU3RyaW5nTGVuZ3RoKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInN0cmluZy1sZW5ndGgiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc3RyaW5nX2xlbmd0aChhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIHRoZSBzdHJpbmcgbGVuZ3RoIG9mIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSB1c2VkIHRvIG9idGFpbiB0aGUgc3RyaW5nIGxlbmd0aC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIG9idGFpbmluZyB0aGUgc3RyaW5nIGxlbmd0aCBmcm9tIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzdHJpbmdfbGVuZ3RoKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZF9jb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSBudWxsOwotCi0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJICAvLyBzdXBwb3J0IGZvciBhcml0eSA9IDAKLQkJICByZXR1cm4gZ2V0UmVzdWx0U2V0Rm9yQXJpdHlaZXJvKGRfY29udGV4dCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCX0KLQotCQlTdHJpbmcgc3RyID0gIiI7Ci0JCWlmICghIGFyZzEuZW1wdHkoKSkgewotCQkJc3RyID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCQl9Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHN0ci5jb2RlUG9pbnRDb3VudCgwLCBzdHIubGVuZ3RoKCkpKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZ1RvQ29kZXBvaW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZ1RvQ29kZXBvaW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2Q1M2RmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdUb0NvZGVwb2ludHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA1NTQgLSBpbXByb3ZlbWVudHMgdG8gdGhlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjA5NiAtIGltcHJvdmVtZW50cyBmb3Igc3Vycm9nYXRlIGhhbmRsaW5nICAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBjbGVhbiB1cCBzdHJpbmcgc3RvcmFnZSBhbmQgZml4IHN1cnJvZ2F0ZSBoYW5kbGluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29kZVBvaW50SXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBjb25zdGl0dXRlIGFuIHhzOnN0cmluZy4gSWYgJGFyZyBpcwotICogYSB6ZXJvLWxlbmd0aCBzdHJpbmcgb3IgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblN0cmluZ1RvQ29kZXBvaW50cyBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN0cmluZ1RvQ29kZXBvaW50cy4KLQkgKi8KLQlwdWJsaWMgRm5TdHJpbmdUb0NvZGVwb2ludHMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3RyaW5nLXRvLWNvZGVwb2ludHMiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN0cmluZ190b19jb2RlcG9pbnRzKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEJhc2UtVXJpIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmJhc2UtdXJpIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN0cmluZ190b19jb2RlcG9pbnRzKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCSAgIHJldHVybiByczsKLQotCQlYU1N0cmluZyB4c3RyID0gKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCk7Ci0KLQkJQ29kZVBvaW50SXRlcmF0b3IgY3BpID0gbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKHhzdHIudmFsdWUoKSk7Ci0JCQotCQlmb3IgKGludCBjb2RlUG9pbnQgPSBjcGkuY3VycmVudCgpOyBjb2RlUG9pbnQgIT0gQ29kZVBvaW50SXRlcmF0b3IuRE9ORTsgY29kZVBvaW50ID0gY3BpLm5leHQoKSkgewotICAgICAgICAgICAJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGNvZGVQb2ludCkpKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1YnNlcXVlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic2VxdWVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIyYmRmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic2VxdWVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gZWFzZWQgcmVzdHJpY3Rpb24gb24gZGF0YSB0eXBlLi4uY29udmVydCBudW1lcmljcyB0byBYU0RvdWJsZS4KLSAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg1ODA2IC0gZml4ZWQgZm46c3Vic2VxdWVuY2UgZm9yIGluZGV4ZXMgc3RhcnRpbmcgYmVmb3JlIDEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGl0ZW1zIGluIHRoZSB2YWx1ZSBvZiAkc291cmNlU2VxIGJlZ2lubmluZwotICogYXQgdGhlIHBvc2l0aW9uIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YgJHN0YXJ0aW5nTG9jIGFuZCBjb250aW51aW5nIGZvciB0aGUKLSAqIG51bWJlciBvZiBpdGVtcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mICRsZW5ndGguIE1vcmUgc3BlY2lmaWNhbGx5LCByZXR1cm5zCi0gKiB0aGUgaXRlbXMgaW4gJHNvdXJjZVN0cmluZyB3aG9zZSBwb3NpdGlvbiAkcCBvYmV5czogLSBmbjpyb3VuZCgkc3RhcnRpbmdMb2MpCi0gKiA8PSAkcCA8IGZuOnJvdW5kKCRzdGFydGluZ0xvYykgKyBmbjpyb3VuZCgkbGVuZ3RoKQotICovCi1wdWJsaWMgY2xhc3MgRm5TdWJzZXF1ZW5jZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TdWJzZXF1ZW5jZS4KLQkgKi8KLQlwdWJsaWMgRm5TdWJzZXF1ZW5jZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdWJzZXF1ZW5jZSIpLCAzKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc3Vic2VxdWVuY2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogU3Vic2VxdWVuY2Ugb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c3Vic2VxdWVuY2Ugb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3Vic2VxdWVuY2UoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDM7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGNpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBzZXEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugc3RhcnRMb2MgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgbGVuZ3RoID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJLy8gc2FuaXR5IGNoZXgKLQkJaWYgKHN0YXJ0TG9jLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlBbnlUeXBlIGF0ID0gc3RhcnRMb2MuZmlyc3QoKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkpIHsKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQotCQlhdCA9IG5ldyBYU0RvdWJsZShhdC5zdHJpbmdfdmFsdWUoKSk7Ci0KLQkJaW50IHN0YXJ0ID0gKGludCkgKChYU0RvdWJsZSkgYXQpLmRvdWJsZV92YWx1ZSgpOwotCi0JCWlmIChsZW5ndGguc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkKLQkJYXQgPSBsZW5ndGguZmlyc3QoKTsKLQkJCi0JCWlmICghKGF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpKSB7Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0JCQotCQlhdCA9IG5ldyBYU0RvdWJsZShhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkKLQotCQlpbnQgbGVuID0gKGludCkgKChYU0RvdWJsZSkgYXQpLmRvdWJsZV92YWx1ZSgpOwotCi0JCWlmIChzZXEuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQlpbnQgcG9zID0gMTsKLQotCQlpbnQgZW5kID0gc3RhcnQgKyBsZW47Ci0KLQkJLy8gWFhYOiBIdWdlIG9wdGltaXphdGlvbiBwb3NzaWJsZSBoZXJlIQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBzZXEuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlhdCA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJaWYgKHN0YXJ0IDw9IHBvcyAmJiBwb3MgPCBlbmQpCi0JCQkJcnMuYWRkKGF0KTsKLQotCQkJcG9zKys7Ci0JCX0KLQkJcmV0dXJuIHJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNhNjFmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc5NSAtIGltcHJvdmVtZW50cyB0byBmdW5jdGlvbiwgc3Vic3RyaW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMDk2IC0gaW1wcm92ZW1lbnRzIGZvciBzdXJyb2dhdGUgaGFuZGxpbmcgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gcmVpbXBsZW1lbnRlZCB0byBiZSBzdXJyb2dhdGUgc2Vuc2l0aXZlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5Db2RlUG9pbnRJdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuU3RyaW5nQ29kZVBvaW50SXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiA8cD4KLSAqIEZ1bmN0aW9uIHRvIG9idGFpbiBhIHN1YnN0cmluZyBmcm9tIGEgc3RyaW5nLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjpzdWJzdHJpbmcoJHNvdXJjZVN0cmluZyBhcyB4czpzdHJpbmc/LCAkc3RhcnRpbmdMb2MgYXMgeHM6ZG91YmxlKQotICogYXMgeHM6c3RyaW5nCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyByZXR1cm5zIHRoZSBwb3J0aW9uIG9mIHRoZSB2YWx1ZSBvZiAkc291cmNlU3RyaW5nIGJlZ2lubmluZyBhdCB0aGUKLSAqIHBvc2l0aW9uIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YgJHN0YXJ0aW5nTG9jLiBUaGUgY2hhcmFjdGVycyByZXR1cm5lZCBkbwotICogbm90IGV4dGVuZCBiZXlvbmQgJHNvdXJjZVN0cmluZy4gSWYgJHN0YXJ0aW5nTG9jIGlzIHplcm8gb3IgbmVnYXRpdmUsIG9ubHkKLSAqIHRob3NlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiB6ZXJvIGFyZSByZXR1cm5lZC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiB0aGUgdmFsdWUgb2YgJHNvdXJjZVN0cmluZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSB6ZXJvLWxlbmd0aCBzdHJpbmcKLSAqIGlzIHJldHVybmVkLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgaXMgbG9jYXRlZCBhdCBwb3NpdGlvbiAxLCBub3QgcG9zaXRpb24gMC4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuU3Vic3RyaW5nIGV4dGVuZHMgRnVuY3Rpb24gewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3Vic3RyaW5nCi0JICovCi0JcHVibGljIEZuU3Vic3RyaW5nKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInN1YnN0cmluZyIpLCAyLCAzKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBzdWJzdHJpbmcgb2J0YWluZWQgZnJvbSB0aGUgYXJndW1lbnRzLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc3Vic3RyaW5nKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIHN1YnN0cmluZyBmcm9tIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSB1c2VkIHRvIG9idGFpbiBhIHN1YnN0cmluZy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIHN1YnN0cmluZyBmcm9tIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzdWJzdHJpbmcoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoYXJncykpOwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJSXRlcmF0b3IgYXJnaSA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHN0cmluZ0FyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHN0YXJ0UG9zQXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgbGVuZ3RoQXJnID0gbnVsbDsKLQkJCi0JCWlmIChhcmdpLmhhc05leHQoKSkgewotCQkgIGxlbmd0aEFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7CQotCQl9Ci0KLQkJaWYgKHN0cmluZ0FyZy5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gZW1wdHlTdHJpbmcocnMpOwotCQl9Ci0KLQkJU3RyaW5nIHN0ciA9ICgoWFNTdHJpbmcpIHN0cmluZ0FyZy5maXJzdCgpKS52YWx1ZSgpOwotCQlkb3VibGUgZHN0YXJ0ID0gKChYU0RvdWJsZSkgc3RhcnRQb3NBcmcuZmlyc3QoKSkuZG91YmxlX3ZhbHVlKCk7Ci0JCQotCQkvLyBpcyBzdGFydCBpcyBOYU4sIG5vIGNoYXJzIGFyZSByZXR1cm5lZAotCQlpZiAoRG91YmxlLmlzTmFOKGRzdGFydCkgfHwgRG91YmxlLk5FR0FUSVZFX0lORklOSVRZID09IGRzdGFydCkgewotCQkJcmV0dXJuIGVtcHR5U3RyaW5nKHJzKTsKLQkJfQotCQlsb25nIGlzdGFydCA9IE1hdGgucm91bmQoZHN0YXJ0KTsKLQkJCi0JCWxvbmcgaWxlbmd0aCA9IExvbmcuTUFYX1ZBTFVFOwotCQlpZiAobGVuZ3RoQXJnICE9IG51bGwpIHsKLQkJCWRvdWJsZSBkbGVuZ3RoID0gKChYU0RvdWJsZSkgbGVuZ3RoQXJnLmZpcnN0KCkpLmRvdWJsZV92YWx1ZSgpOwotCQkJaWYgKERvdWJsZS5pc05hTihkbGVuZ3RoKSkKLQkJCQlyZXR1cm4gZW1wdHlTdHJpbmcocnMpOwotCQkJLy8gU3dpdGNoIHRvIHRoZSByb3VuZGVkIGtpbmQKLQkJCWlsZW5ndGggPSBNYXRoLnJvdW5kKGRsZW5ndGgpOwotCQkJaWYgKGlsZW5ndGggPD0gMCkKLQkJCQlyZXR1cm4gZW1wdHlTdHJpbmcocnMpOwotCQl9Ci0JCQotCQkKLQkJLy8gY291bGQgZ3Vlc3MgdG9vIHNob3J0IGluIGNhc2VzIHN1cHBsZW1lbnRhcnkgY2hhcnMgCi0JCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigoaW50KSBNYXRoLm1pbihzdHIubGVuZ3RoKCksIGlsZW5ndGgpKTsKLQotCQkvLyBUaGlzIGxvb2tzIGxpa2UgYW4gaW5lZmZpY2llbnQgd2F5IHRvIGl0ZXJhdGUsIGJ1dCBkdWUgdG8gc3Vycm9nYXRlIGhhbmRsaW5nLAotCQkvLyBzdHJpbmcgaW5kZXhlcyBhcmUgbm8gZ29vZCBoZXJlLiBXZWxjb21lIHRvIFVURi0xNiEKLQkJCi0JCUNvZGVQb2ludEl0ZXJhdG9yIHN0ckl0ZXIgPSBuZXcgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Ioc3RyKTsKLQkJZm9yIChsb25nIHAgPSAxOyBzdHJJdGVyLmN1cnJlbnQoKSAhPSBDb2RlUG9pbnRJdGVyYXRvci5ET05FOyArK3AsIHN0ckl0ZXIubmV4dCgpKSB7Ci0JCQlpZiAoaXN0YXJ0IDw9IHAgJiYgcCAtIGlzdGFydCA8IGlsZW5ndGgpCi0JCQkJc2IuYXBwZW5kQ29kZVBvaW50KHN0ckl0ZXIuY3VycmVudCgpKTsKLQkJfQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHNiLnRvU3RyaW5nKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGVtcHR5U3RyaW5nKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCXJzLmFkZChuZXcgWFNTdHJpbmcoIiIpKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncyhDb2xsZWN0aW9uIGFjdHVhbEFyZ3MpIHsKLQkJQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RvdWJsZSgpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCQotCQkvLyBmb3IgYXJpdHkgMwotCQlpZiAoYWN0dWFsQXJncy5zaXplKCkgPT0gMykgewotCQkgIF9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEb3VibGUoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmdBZnRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1YnN0cmluZ0FmdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YTA4ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1YnN0cmluZ0FmdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjA5NiAtIGltcHJvdmVtZW50cyBmb3Igc3Vycm9nYXRlIGhhbmRsaW5nICAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBjbGVhbiB1cCBzdHJpbmcgc3RvcmFnZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGUgdmFsdWUgb2YgJGFyZzEgdGhhdCBmb2xsb3dzIGluIHRoZSB2YWx1ZSBvZgotICogJGFyZzEgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXF1ZW5jZSBvZiBjb2xsYXRpb24gdW5pdHMgdGhhdCBwcm92aWRlcyBhCi0gKiBtaW5pbWFsIG1hdGNoIHRvIHRoZSBjb2xsYXRpb24gdW5pdHMgb2YgJGFyZzIgYWNjb3JkaW5nIHRvIHRoZSBjb2xsYXRpb24gdGhhdAotICogaXMgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIEZuU3Vic3RyaW5nQWZ0ZXIgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TdWJzdHJpbmdBZnRlci4KLQkgKi8KLQlwdWJsaWMgRm5TdWJzdHJpbmdBZnRlcigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdWJzdHJpbmctYWZ0ZXIiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN1YnN0cmluZ19hZnRlcihhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdWJzdHJpbmctQWZ0ZXIgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c3Vic3RyaW5nLWFmdGVyIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN1YnN0cmluZ19hZnRlcihDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJU3RyaW5nIHN0cjIgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpIHsKLQkJCXN0cjEgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJaWYgKCFhcmcyLmVtcHR5KCkpIHsKLQkJCXN0cjIgPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQotCQlpbnQgc3RyMWxlbiA9IHN0cjEubGVuZ3RoKCk7Ci0JCWludCBzdHIybGVuID0gc3RyMi5sZW5ndGgoKTsKLQotCQlpZiAoc3RyMmxlbiA9PSAwKSB7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKHN0cjEpKTsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCWludCBpbmRleCA9IHN0cjEuaW5kZXhPZihzdHIyKTsKLQkJaWYgKGluZGV4ID09IC0xKSB7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKCIiKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0KLQkJaWYgKChpbmRleCArIHN0cjJsZW4pIDwgc3RyMWxlbikgewotCQkJaW5kZXggKz0gc3RyMmxlbjsKLQkJCXJlc3VsdCA9IHN0cjEuc3Vic3RyaW5nKGluZGV4LCBzdHIxbGVuKTsKLQkJfQotCi0JCXJzLmFkZChuZXcgWFNTdHJpbmcocmVzdWx0KSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1YnN0cmluZ0JlZm9yZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1YnN0cmluZ0JlZm9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjRkNTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmdCZWZvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMDk2IC0gaW1wcm92ZW1lbnRzIGZvciBzdXJyb2dhdGUgaGFuZGxpbmcgIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGNsZWFuIHVwIHN0cmluZyBzdG9yYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc3Vic3RyaW5nIG9mIHRoZSB2YWx1ZSBvZiAkYXJnMSB0aGF0IHByZWNlZGVzIGluIHRoZSB2YWx1ZSBvZgotICogJGFyZzEgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXF1ZW5jZSBvZiBjb2xsYXRpb24gdW5pdHMgdGhhdCBwcm92aWRlcyBhCi0gKiBtaW5pbWFsIG1hdGNoIHRvIHRoZSBjb2xsYXRpb24gdW5pdHMgb2YgJGFyZzIgYWNjb3JkaW5nIHRvIHRoZSBjb2xsYXRpb24gdGhhdAotICogaXMgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIEZuU3Vic3RyaW5nQmVmb3JlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3Vic3RyaW5nQmVmb3JlLgotCSAqLwotCXB1YmxpYyBGblN1YnN0cmluZ0JlZm9yZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdWJzdHJpbmctYmVmb3JlIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBzdWJzdHJpbmdfYmVmb3JlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFN1YnN0cmluZy1CZWZvcmUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c3Vic3RyaW5nLWJlZm9yZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzdWJzdHJpbmdfYmVmb3JlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlTdHJpbmcgc3RyMSA9ICIiOwotCQlTdHJpbmcgc3RyMiA9ICIiOwotCQlpZiAoIWFyZzEuZW1wdHkoKSkgewotCQkJc3RyMSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJfQotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlpZiAoIWFyZzIuZW1wdHkoKSkgewotCQkJc3RyMiA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQkJfQotCi0JCWludCBzdHIybGVuID0gc3RyMi5sZW5ndGgoKTsKLQotCQlpZiAoc3RyMmxlbiA9PSAwKSB7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKCIiKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlpbnQgaW5kZXggPSBzdHIxLmluZGV4T2Yoc3RyMik7Ci0JCWlmIChpbmRleCA9PSAtMSkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJCi0JCXJzLmFkZChuZXcgWFNTdHJpbmcoc3RyMS5zdWJzdHJpbmcoMCwgaW5kZXgpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1bS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1bS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTkyMzg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgxMDI4IC0gZml4IHByb21vdGlvbiBydWxlcyBmb3IgZm46c3VtCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlNjYWxhclR5cGVQcm9tb3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuVHlwZVByb21vdGVyOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhIHZhbHVlIG9idGFpbmVkIGJ5IGFkZGluZyB0b2dldGhlciB0aGUgdmFsdWVzIGluICRhcmcuIElmIHRoZQotICogc2luZ2xlLWFyZ3VtZW50IGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGlzIHVzZWQsIHRoZW4gdGhlIHZhbHVlIHJldHVybmVkIGZvciBhbgotICogZW1wdHkgc2VxdWVuY2UgaXMgdGhlIHhzOmludGVnZXIgdmFsdWUgMC4gSWYgdGhlIHR3by1hcmd1bWVudCBmb3JtIGlzIHVzZWQsCi0gKiB0aGVuIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYW4gZW1wdHkgc2VxdWVuY2UgaXMgdGhlIHZhbHVlIG9mIHRoZSAkemVybwotICogYXJndW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblN1bSBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCXN0YXRpYyBwcml2YXRlIFhTSW50ZWdlciBaRVJPID0gbmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLlpFUk8pOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3VtLgotCSAqLwotCXB1YmxpYyBGblN1bSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdW0iKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJSXRlcmF0b3IgYXJnSXRlcmF0b3IgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZ1NlcXVlbmNlID0gKFJlc3VsdFNlcXVlbmNlKWFyZ0l0ZXJhdG9yLm5leHQoKTsKLQkJQW55QXRvbWljVHlwZSB6ZXJvID0gWkVSTzsKLQkJaWYgKGFyZ0l0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJUmVzdWx0U2VxdWVuY2UgemVyb1NlcXVlbmNlID0gKFJlc3VsdFNlcXVlbmNlKWFyZ0l0ZXJhdG9yLm5leHQoKTsKLQkJCWlmICh6ZXJvU2VxdWVuY2Uuc2l6ZSgpICE9IDEpCi0JCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCWlmICghICh6ZXJvU2VxdWVuY2UuZmlyc3QoKSBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpKQotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZSh6ZXJvU2VxdWVuY2UuZmlyc3QoKS5zdHJpbmdfdmFsdWUoKSkpOwotCQkJemVybyA9IChBbnlBdG9taWNUeXBlKXplcm9TZXF1ZW5jZS5maXJzdCgpOwotCQl9Ci0JCXJldHVybiBzdW0oYXJnU2VxdWVuY2UsIHplcm8pOwotCX0KLQotCS8qKgotCSAqIFN1bSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpzdW0gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3VtKFJlc3VsdFNlcXVlbmNlIGFyZywgQW55QXRvbWljVHlwZSB6ZXJvKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyh6ZXJvKTsKLQotCQlNYXRoUGx1cyB0b3RhbCA9IG51bGw7Ci0KLQkJVHlwZVByb21vdGVyIHRwID0gbmV3IFNjYWxhclR5cGVQcm9tb3RlcigpOwotCQl0cC5jb25zaWRlclNlcXVlbmNlKGFyZyk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJnLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55QXRvbWljVHlwZSBjb252ID0gdHAucHJvbW90ZSgoQW55VHlwZSkgaS5uZXh0KCkpOwotCQkJCi0JCQlpZiAoY29udiBpbnN0YW5jZW9mIFhTRG91YmxlICYmICgoWFNEb3VibGUpY29udikubmFuKCkgfHwgY29udiBpbnN0YW5jZW9mIFhTRmxvYXQgJiYgKChYU0Zsb2F0KWNvbnYpLm5hbigpKSB7Ci0JCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHRwLnByb21vdGUobmV3IFhTRmxvYXQoRmxvYXQuTmFOKSkpOwotCQkJfQotCQkJaWYgKHRvdGFsID09IG51bGwpIHsKLQkJCQl0b3RhbCA9IChNYXRoUGx1cyljb252OyAKLQkJCX0gZWxzZSB7Ci0JCQkJdG90YWwgPSAoTWF0aFBsdXMpdG90YWwucGx1cyhSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhjb252KSkuZmlyc3QoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKEFueVR5cGUpIHRvdGFsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVGltZXpvbmVGcm9tRGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmExYjkyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVGltZXpvbmVGcm9tRGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHRpbWV6b25lIGNvbXBvbmVudCBvZiAkYXJnIGlmIGFueS4gSWYgJGFyZyBoYXMgYSB0aW1lem9uZQotICogY29tcG9uZW50LCB0aGVuIHRoZSByZXN1bHQgaXMgYW4geGR0OmRheVRpbWVEdXJhdGlvbiB0aGF0IGluZGljYXRlcyBkZXZpYXRpb24KLSAqIGZyb20gVVRDOyBpdHMgdmFsdWUgbWF5IHJhbmdlIGZyb20gKzE0OjAwIHRvIC0xNDowMCBob3VycywgYm90aCBpbmNsdXNpdmUuCi0gKiBPdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwKLSAqIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5UaW1lem9uZUZyb21EYXRlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuVGltZXpvbmVGcm9tRGF0ZS4KLQkgKi8KLQlwdWJsaWMgRm5UaW1lem9uZUZyb21EYXRlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInRpbWV6b25lLWZyb20tZGF0ZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gdGltZXpvbmVfZnJvbV9kYXRlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFRpbWV6b25lLWZyb20tRGF0ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp0aW1lem9uZS1mcm9tLWRhdGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgdGltZXpvbmVfZnJvbV9kYXRlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEYXRlIGR0ID0gKFhTRGF0ZSkgYXJnMS5maXJzdCgpOwotCi0JCWlmIChkdC50aW1lem9uZWQoKSkgewotCQkJcnMuYWRkKGR0LnR6KCkpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGVUaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVGltZXpvbmVGcm9tRGF0ZVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIxYmM4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVGltZXpvbmVGcm9tRGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB0aW1lem9uZSBjb21wb25lbnQgb2YgJGFyZyBpZiBhbnkuIElmICRhcmcgaGFzIGEgdGltZXpvbmUKLSAqIGNvbXBvbmVudCwgdGhlbiB0aGUgcmVzdWx0IGlzIGFuIHhkdDpkYXlUaW1lRHVyYXRpb24gdGhhdCBpbmRpY2F0ZXMgZGV2aWF0aW9uCi0gKiBmcm9tIFVUQzsgaXRzIHZhbHVlIG1heSByYW5nZSBmcm9tICsxNDowMCB0byAtMTQ6MDAgaG91cnMsIGJvdGggaW5jbHVzaXZlLgotICogT3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZS4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsCi0gKiByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuVGltZXpvbmVGcm9tRGF0ZVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5UaW1lem9uZUZyb21EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5UaW1lem9uZUZyb21EYXRlVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0aW1lem9uZS1mcm9tLWRhdGVUaW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB0aW1lem9uZV9mcm9tX2RhdGVfdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBUaW1lem9uZS1mcm9tLURhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnRpbWV6b25lLWZyb20tZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgdGltZXpvbmVfZnJvbV9kYXRlX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpZiAoZHQudGltZXpvbmVkKCkpIHsKLQkJCXJzLmFkZChkdC50eigpKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGVUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UaW1lem9uZUZyb21UaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MTUzNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB0aW1lem9uZSBjb21wb25lbnQgb2YgJGFyZyBpZiBhbnkuIElmICRhcmcgaGFzIGEgdGltZXpvbmUKLSAqIGNvbXBvbmVudCwgdGhlbiB0aGUgcmVzdWx0IGlzIGFuIHhkdDpkYXlUaW1lRHVyYXRpb24gdGhhdCBpbmRpY2F0ZXMgZGV2aWF0aW9uCi0gKiBmcm9tIFVUQzsgaXRzIHZhbHVlIG1heSByYW5nZSBmcm9tICsxNDowMCB0byAtMTQ6MDAgaG91cnMsIGJvdGggaW5jbHVzaXZlLgotICogT3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZS4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsCi0gKiByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuVGltZXpvbmVGcm9tVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRpbWV6b25lRnJvbVRpbWUuCi0JICovCi0JcHVibGljIEZuVGltZXpvbmVGcm9tVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0aW1lem9uZS1mcm9tLXRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHRpbWV6b25lX2Zyb21fdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBUaW1lem9uZS1mcm9tLVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46dGltZXpvbmUtZnJvbS10aW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHRpbWV6b25lX2Zyb21fdGltZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTVGltZSBkdCA9IChYU1RpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpZiAoZHQudGltZXpvbmVkKCkpIHsKLQkJCXJzLmFkZChkdC50eigpKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ub2tlbml6ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRva2VuaXplLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NjIyMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRva2VuaXplLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGNsZWFuIHVwIHN0cmluZyBzdG9yYWdlCi0gKiAgICAgSmVzcGVyIFMgTW9sbGVyICAgICAgLSBCdWcgMjgxOTM4IC0gbm8gbWF0Y2hlcyBzaG91bGQgcmV0dXJuIGZ1bGwgaW5wdXQgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lio7Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBicmVha3MgdGhlICRpbnB1dCBzdHJpbmcgaW50byBhIHNlcXVlbmNlIG9mIHN0cmluZ3MsIHRyZWF0aW5nCi0gKiBhbnkgc3Vic3RyaW5nIHRoYXQgbWF0Y2hlcyAkcGF0dGVybiBhcyBhIHNlcGFyYXRvci4gVGhlIHNlcGFyYXRvcnMgdGhlbXNlbHZlcwotICogYXJlIG5vdCByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuVG9rZW5pemUgZXh0ZW5kcyBBYnN0cmFjdFJlZ0V4RnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuVG9rZW5pemUuCi0JICovCi0JcHVibGljIEZuVG9rZW5pemUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidG9rZW5pemUiKSwgMiwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHRva2VuaXplKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFRva2VuaXplIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnRva2VuaXplIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHRva2VuaXplKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBzdHIxID0gIiI7Ci0JCWlmICghYXJnMS5lbXB0eSgpKSB7Ci0JCQlzdHIxID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCQl9Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBwYXR0ZXJuID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCQlTdHJpbmcgZmxhZ3MgPSBudWxsOwotCi0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJUmVzdWx0U2VxdWVuY2UgZmxhZ1JTID0gbnVsbDsKLQkJCWZsYWdSUyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCQlmbGFncyA9IGZsYWdSUy5maXJzdCgpLnN0cmluZ192YWx1ZSgpOwotCQkJaWYgKHZhbGlkZmxhZ3MuaW5kZXhPZihmbGFncykgPT0gLTEgJiYgZmxhZ3MubGVuZ3RoKCkgPiAwICkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5yZWdleF9mbGFnc19lcnJvcihudWxsKTsKLQkJCX0KLQkJfQotCi0JCXRyeSB7Ci0JCQlBcnJheUxpc3Q8U3RyaW5nPiByZXQgPSB0b2tlbml6ZShwYXR0ZXJuLCBmbGFncywgc3RyMSk7Ci0KLQkJCWZvcihTdHJpbmcgdG9rZW4gOiByZXQpIHsKLQkJCQlycy5hZGQobmV3IFhTU3RyaW5nKHRva2VuKSk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKFBhdHRlcm5TeW50YXhFeGNlcHRpb24gZXJyKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IucmVnZXhfZXJyb3IobnVsbCk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIEFycmF5TGlzdDxTdHJpbmc+IHRva2VuaXplKFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgZmxhZ3MsIFN0cmluZyBzcmMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlNYXRjaGVyIG1hdGNoZXIgPSByZWdleChwYXR0ZXJuLCBmbGFncywgc3JjKTsKLQkJQXJyYXlMaXN0PFN0cmluZz4gdG9rZW5zID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCWludCBzdGFydHBvcyA9IDA7Ci0JCWludCBlbmRwb3MgPSBzcmMubGVuZ3RoKCk7Ci0JCXdoaWxlIChtYXRjaGVyLmZpbmQoKSkgewotCQkJU3RyaW5nIGRlbGltID0gbWF0Y2hlci5ncm91cCgpOwotCQkJaWYgKGRlbGltLmxlbmd0aCgpID09IDApIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IucmVnZXhfbWF0Y2hfemVyb19sZW5ndGgobnVsbCk7Ci0JCQl9Ci0JCQlTdHJpbmcgdG9rZW4gPSBzcmMuc3Vic3RyaW5nKHN0YXJ0cG9zLCBtYXRjaGVyLnN0YXJ0KCkpOwotCQkJc3RhcnRwb3MgPSBtYXRjaGVyLmVuZCgpOwotCQkJdG9rZW5zLmFkZCh0b2tlbik7Ci0JCX0KLQkJaWYgKHN0YXJ0cG9zIDwgZW5kcG9zKSB7Ci0JCQlTdHJpbmcgdG9rZW4gPSBzcmMuc3Vic3RyaW5nKHN0YXJ0cG9zLCBlbmRwb3MpOwotCQkJdG9rZW5zLmFkZCh0b2tlbik7Ci0JCX0KLQkJcmV0dXJuIHRva2VuczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRyYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVHJhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ5MjBmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVHJhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogVGhlIGlucHV0ICR2YWx1ZSBpcyByZXR1cm5lZCwgdW5jaGFuZ2VkLCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbi4gSW4KLSAqIGFkZGl0aW9uLCB0aGUgaW5wdXRzICR2YWx1ZSwgY29udmVydGVkIHRvIGFuIHhzOnN0cmluZywgYW5kICRsYWJlbCBtYXkgYmUKLSAqIGRpcmVjdGVkIHRvIGEgdHJhY2UgZGF0YSBzZXQuIFRoZSBsb2NhdGlvbiBhbmQgZm9ybWF0IG9mIHRoZSB0cmFjZSBkYXRhIHNldAotICogYXJlIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gVGhlIG9yZGVyaW5nIG9mIG91dHB1dCBmcm9tIGludm9jYXRpb25zIG9mIHRoZQotICogZm46dHJhY2UoKSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblRyYWNlIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRyYWNlLgotCSAqLwotCXB1YmxpYyBGblRyYWNlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInRyYWNlIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB0cmFjZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBUcmFjZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp0cmFjZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB0cmFjZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIHNhbml0eSBjaGVjayBhcmdzCi0JCWlmIChhcmdzLnNpemUoKSAhPSAyKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlJdGVyYXRvciBhcmdzaSA9IGFyZ3MuaXRlcmF0b3IoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzaS5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3NpLm5leHQoKTsKLQotCQlpZiAoYXJnMi5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQW55VHlwZSBhdCA9IGFyZzIuZmlyc3QoKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU1N0cmluZykpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCVhTU3RyaW5nIGxhYmVsID0gKFhTU3RyaW5nKSBhdDsKLQotCQlpbnQgaW5kZXggPSAxOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZzEuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7IGluZGV4KyspIHsKLQkJCWF0ID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4obGFiZWwudmFsdWUoKSArICIgWyIgKyBpbmRleCArICJdICIKLQkJCQkJKyBhdC5zdHJpbmdfdHlwZSgpICsgIjoiICsgYXQuc3RyaW5nX3ZhbHVlKCkpOwotCi0JCX0KLQotCQlyZXR1cm4gYXJnMTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVHJhbnNsYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVHJhbnNsYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZjc4NGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRyYW5zbGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBjbGVhbiB1cCBzdHJpbmcgc3RvcmFnZSBhbmQgbWFrZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSBmdW5jdGlvbiBzdXJyb2dhdGUgYXdhcmUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvZGVQb2ludEl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TdHJpbmdDb2RlUG9pbnRJdGVyYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIDxwPgotICogVHJhbnNsYXRpb24gZnVuY3Rpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOnRyYW5zbGF0ZSgkYXJnIGFzIHhzOnN0cmluZz8sICRtYXBTdHJpbmcgYXMgeHM6c3RyaW5nLCAkdHJhbnNTdHJpbmcKLSAqIGFzIHhzOnN0cmluZykgYXMgeHM6c3RyaW5nCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyByZXR1cm5zIHRoZSB2YWx1ZSBvZiAkYXJnIG1vZGlmaWVkIHNvIHRoYXQgZXZlcnkgY2hhcmFjdGVyIGluIHRoZQotICogdmFsdWUgb2YgJGFyZyB0aGF0IG9jY3VycyBhdCBzb21lIHBvc2l0aW9uIE4gaW4gdGhlIHZhbHVlIG9mICRtYXBTdHJpbmcgaGFzCi0gKiBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBjaGFyYWN0ZXIgdGhhdCBvY2N1cnMgYXQgcG9zaXRpb24gTiBpbiB0aGUgdmFsdWUgb2YKLSAqICR0cmFuc1N0cmluZy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiB0aGUgdmFsdWUgb2YgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSB6ZXJvLWxlbmd0aCBzdHJpbmcgaXMKLSAqIHJldHVybmVkLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIEV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgdmFsdWUgb2YgJGFyZyB0aGF0IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgdmFsdWUgb2YKLSAqICRtYXBTdHJpbmcgaXMgdW5jaGFuZ2VkLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIEV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgdmFsdWUgb2YgJGFyZyB0aGF0IGFwcGVhcnMgYXQgc29tZSBwb3NpdGlvbiBNIGluIHRoZQotICogdmFsdWUgb2YgJG1hcFN0cmluZywgd2hlcmUgdGhlIHZhbHVlIG9mICR0cmFuc1N0cmluZyBpcyBsZXNzIHRoYW4gTQotICogY2hhcmFjdGVycyBpbiBsZW5ndGgsIGlzIG9taXR0ZWQgZnJvbSB0aGUgcmV0dXJuZWQgdmFsdWUuIElmICRtYXBTdHJpbmcgaXMKLSAqIHRoZSB6ZXJvLWxlbmd0aCBzdHJpbmcgJGFyZyBpcyByZXR1cm5lZC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiBhIGNoYXJhY3RlciBvY2N1cnMgbW9yZSB0aGFuIG9uY2UgaW4gJG1hcFN0cmluZywgdGhlbiB0aGUgZmlyc3Qgb2NjdXJyZW5jZQotICogZGV0ZXJtaW5lcyB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLiBJZiAkdHJhbnNTdHJpbmcgaXMgbG9uZ2VyIHRoYW4KLSAqICRtYXBTdHJpbmcsIHRoZSBleGNlc3MgY2hhcmFjdGVycyBhcmUgaWdub3JlZC4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuVHJhbnNsYXRlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuVHJhbnNsYXRlLgotCSAqLwotCXB1YmxpYyBGblRyYW5zbGF0ZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0cmFuc2xhdGUiKSwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgYXJndW1lbnRzIGJlaW5nIHRyYW5zbGF0ZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB0cmFuc2xhdGUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNsYXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIHRyYW5zbGF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiB0cmFuc2xhdGluZyB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgdHJhbnNsYXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCUl0ZXJhdG9yIGFyZ2kgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzMgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKCIiKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlTdHJpbmcgc3RyID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCQlTdHJpbmcgbWFwc3RyID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCQlTdHJpbmcgdHJhbnNzdHIgPSAoKFhTU3RyaW5nKSBhcmczLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJTWFwPEludGVnZXIsIEludGVnZXI+IHJlcGxhY2VtZW50cyA9IGJ1aWxkUmVwbGFjZW1lbnRNYXAobWFwc3RyLCB0cmFuc3N0cik7Ci0JCQotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHN0ci5sZW5ndGgoKSk7Ci0JCUNvZGVQb2ludEl0ZXJhdG9yIHN0ckl0ZXIgPSBuZXcgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Ioc3RyKTsKLQkJZm9yIChpbnQgaW5wdXQgPSBzdHJJdGVyLmN1cnJlbnQoKTsgaW5wdXQgIT0gQ29kZVBvaW50SXRlcmF0b3IuRE9ORTsgaW5wdXQgPSBzdHJJdGVyLm5leHQoKSkgewotCQkJSW50ZWdlciBpbnB1dENvZGVwb2ludCA9IEludGVnZXIudmFsdWVPZihpbnB1dCk7Ci0JCQlpZiAocmVwbGFjZW1lbnRzLmNvbnRhaW5zS2V5KGlucHV0Q29kZXBvaW50KSkgewotCQkJCUludGVnZXIgcmVwbGFjZVdpdGggPSByZXBsYWNlbWVudHMuZ2V0KGlucHV0Q29kZXBvaW50KTsKLQkJCQlpZiAocmVwbGFjZVdpdGggIT0gbnVsbCkgewotCQkJCQlzYi5hcHBlbmRDb2RlUG9pbnQocmVwbGFjZVdpdGguaW50VmFsdWUoKSk7Ci0JCQkJfQkJCQkJCi0JCQl9IGVsc2UgewotCQkJCXNiLmFwcGVuZENvZGVQb2ludChpbnB1dCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJzLmFkZChuZXcgWFNTdHJpbmcoc2IudG9TdHJpbmcoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBCdWlsZCBhIHJlcGxhY2VtZW50IG1hcCBmcm9tIHRoZSBtYXBzdHIgYW5kIHRoZSB0cmFuc3N0ciBmb3IgdHJhbnNsYXRpb24uIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgTWFwPEludGVnZXIsIEludGVnZXI+IG1hcHBpbmcgZWFjaCBjb2RlcG9pbnQKLQkgKiBtZW50aW9uZWQgaW4gdGhlIG1hcHN0ciBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGNvZGVwb2ludCBpbiB0cmFuc3N0ciwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBtYXRjaGluZyBtYXBwaW5nIGluIHRyYW5zc3RyLgotCSAqIAotCSAqIEBwYXJhbSBtYXBzdHIgVGhlICJtYXBwaW5nIGZyb20iIHN0cmluZwotCSAqIEBwYXJhbSB0cmFuc3N0ciBUaGUgIm1hcHBpbmcgaW50byIgc3RyaW5nCi0JICogQHJldHVybiBBIG1hcCB3aGljaCBtYXBzIGlucHV0IGNvZGVwb2ludCB0byBvdXRwdXQgY29kZXBvaW50IChvciBudWxsKQotCSAqLwotCXByaXZhdGUgc3RhdGljIE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBidWlsZFJlcGxhY2VtZW50TWFwKFN0cmluZyBtYXBzdHIsIFN0cmluZyB0cmFuc3N0cikgewotCQkvLyBCdWlsZCBtYXBwaW5nIChtYXAgZnJvbSBjb2RlcG9pbnQgLT4gY29kZXBvaW50KQkJCi0JCU1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiByZXBsYWNlbWVudHMgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPihtYXBzdHIubGVuZ3RoKCkgKiA0KTsKLQotCQlDb2RlUG9pbnRJdGVyYXRvciBtYXBJdGVyID0gbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKG1hcHN0cik7Ci0JCUNvZGVQb2ludEl0ZXJhdG9yIHRyYW5zSXRlciA9IG5ldyBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvcih0cmFuc3N0cik7Ci0JCS8vIEl0ZXJhdGUgdGhyb3VnaCBib3RoIG1hcEl0ZXIgYW5kIHRyYW5zSXRlciBhbmQgcHJvZHVjZSB0aGUgbWFwcGluZwotCQlpbnQgbWFwRnJvbSA9IG1hcEl0ZXIuY3VycmVudCgpOwotCQlpbnQgbWFwVG8gPSB0cmFuc0l0ZXIuY3VycmVudCgpOwotCQl3aGlsZSAobWFwRnJvbSAhPSBDb2RlUG9pbnRJdGVyYXRvci5ET05FKSB7Ci0JCQlJbnRlZ2VyIGNvZGVwb2ludEZyb20gPSBJbnRlZ2VyLnZhbHVlT2YobWFwRnJvbSk7Ci0JCQlpZiAoISByZXBsYWNlbWVudHMuY29udGFpbnNLZXkoY29kZXBvaW50RnJvbSkpIHsKLQkJCQkvLyBvbmx5IG92ZXJ3cml0ZSBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHkKLQkJCQlJbnRlZ2VyIHJlcGxhY2VtZW50ID0gbWFwVG8gIT0gQ29kZVBvaW50SXRlcmF0b3IuRE9ORSA/IEludGVnZXIudmFsdWVPZihtYXBUbykgOiBudWxsOwotCQkJCXJlcGxhY2VtZW50cy5wdXQoY29kZXBvaW50RnJvbSwgcmVwbGFjZW1lbnQpOwotCQkJfQotCQkJbWFwRnJvbSA9IG1hcEl0ZXIubmV4dCgpOwotCQkJbWFwVG8gPSB0cmFuc0l0ZXIubmV4dCgpOwkKLQkJfQotCQlyZXR1cm4gcmVwbGFjZW1lbnRzOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRydWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UcnVlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNDY0YTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRydWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB4czpib29sZWFuIHZhbHVlIHRydWUuIEVxdWl2YWxlbnQgdG8geHM6Ym9vbGVhbigiMSIpLgotICovCi1wdWJsaWMgY2xhc3MgRm5UcnVlIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRydWUuCi0JICovCi0JcHVibGljIEZuVHJ1ZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0cnVlIiksIDApOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBmbl90cnVlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFRydWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46dHJ1ZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl90cnVlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAwOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlycy5hZGQobmV3IFhTQm9vbGVhbih0cnVlKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Vbm9yZGVyZWQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Vbm9yZGVyZWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y1OGFjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVW5vcmRlcmVkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgaXRlbXMgb2YgJHNvdXJjZVNlcSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIG9yZGVyLgotICovCi1wdWJsaWMgY2xhc3MgRm5Vbm9yZGVyZWQgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuVW5vcmRlcmVkLgotCSAqLwotCXB1YmxpYyBGblVub3JkZXJlZCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ1bm9yZGVyZWQiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHVub3JkZXJlZChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBVbm9yZGVyZWQgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46dW5vcmRlcmVkIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHVub3JkZXJlZChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAxOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIFhYWCBsYW1lCi0JCUFycmF5TGlzdCB0bXAgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCQl0bXAuYWRkKGkubmV4dCgpKTsKLQotCQlDb2xsZWN0aW9ucy5zaHVmZmxlKHRtcCk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gdG1wLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJCXJzLmFkZCgoQW55VHlwZSkgaS5uZXh0KCkpOwotCi0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVXBwZXJDYXNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVXBwZXJDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZmQ2NTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblVwcGVyQ2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiA8cD4KLSAqIENvbnZlcnNpb24gdG8gdXBwZXItY2FzZSBmdW5jdGlvbi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46dXBwZXItY2FzZSgkYXJnIGFzIHhzOnN0cmluZz8pIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyB0aGUgdmFsdWUgb2YgJGFyZyBhZnRlciB0cmFuc2xhdGluZyBldmVyeSBjaGFyYWN0ZXIgdG8gaXRzCi0gKiB1cHBlci1jYXNlIGNvcnJlc3BvbmRlbnQuIEV2ZXJ5IGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGhhdmUgYW4gdXBwZXItY2FzZQotICogY29ycmVzcG9uZGVudCBpcyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW4gaXRzIG9yaWdpbmFsIGZvcm0uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgdGhlIHZhbHVlIG9mICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgemVyby1sZW5ndGggc3RyaW5nIGlzCi0gKiByZXR1cm5lZC4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuVXBwZXJDYXNlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuVXBwZXJDYXNlLgotCSAqLwotCXB1YmxpYyBGblVwcGVyQ2FzZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ1cHBlci1jYXNlIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyBiZWluZyBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHVwcGVyX2Nhc2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydCBhcmd1bWVudHMgdG8gdXBwZXIgY2FzZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgYXJndW1lbnRzIHRvIHVwcGVyIGNhc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB1cHBlcl9jYXNlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJU3RyaW5nIHN0ciA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHN0ci50b1VwcGVyQ2FzZSgpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhckZyb21EYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhckZyb21EYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YjY3Y2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJGcm9tRGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgcmVwcmVzZW50aW5nIHRoZSB5ZWFyIGluIHRoZSBsb2NhbGl6ZWQgdmFsdWUgb2YgJGFyZy4KLSAqIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUuIElmICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eQotICogc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblllYXJGcm9tRGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblllYXJGcm9tRGF0ZS4KLQkgKi8KLQlwdWJsaWMgRm5ZZWFyRnJvbURhdGUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgieWVhci1mcm9tLWRhdGUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHllYXJfZnJvbV9kYXRlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFllYXItZnJvbS1EYXRlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnllYXItZnJvbS1kYXRlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHllYXJfZnJvbV9kYXRlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEYXRlIGR0ID0gKFhTRGF0ZSkgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdC55ZWFyKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhckZyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJGcm9tRGF0ZVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg3YjAxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhckZyb21EYXRlVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgcmVwcmVzZW50aW5nIHRoZSB5ZWFyIGNvbXBvbmVudCBpbiB0aGUgbG9jYWxpemVkIHZhbHVlCi0gKiBvZiAkYXJnLiBUaGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMKLSAqIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuWWVhckZyb21EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblllYXJGcm9tRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuWWVhckZyb21EYXRlVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ5ZWFyLWZyb20tZGF0ZVRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHllYXJfZnJvbV9kYXRlX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogWWVhci1mcm9tLURhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnllYXItZnJvbS1kYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB5ZWFyX2Zyb21fZGF0ZV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IChYU0RhdGVUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0LnllYXIoKTsKLQotCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGVUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJzRnJvbUR1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhcnNGcm9tRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQwZGZhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhcnNGcm9tRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgZXhwZWN0ZWQgeHM6ZHVyYXRpb24gYXJndW1lbnQgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgeWVhcnMgY29tcG9uZW50IGluIHRoZSBjYW5vbmljYWwKLSAqIGxleGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mICRhcmcuIFRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLiBJZgotICogJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5ZZWFyc0Zyb21EdXJhdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblllYXJzRnJvbUR1cmF0aW9uLgotCSAqLwotCXB1YmxpYyBGblllYXJzRnJvbUR1cmF0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInllYXJzLWZyb20tZHVyYXRpb24iKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHllYXJzX2Zyb21fZHVyYXRpb24oYXJncyk7Ci0JfQotCi0JLyoqCi0JICogWWVhcnMtZnJvbS1EdXJhdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp5ZWFycy1mcm9tLWR1cmF0aW9uIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHllYXJzX2Zyb21fZHVyYXRpb24oQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0R1cmF0aW9uIHltZCA9IChYU0R1cmF0aW9uKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IHltZC55ZWFyKCk7Ci0JCWlmICh5bWQubmVnYXRpdmUoKSkKLQkJCXJlcyAqPSAtMTsKLQotCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRHVyYXRpb24oKSwKLQkJCQkJU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWmVyb09yT25lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWmVyb09yT25lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMTEwOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gblplcm9Pck9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zICRhcmcgaWYgaXQgY29udGFpbnMgemVybyBvciBvbmUgaXRlbXMuIE90aGVyd2lzZSwgcmFpc2VzIGFuIGVycm9yCi0gKiBbZXJyOkZPUkcwMDAzXS4gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mICRhcmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblplcm9Pck9uZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5aZXJvT3JPbmUuCi0JICovCi0JcHVibGljIEZuWmVyb09yT25lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInplcm8tb3Itb25lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB6ZXJvX29yX29uZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBaZXJvLW9yLU9uZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp6ZXJvLW9yLW9uZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB6ZXJvX29yX29uZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5zaXplKCkgPiAxKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLm1vcmVfb25lX2l0ZW0obnVsbCk7Ci0KLQkJcmV0dXJuIGFyZzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzQ29udmVydE9wZXJhbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNDb252ZXJ0T3BlcmFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTYxMGEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNDb252ZXJ0T3BlcmFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBGdW5jdGlvbiB0byBjb252ZXJ0IGEgc2VxdWVuY2Ugb2YgaXRlbXMgdG8gYSBzZXF1ZW5jZSBvZiBhdG9taWMgdmFsdWVzLgotICovCi1wdWJsaWMgY2xhc3MgRnNDb252ZXJ0T3BlcmFuZCBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCXB1YmxpYyBGc0NvbnZlcnRPcGVyYW5kKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImNvbnZlcnQtb3BlcmFuZCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY29udmVydF9vcGVyYW5kKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQtT3BlcmFuZCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmczogb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY29udmVydF9vcGVyYW5kKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAyOwotCi0JCUl0ZXJhdG9yIGl0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYWN0dWFsID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgZXhwZWN0ZWQgPSAoUmVzdWx0U2VxdWVuY2UpIGl0ZXIubmV4dCgpOwotCi0JCWlmIChleHBlY3RlZC5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQW55VHlwZSBhdCA9IGV4cGVjdGVkLmZpcnN0KCk7Ci0KLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQW55QXRvbWljVHlwZSBleHBfYWF0ID0gKEFueUF0b21pY1R5cGUpIGF0OwotCi0JCVJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gMQotCQlpZiAoYWN0dWFsLmVtcHR5KCkpCi0JCQlyZXR1cm4gcmVzdWx0OwotCi0JCS8vIGNvbnZlcnQgc2VxdWVuY2UKLQkJZm9yIChJdGVyYXRvciBpID0gYWN0dWFsLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBpdGVtID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQkvLyAyCi0JCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJCS8vIGEKLQkJCQlpZiAoZXhwX2FhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykKLQkJCQkJcmVzdWx0LmFkZChuZXcgWFNTdHJpbmcoaXRlbS5zdHJpbmdfdmFsdWUoKSkpOwotCQkJCS8vIGIKLQkJCQllbHNlIGlmIChleHBfYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpCi0JCQkJCXJlc3VsdC5hZGQobmV3IFhTRG91YmxlKGl0ZW0uc3RyaW5nX3ZhbHVlKCkpKTsKLQkJCQkvLyBjCi0JCQkJZWxzZSB7Ci0JCQkJCWFzc2VydCBleHBfYWF0IGluc3RhbmNlb2YgQ3RyVHlwZTsKLQotCQkJCQlDdHJUeXBlIGNvbnMgPSAoQ3RyVHlwZSkgZXhwX2FhdDsKLQotCQkJCQlSZXN1bHRTZXF1ZW5jZSB0bXAgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkKLQkJCQkJCQkuY3JlYXRlX25ldyhuZXcgWFNTdHJpbmcoaXRlbS5zdHJpbmdfdmFsdWUoKSkpOwotCi0JCQkJCVJlc3VsdFNlcXVlbmNlIGNvbnZlcnRlZCA9IGNvbnMuY29uc3RydWN0b3IodG1wKTsKLQkJCQkJcmVzdWx0LmNvbmNhdChjb252ZXJ0ZWQpOwotCi0JCQkJCXRtcC5yZWxlYXNlKCk7Ci0JCQkJfQotCQkJfQotCQkJLy8gNAotCQkJZWxzZQotCQkJCXJlc3VsdC5hZGQoaXRlbSk7Ci0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0Rpdi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0Rpdi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGU2OWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNEaXYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgdGhlIERpdmlzaW9uIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNEaXYgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzRGl2LgotCSAqLwotCXB1YmxpYyBGc0RpdigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkaXYiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19kaXYoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogRGl2IG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZzOmRpdiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19kaXYoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzUGx1cy5kb19tYXRoX29wKGFyZ3MsIE1hdGhEaXYuY2xhc3MsICJkaXYiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzRXEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNFcS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDcxOTljLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNFcS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzYxMzQgLSBpbXByb3ZlbWVudHMgdG8gc2NoZW1hIGF3YXJlIHByaW1pdGl2ZSB0eXBlIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZS9lbGVtZW50IG5vZGVzIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBjb21wYXJpc29uIG9uIHNlcXVlbmNlIHJhbmdlIHZhbHVlcy4KLSAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjgzMjE0IC0gZml4IGVxIGZvciB1bnR5cGVkIGF0b21pYyB2YWx1ZXMKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgdGhlIEVxdWFsaXR5IGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNFcSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNFcS4KLQkgKi8KLQlwdWJsaWMgRnNFcSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJlcSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX2VxX3ZhbHVlKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0cyBhcmd1bWVudHMgdG8gdmFsdWVzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBjb252ZXJzaW9uLgotCSAqLwotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gdmFsdWVfY29udmVydF9hcmdzKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoYXJncy5zaXplKCkpOwotCi0JCS8vIGF0b21pemUgYXJndW1lbnRzCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZ3MuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgaS5uZXh0KCk7Ci0KLQkJCS8vRm5EYXRhLmZhc3RfYXRvbWl6ZShycyk7Ci0JCQlycyA9IEZuRGF0YS5hdG9taXplKHJzKTsKLQotCQkJaWYgKHJzLmVtcHR5KCkpCi0JCQkJcmV0dXJuIG5ldyBBcnJheUxpc3QoKTsKLQotCQkJaWYgKHJzLnNpemUoKSA+IDEpCi0JCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQotCQkJQW55VHlwZSBhcmcgPSBycy5maXJzdCgpOwotCi0JCQlpZiAoYXJnIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKQotCQkJCWFyZyA9IG5ldyBYU1N0cmluZyhhcmcuc3RyaW5nX3ZhbHVlKCkpOwotCi0JCQlycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQlycy5hZGQoYXJnKTsKLQkJCXJlc3VsdC5hZGQocnMpOwotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJzaW9uIG9wZXJhdGlvbiBmb3IgdGhlIHZhbHVlcyBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSBjb252ZXJ0IHZhbHVlIG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgY29udmVyc2lvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2VxX3ZhbHVlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRvX2NtcF92YWx1ZV9vcChhcmdzLCBDbXBFcS5jbGFzcywgImVxIiwgZHluYW1pY0NvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIEEgZmFzdCBFcXVhbGl0eSBvcGVyYXRpb24sIG5vIGNvbnZlcnNpb24gZm9yIHRoZSBpbnB1dHMgcGVyZm9ybWVkLgotCSAqIAotCSAqIEBwYXJhbSBvbmUKLQkgKiAgICAgICAgICAgIGlucHV0MSBvZiBhbnkgdHlwZS4KLQkgKiBAcGFyYW0gdHdvCi0JICogICAgICAgICAgICBpbnB1dDIgb2YgYW55IHR5cGUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEVxdWFsaXR5IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZnNfZXFfZmFzdChBbnlUeXBlIG9uZSwgQW55VHlwZSB0d28sIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJb25lID0gRm5EYXRhLmF0b21pemUob25lKTsKLQkJdHdvID0gRm5EYXRhLmF0b21pemUodHdvKTsKLQotCQlpZiAob25lIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKQotCQkJb25lID0gbmV3IFhTU3RyaW5nKG9uZS5zdHJpbmdfdmFsdWUoKSk7Ci0KLQkJaWYgKHR3byBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykKLQkJCXR3byA9IG5ldyBYU1N0cmluZyh0d28uc3RyaW5nX3ZhbHVlKCkpOwotCi0JCWlmICghKG9uZSBpbnN0YW5jZW9mIENtcEVxKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQ21wRXEgY21wb25lID0gKENtcEVxKSBvbmU7Ci0KLQkJcmV0dXJuIGNtcG9uZS5lcSh0d28sIGR5bmFtaWNDb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBNYWtpbmcgc3VyZSB0aGF0IHRoZSB0eXBlcyBhcmUgdGhlIHNhbWUgYmVmb3JlIGNvbXBhcmluZyB0aGUgaW5wdXRzLgotCSAqIAotCSAqIEBwYXJhbSBhCi0JICogICAgICAgICAgICBpbnB1dDEgb2YgYW55IHR5cGUuCi0JICogQHBhcmFtIGIKLQkgKiAgICAgICAgICAgIGlucHV0MiBvZiBhbnkgdHlwZS4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgICAgRHluYW1pYyBDb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEVxdWFsaXR5IG9wZXJhdGlvbi4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGRvX2dlbmVyYWxfcGFpcihBbnlUeXBlIGEsIEFueVR5cGUgYiwKLQkJCU1ldGhvZCBjb21wYXJhdG9yLCBEeW5hbWljQ29udGV4dCBkYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJLy8gc2VjdGlvbiAzLjUuMgotCi0JCS8vIHJ1bGUgYQotCQkvLyBpZiBvbmUgaXMgdW50eXBlZCBhbmQgb3RoZXIgaXMgbnVtZXJpYywgY2FzdCB1bnR5cGVkIHRvCi0JCS8vIGRvdWJsZQotCQlpZiAoKGEgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMgJiYgYiBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKQotCQkJCXx8IChiIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljICYmIGEgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkpIHsKLQkJCWlmIChhIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKQotCQkJCWEgPSBuZXcgWFNEb3VibGUoYS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQllbHNlCi0JCQkJYiA9IG5ldyBYU0RvdWJsZShiLnN0cmluZ192YWx1ZSgpKTsKLQotCQl9Ci0KLQkJLy8gcnVsZSBiCi0JCS8vIGlmIG9uZSBpcyB1bnR5cGVkIGFuZCBvdGhlciBpcyBzdHJpbmcgb3IgdW50eXBlZCwgdGhlbiBjYXN0Ci0JCS8vIHVudHlwZWQgdG8gc3RyaW5nCi0JCWVsc2UgaWYgKChhIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljCi0JCQkJJiYgKGIgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBiIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB8fCAoYiBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyAmJiAoYSBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGEgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpKSkpIHsKLQotCQkJaWYgKGEgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpCi0JCQkJYSA9IG5ldyBYU1N0cmluZyhhLnN0cmluZ192YWx1ZSgpKTsKLQkJCWlmIChiIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKQotCQkJCWIgPSBuZXcgWFNTdHJpbmcoYi5zdHJpbmdfdmFsdWUoKSk7Ci0JCX0KLQotCQkvLyBydWxlIGMKLQkJLy8gaWYgb25lIGlzIHVudHlwZWQgYW5kIG90aGVyIGlzIG5vdCBzdHJpbmcsdW50eXBlZCxudW1lcmljCi0JCS8vIGNhc3QgdW50eXBlZCB0byBkeW5hbWljIHR5cGUgb2Ygb3RoZXIKLQotCQkvLyBYWFg/Ci0JCWVsc2UgaWYgKGEgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIGNvbnZlcnRlZCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGEpOwotCQkJYXNzZXJ0IGNvbnZlcnRlZC5zaXplKCkgPT0gMTsKLQkJCWEgPSBjb252ZXJ0ZWQuZmlyc3QoKTsKLQkJfSBlbHNlIGlmIChiIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBjb252ZXJ0ZWQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhiKTsKLQkJCWFzc2VydCBjb252ZXJ0ZWQuc2l6ZSgpID09IDE7Ci0JCQliID0gY29udmVydGVkLmZpcnN0KCk7Ci0JCX0KLQotCQkvLyBydWxlIGQKLQkJLy8gaWYgdmFsdWUgY29tcGFyaXNvbiBpcyB0cnVlLCByZXR1cm4gdHJ1ZS4KLQotCQlSZXN1bHRTZXF1ZW5jZSBvbmUgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYik7Ci0KLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChvbmUpOwotCQlhcmdzLmFkZCh0d28pOwotCi0JCU9iamVjdCBtYXJnc1tdID0geyBhcmdzLCBkYyB9OwotCi0JCVJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXN1bHQgPSAoUmVzdWx0U2VxdWVuY2UpIGNvbXBhcmF0b3IuaW52b2tlKG51bGwsIG1hcmdzKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlcnIpIHsKLQkJCWFzc2VydCBmYWxzZTsKLQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlcnIpIHsKLQkJCVRocm93YWJsZSBleCA9IGVyci5nZXRUYXJnZXRFeGNlcHRpb24oKTsKLQotCQkJaWYgKGV4IGluc3RhbmNlb2YgRHluYW1pY0Vycm9yKQotCQkJCXRocm93IChEeW5hbWljRXJyb3IpIGV4OwotCi0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJCVN5c3RlbS5leGl0KDEpOwotCQl9Ci0KLQkJaWYgKCgoWFNCb29sZWFuKSByZXN1bHQuZmlyc3QoKSkudmFsdWUoKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBBIGdlbmVyYWwgZXF1YWxpdHkgZnVuY3Rpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgIER5bmFtaWMgY29udGV4dCAKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZ2VuZXJhbCBlcXVhbGl0eSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19lcV9nZW5lcmFsKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRvX2NtcF9nZW5lcmFsX29wKGFyZ3MsIEZzRXEuY2xhc3MsICJmc19lcV92YWx1ZSIsIGRjKTsKLQl9Ci0KLQkvLyB2b29kb28gMwotCS8qKgotCSAqIEFjdHVhbCBlcXVhbGl0eSBvcGVyYXRpb24gZm9yIGZzX2VxX2dlbmVyYWwuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgdHlwZSBvZiB0aGUgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBtbmFtZQotCSAqICAgICAgICAgICAgTWV0aG9kIG5hbWUgZm9yIHRlbXBsYXRlIHNpbXVsYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkb19jbXBfZ2VuZXJhbF9vcChDb2xsZWN0aW9uIGFyZ3MsIENsYXNzIHR5cGUsCi0JCQlTdHJpbmcgbW5hbWUsIER5bmFtaWNDb250ZXh0IGRjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBkbyB0aGUgdm9vZG9vCi0JCU1ldGhvZCBjb21wYXJhdG9yID0gbnVsbDsKLQotCQl0cnkgewotCQkJQ2xhc3MgbWFyZ3NkZWZbXSA9IHsgQ29sbGVjdGlvbi5jbGFzcywgRHluYW1pY0NvbnRleHQuY2xhc3MgfTsKLQotCQkJY29tcGFyYXRvciA9IHR5cGUuZ2V0TWV0aG9kKG1uYW1lLCBtYXJnc2RlZik7Ci0KLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGVycikgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbr8ndCBmaW5kIG1ldGhvZCA6ICIgKyBtbmFtZSwgZXJyKTsKLQkJfQotCi0JCS8vIHNhbml0eSBjaGVjayBhcmdzIGFuZCBnZXQgdGhlbQotCQlpZiAoYXJncy5zaXplKCkgIT0gMikKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJSXRlcmF0b3IgYXJnaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBvbmUgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSB0d28gPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCi0JCS8vIFhYWCA/Ci0JCWlmIChvbmUuZW1wdHkoKSB8fCB0d28uZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGZhbHNlKSk7Ci0KLQkJLy8gYXRvbWl6ZQotCQlvbmUgPSBGbkRhdGEuYXRvbWl6ZShvbmUpOwotCQl0d28gPSBGbkRhdGEuYXRvbWl6ZSh0d28pOwotCi0JCS8vIHdlIGdvdHRhIGZpbmQgYSBwYWlyIHRoYXQgc2F0aXNmaWVkIHRoZSBjb25kaXRpb24KLQkJZm9yIChJdGVyYXRvciBpID0gb25lLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBhID0gKEFueVR5cGUpIGkubmV4dCgpOwotCQkJZm9yIChJdGVyYXRvciBqID0gdHdvLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykgewotCQkJCUFueVR5cGUgYiA9IChBbnlUeXBlKSBqLm5leHQoKTsKLQotCQkJCWlmIChkb19nZW5lcmFsX3BhaXIoYSwgYiwgY29tcGFyYXRvciwgZGMpKQotCQkJCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ci0JCQkJCQkJLmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbih0cnVlKSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCX0KLQotCS8vIHZvb2RvbyAyCi0JLyoqCi0JICogQWN0dWFsIGVxdWFsaXR5IG9wZXJhdGlvbiBmb3IgZnNfZXFfdmFsdWUuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgdHlwZSBvZiB0aGUgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBtbmFtZQotCSAqICAgICAgICAgICAgTWV0aG9kIG5hbWUgZm9yIHRlbXBsYXRlIHNpbXVsYXRpb24uCi0JICogQHBhcmFtIGR5bmFtaWNDb250ZXh0IAotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkb19jbXBfdmFsdWVfb3AoQ29sbGVjdGlvbiBhcmdzLCBDbGFzcyB0eXBlLAotCQkJU3RyaW5nIG1uYW1lLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJLy8gc2FuaXR5IGNoZWNrIGFyZ3MgKyBjb252ZXJ0IGVtCi0JCWlmIChhcmdzLnNpemUoKSAhPSAyKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gdmFsdWVfY29udmVydF9hcmdzKGFyZ3MpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGNhcmdzLnNpemUoKSA9PSAwKQotCQkJcmV0dXJuIHJlc3VsdDsKLQotCQkvLyBtYWtlIHN1cmUgYXJ1Z21lbnRzIGFyZSBjb21wYXJhYmxlIGJ5IGVxdWFsaXR5Ci0JCUl0ZXJhdG9yIGFyZ2kgPSBjYXJncy5pdGVyYXRvcigpOwotCQlBbnlUeXBlIGFyZyA9ICgoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpKS5maXJzdCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQotCQlpZiAoYXJnMi5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJaWYgKCEodHlwZS5pc0luc3RhbmNlKGFyZykpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQl0cnkgewotCQkJQ2xhc3MgbWFyZ3NkZWZbXSA9IHsgQW55VHlwZS5jbGFzcywgRHluYW1pY0NvbnRleHQuY2xhc3MgfTsKLQkJCU1ldGhvZCBtZXRob2QgPSBudWxsOwotCi0JCQltZXRob2QgPSB0eXBlLmdldE1ldGhvZChtbmFtZSwgbWFyZ3NkZWYpOwotCi0JCQlPYmplY3QgbWFyZ3NbXSA9IHsgYXJnMi5maXJzdCgpLCBkeW5hbWljQ29udGV4dCB9OwotCQkJQm9vbGVhbiBjbXByZXMgPSAoQm9vbGVhbikgbWV0aG9kLmludm9rZShhcmcsIG1hcmdzKTsKLQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4oY21wcmVzCi0JCQkJCS5ib29sZWFuVmFsdWUoKSkpOwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXJyKSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiY2Fubm90IGNvbXBhcmUgdXNpbmcgbWV0aG9kICIgKyBtbmFtZSwgZXJyKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlcnIpIHsKLQkJCWFzc2VydCBmYWxzZTsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYW5ub3QgY29tcGFyZSB1c2luZyBtZXRob2QgIiArIG1uYW1lLCBlcnIpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGVycikgewotCQkJVGhyb3dhYmxlIGV4ID0gZXJyLmdldFRhcmdldEV4Y2VwdGlvbigpOwotCi0JCQlpZiAoZXggaW5zdGFuY2VvZiBEeW5hbWljRXJyb3IpCi0JCQkJdGhyb3cgKER5bmFtaWNFcnJvcikgZXg7Ci0KLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYW5ub3QgY29tcGFyZSB1c2luZyBtZXRob2QgIiArIG1uYW1lLCBleCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzR2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNHZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTFlNGUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNHZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgdGhlIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzR2UgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzR2UuCi0JICovCi0JcHVibGljIEZzR2UoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZ2UiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19nZV92YWx1ZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdGlvbiBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gZGMgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19nZV92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGdyZWF0ZXIgPSBGc0d0LmZzX2d0X3ZhbHVlKGFyZ3MsIGRjKTsKLQotCQlpZiAoKChYU0Jvb2xlYW4pIGdyZWF0ZXIuZmlyc3QoKSkudmFsdWUoKSkKLQkJCXJldHVybiBncmVhdGVyOwotCi0JCVJlc3VsdFNlcXVlbmNlIGVxdWFsID0gRnNFcS5mc19lcV92YWx1ZShhcmdzLCBkYyk7Ci0KLQkJaWYgKCgoWFNCb29sZWFuKSBlcXVhbC5maXJzdCgpKS52YWx1ZSgpKQotCQkJcmV0dXJuIGVxdWFsOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGZhbHNlKSk7Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGRjIAotCSAqICAgICAgICAgICAgIFRoZSBkeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2dlX2dlbmVyYWwoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNFcS5kb19jbXBfZ2VuZXJhbF9vcChhcmdzLCBGc0dlLmNsYXNzLCAiZnNfZ2VfdmFsdWUiLCBkYyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0d0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzR3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4MzcyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzR3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENsYXNzIGZvciB0aGUgR3JlYXRlciB0aGFuIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNHdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNHdC4KLQkgKi8KLQlwdWJsaWMgRnNHdCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJndCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX2d0X3ZhbHVlKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBPcGVyYXRpb24gb24gdGhlIHZhbHVlcyBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGR5bmFtaWMKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGNvbnRleGV0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19ndF92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGR5bmFtaWMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzRXEuZG9fY21wX3ZhbHVlX29wKGFyZ3MsIENtcEd0LmNsYXNzLCAiZ3QiLCBkeW5hbWljKTsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGRjIAotCSAqICAgICAgICAgICAgIFRoZSBkeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2d0X2dlbmVyYWwoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNFcS5kb19jbXBfZ2VuZXJhbF9vcChhcmdzLCBGc0d0LmNsYXNzLCAiZnNfZ3RfdmFsdWUiLCBkYyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzSURpdi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0lEaXYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjExMWRjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzSURpdi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENsYXNzIGZvciBJbnRlcmdlciBkaXZpc2lvbiBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzSURpdiBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNJRGl2LgotCSAqLwotCXB1YmxpYyBGc0lEaXYoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaWRpdiIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX2lkaXYoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogSURpdiBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfaWRpdihDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNQbHVzLmRvX21hdGhfb3AoYXJncywgTWF0aElEaXYuY2xhc3MsICJpZGl2Iik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0xlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhYjRjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTGVzcyB0aGFuIG9yIGVxdWFsIHRvIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNMZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNMZS4KLQkgKi8KLQlwdWJsaWMgRnNMZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJsZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX2xlX3ZhbHVlKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBPcGVyYXRpb24gb24gdGhlIHZhbHVlcyBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIAotICAgICAqICAgICAgICAgRHluYW1pY0NvbnRleHQgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19sZV92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGxlc3MgPSBGc0x0LmZzX2x0X3ZhbHVlKGFyZ3MsIGRjKTsKLQotCQlpZiAoKChYU0Jvb2xlYW4pIGxlc3MuZmlyc3QoKSkudmFsdWUoKSkKLQkJCXJldHVybiBsZXNzOwotCi0JCVJlc3VsdFNlcXVlbmNlIGVxdWFsID0gRnNFcS5mc19lcV92YWx1ZShhcmdzLCBkYyk7Ci0KLQkJaWYgKCgoWFNCb29sZWFuKSBlcXVhbC5maXJzdCgpKS52YWx1ZSgpKQotCQkJcmV0dXJuIGVxdWFsOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGZhbHNlKSk7Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBkYyAKLQkgKiAgICAgICAgICAgICBUaGUgZHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19sZV9nZW5lcmFsKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzRXEuZG9fY21wX2dlbmVyYWxfb3AoYXJncywgRnNMZS5jbGFzcywgImZzX2xlX3ZhbHVlIiwgZGMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNMdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0x0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNDgyZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0x0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENsYXNzIGZvciBMZXNzIHRoYW4gZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc0x0IGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGc0x0LgotCSAqLwotCXB1YmxpYyBGc0x0KCkgewotCQlzdXBlcihuZXcgUU5hbWUoImx0IiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfbHRfdmFsdWUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE9wZXJhdGlvbiBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gY29udGV4dCAKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2x0X3ZhbHVlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNFcS5kb19jbXBfdmFsdWVfb3AoYXJncywgQ21wTHQuY2xhc3MsICJsdCIsIGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gZGMgCi0JICogICAgICAgICAgICAgVGhlIGR5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfbHRfZ2VuZXJhbChDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBGc0VxLmRvX2NtcF9nZW5lcmFsX29wKGFyZ3MsIEZzTHQuY2xhc3MsICJmc19sdF92YWx1ZSIsIGRjKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTWludXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNNaW51cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjMwOWI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNNaW51cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENsYXNzIGZvciBNaW51cyBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzTWludXMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzTWludXMuCi0JICovCi0JcHVibGljIEZzTWludXMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibWludXMiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19taW51cyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19taW51cyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNQbHVzLmRvX21hdGhfb3AoYXJncywgTWF0aE1pbnVzLmNsYXNzLCAibWludXMiKTsKLQl9Ci0KLQkvKioKLQkgKiBVbmFyeSBvcGVyYXRpb24gb24gdGhlIHZhbHVlcyBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19taW51c191bmFyeShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gbWFrZSBzdXJlIHdlIGdvdCBvbmx5IG9uZSBhcmcKLQkJaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJLy8gbWFrZSBzdXJlIHdlIGdvdCBvbmx5IG9uZSBudW1lcmljIGF0b20KLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCU51bWVyaWNUeXBlIG50ID0gKE51bWVyaWNUeXBlKSBhdDsKLQotCQlyZXR1cm4gbnQudW5hcnlfbWludXMoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTW9kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTW9kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYzM2MWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc01vZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENsYXNzIGZvciBNb2R1bGFyIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNNb2QgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzTW9kLgotCSAqLwotCXB1YmxpYyBGc01vZCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtb2QiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19tb2QoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfbW9kKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBGc1BsdXMuZG9fbWF0aF9vcChhcmdzLCBNYXRoTW9kLmNsYXNzLCAibW9kIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc05lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxODM3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE5vdCBlcXVhbCBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzTmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzTmUuCi0JICovCi0JcHVibGljIEZzTmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibmUiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19uZV92YWx1ZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogT3BlcmF0aW9uIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBjb250ZXh0IAotCSAqICAgICAgICAgICAgIFRoZSBkeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX25lX3ZhbHVlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRm5Ob3QuZm5fbm90KEZzRXEuZnNfZXFfdmFsdWUoYXJncywgY29udGV4dCkpOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gZGMgCi0JICogICAgICAgICAgICAgVGhlIGR5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfbmVfZ2VuZXJhbChDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBGc0VxLmRvX2NtcF9nZW5lcmFsX29wKGFyZ3MsIEZzTmUuY2xhc3MsICJmc19uZV92YWx1ZSIsIGRjKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNQbHVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzUGx1cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGNjNjBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNQbHVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBCdWcgMjg2MDYyIC0gQWRkIHR5cGUgcHJvbW90aW9uIGZvciBudW1lcmljIG9wZXJhdG9ycyAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgUGx1cyBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzUGx1cyBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNQbHVzLgotCSAqLwotCXB1YmxpYyBGc1BsdXMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicGx1cyIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX3BsdXMoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydCBhbmQgcHJvbW90ZSBhcmd1bWVudHMgZm9yIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBjb252ZXJzaW9uLgotCSAqLwotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gY29udmVydF9hcmdzKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCS8vIEtlZXAgdHJhY2sgb2YgbnVtZXJpYyB0eXBlcyBmb3IgcHJvbW90aW9uCi0JCWJvb2xlYW4gaGFzX2Zsb2F0ID0gZmFsc2U7Ci0JCWJvb2xlYW4gaGFzX2RvdWJsZSA9IGZhbHNlOwotCQkKLQkJLy8gYXRvbWl6ZSBhcmd1bWVudHMKLQkJZm9yIChJdGVyYXRvciBpID0gYXJncy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCVJlc3VsdFNlcXVlbmNlIHJzID0gRm5EYXRhLmF0b21pemUoKFJlc3VsdFNlcXVlbmNlKSBpLm5leHQoKSk7Ci0KLQkJCWlmIChycy5lbXB0eSgpKQotCQkJCXJldHVybiBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCWlmIChycy5zaXplKCkgPiAxKQotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJCUFueVR5cGUgYXJnID0gcnMuZmlyc3QoKTsKLQotCQkJaWYgKGFyZyBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJCWFyZyA9IG5ldyBYU0RvdWJsZShhcmcuc3RyaW5nX3ZhbHVlKCkpOwotCQkJfQotCi0JCQlycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQlycy5hZGQoYXJnKTsKLQkJCWlmIChhcmcgaW5zdGFuY2VvZiBYU0RvdWJsZSkgaGFzX2RvdWJsZSA9IHRydWU7Ci0JCQlpZiAoYXJnIGluc3RhbmNlb2YgWFNGbG9hdCkgaGFzX2Zsb2F0ID0gdHJ1ZTsKLQkJCXJlc3VsdC5hZGQocnMpOwotCQl9Ci0KLQkJaWYgKGhhc19kb3VibGUpIGhhc19mbG9hdCA9IGZhbHNlOwotCQkKLQkJaWYgKGhhc19kb3VibGUgfHwgaGFzX2Zsb2F0KSB7Ci0JCQkvLyBwcm9tb3RlIGFyZ3VtZW50cwotCQkJZm9yIChJdGVyYXRvciBpID0gcmVzdWx0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBpLm5leHQoKTsKLQkJCQkJCQkJCi0JCQkJQW55VHlwZSBhcmcgPSBycy5maXJzdCgpOwotCQkJCQotCQkJCWlmIChoYXNfZG91YmxlICYmIChhcmcgaW5zdGFuY2VvZiBYU0Zsb2F0KSkgewotCQkJCQlhcmcgPSBuZXcgWFNEb3VibGUoKChYU0Zsb2F0KWFyZykuZmxvYXRfdmFsdWUoKSk7Ci0JCQkJfSBlbHNlIGlmIChoYXNfZG91YmxlICYmIChhcmcgaW5zdGFuY2VvZiBYU0RlY2ltYWwpKSB7Ci0JCQkJCWFyZyA9IG5ldyBYU0RvdWJsZSgoKFhTRGVjaW1hbClhcmcpLmdldFZhbHVlKCkuZG91YmxlVmFsdWUoKSk7Ci0JCQkJfSBlbHNlIGlmIChoYXNfZmxvYXQgJiYgKGFyZyBpbnN0YW5jZW9mIFhTRGVjaW1hbCkpIHsKLQkJCQkJYXJnID0gbmV3IFhTRmxvYXQoKChYU0RlY2ltYWwpYXJnKS5nZXRWYWx1ZSgpLmZsb2F0VmFsdWUoKSk7Ci0JCQkJfQotCi0JCQkJaWYgKHJzLmZpcnN0KCkgIT0gYXJnKSB7Ci0JCQkJCS8vIFJlcGxhY2UgYXJnCi0JCQkJCXJzLmNsZWFyKCk7Ci0JCQkJCXJzLmFkZChhcmcpOwotCQkJCX0KLQkJCX0KLQkJCQotCQl9Ci0JCQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCi0JLyoqCi0JICogR2VuZXJhbCBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfcGx1cyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZG9fbWF0aF9vcChhcmdzLCBNYXRoUGx1cy5jbGFzcywgInBsdXMiKTsKLQl9Ci0KLQkvKioKLQkgKiBVbmFyeSBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfcGx1c191bmFyeShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBtYWtlIHN1cmUgd2UgZ290IG9ubHkgb25lIGFyZwotCQlpZiAoYXJncy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQkvLyBtYWtlIHN1cmUgd2UgZ290IG9ubHkgb25lIG51bWVyaWMgYXRvbQotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJQW55VHlwZSBhdCA9IGFyZy5maXJzdCgpOwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJLy8gbm8tb3AKLQkJcmV0dXJuIGFyZzsKLQl9Ci0KLQkvLyB2b29kb28KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgdHlwZSBvZiBhcmd1bWVudHMuCi0JICogQHBhcmFtIG1uYW1lCi0JICogICAgICAgICAgICBNZXRob2QgbmFtZSBmb3IgdGVtcGxhdGUgc2ltdWxhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZG9fbWF0aF9vcChDb2xsZWN0aW9uIGFyZ3MsIENsYXNzIHR5cGUsCi0JCQlTdHJpbmcgbW5hbWUpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIHNhbml0eSBjaGVjayBhcmdzICsgY29udmVydCBlbQotCQlpZiAoYXJncy5zaXplKCkgIT0gMikKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IGNvbnZlcnRfYXJncyhhcmdzKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChjYXJncy5zaXplKCkgPT0gMCkKLQkJCXJldHVybiByZXN1bHQ7Ci0KLQkJLy8gbWFrZSBzdXJlIGFydWdtZW50cyBhcmUgZ29vZCBbYXQgbGVhc3QgdGhlIGZpcnN0IG9uZV0KLQkJSXRlcmF0b3IgYXJnaSA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCUFueVR5cGUgYXJnID0gKChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCkpLmZpcnN0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwotCi0JCWlmICghKHR5cGUuaXNJbnN0YW5jZShhcmcpKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJLy8gaGVyZSBpcyBkYSBvd25hZ2UKLQkJdHJ5IHsKLQkJCUNsYXNzIG1hcmdzZGVmW10gPSB7IFJlc3VsdFNlcXVlbmNlLmNsYXNzIH07Ci0JCQlNZXRob2QgbWV0aG9kID0gbnVsbDsKLQotCQkJbWV0aG9kID0gdHlwZS5nZXRNZXRob2QobW5hbWUsIG1hcmdzZGVmKTsKLQotCQkJT2JqZWN0IG1hcmdzW10gPSB7IGFyZzIgfTsKLQkJCXJldHVybiAoUmVzdWx0U2VxdWVuY2UpIG1ldGhvZC5pbnZva2UoYXJnLCBtYXJncyk7Ci0KLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGVycikgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJOb1N1Y2hNZXRob2RFeGNlcHRpb246ICIgKyBlcnIuZ2V0TWVzc2FnZSgpKTsKLQkJCWFzc2VydCBmYWxzZTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlcnIpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbjogIiArIGVyci5nZXRNZXNzYWdlKCkpOwotCQkJYXNzZXJ0IGZhbHNlOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGVycikgewotCQkJVGhyb3dhYmxlIGV4ID0gZXJyLmdldFRhcmdldEV4Y2VwdGlvbigpOwotCi0JCQlpZiAoZXggaW5zdGFuY2VvZiBEeW5hbWljRXJyb3IpIHsKLQkJCQl0aHJvdyAoRHluYW1pY0Vycm9yKSBleDsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCVN5c3RlbS5leGl0KDEpOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOyAvLyB1bnJlYWNoIQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNUaW1lcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc1RpbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMmVlZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc1RpbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE11bHRpcGxpY2F0aW9uIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNUaW1lcyBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNUaW1lcy4KLQkgKi8KLQlwdWJsaWMgRnNUaW1lcygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0aW1lcyIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX3RpbWVzKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX3RpbWVzKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBGc1BsdXMuZG9fbWF0aF9vcChhcmdzLCBNYXRoVGltZXMuY2xhc3MsICJ0aW1lcyIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnVuY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnVuY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJmYjE0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Z1bmN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3MzcxOSAtIFN0cmluZyBMZW5ndGggZG9lcyBub3Qgd29yayB3aXRoIEVsZW1lbnQgYXJnLgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3OTUgLSBpbXByb3ZlbWVudHMgdG8gZnVuY3Rpb24sIHN1YnN0cmluZyAoaW1wbGVtZW50ZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyB0eXBlIHByb21vdGlvbikuIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgxMTU5IC0gaW1wbGVtZW50IHhzOmFueVVyaSAtPiB4czpzdHJpbmcgcHJvbW90aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgxOTM4IC0gdW5kZWZpbmVkIGNvbnRleHQgc2hvdWxkIHJhaXNlIGVycm9yCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIGZ1bmN0aW9ucy4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEZ1bmN0aW9uIHsKLQotCXByb3RlY3RlZCBRTmFtZSBfbmFtZTsKLQkvKioKLQkgKiBpZiBuZWdhdGl2ZSwgbmVlZCB0byBoYXZlICJhdCBsZWFzdCIKLQkgKi8KLQlwcm90ZWN0ZWQgaW50IF9taW5fYXJpdHk7IAotCQotCS8qKgotCSAqIElmICJhdCBsZWFzdCIsIHRoaXMgc3BlY2ksIHVubGltaXRlZCBpZiAtMQotCSAqLwotCXByb3RlY3RlZCBpbnQgX21heF9hcml0eTsKLQkKLQlwcm90ZWN0ZWQgRnVuY3Rpb25MaWJyYXJ5IF9mbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGdW5jdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICogQHBhcmFtIGFyaXR5Ci0JICogICAgICAgICAgICB0aGUgYXJpdHkgb2YgYSBzcGVjaWZpYyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgRnVuY3Rpb24oUU5hbWUgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCV9uYW1lID0gbmFtZTsKLQkJaWYgKGFyaXR5IDwgMCkgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIldlIHdhbnQgdG8gYXZvaWQgdGhpcyEiKTsKLQkJfQotCQlfbWluX2FyaXR5ID0gYXJpdHk7Ci0JCV9tYXhfYXJpdHkgPSBhcml0eTsKLQkJX2ZsID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnVuY3Rpb24uCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgdGhlIGFyaXR5IG9mIGEgc3BlY2lmaWMgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIEZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBtaW5fYXJpdHksIGludCBtYXhfYXJpdHkpIHsKLQkJX25hbWUgPSBuYW1lOwotCQlpZiAobWluX2FyaXR5IDwgMCB8fCBtYXhfYXJpdHkgPCAwIHx8IG1heF9hcml0eSA8IG1pbl9hcml0eSkgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIldlIHdhbnQgdG8gYXZvaWQgdGhpcyEiKTsKLQkJfQotCQlfbWluX2FyaXR5ID0gbWluX2FyaXR5OwotCQlfbWF4X2FyaXR5ID0gbWF4X2FyaXR5OwotCQlfZmwgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFFOYW1lIG5hbWUoKSB7Ci0JCXJldHVybiBfbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBNaW5pbWFsIG51bWJlciBvZiBhbGxvd2VkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBzbWFsbGVzdCBudW1iZXIgb2YgZXJndW1lbnRzIHBvc3NpYmxlCi0JICovCi0JcHVibGljIGludCBtaW5fYXJpdHkoKSB7Ci0JCXJldHVybiBfbWluX2FyaXR5OwotCX0KLQotCS8qKgotCSAqIE1heGltdW0gbnVtYmVyIG9mIGFsbG93ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGhpZ2hlc3QgbnVtYmVyIG9mIGVyZ3VtZW50cyBwb3NzaWJsZQotCSAqLwotCXB1YmxpYyBpbnQgbWF4X2FyaXR5KCkgewotCQlyZXR1cm4gX21heF9hcml0eTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVja3MgaWYgdGhpcyBmdW5jdGlvbiBoYXMgYW4gdG8gdGhlCi0JICogCi0JICogQHBhcmFtIGFjdHVhbF9hcml0eQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBtYXRjaGVzX2FyaXR5KGludCBhY3R1YWxfYXJpdHkpIHsKLQkJaWYgKGFjdHVhbF9hcml0eSA8IG1pbl9hcml0eSgpKSByZXR1cm4gZmFsc2U7Ci0JCWlmIChhY3R1YWxfYXJpdHkgPiBtYXhfYXJpdHkoKSkgcmV0dXJuIGZhbHNlOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JLyoqCi0JICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3Igc2lnbmF0dXJlLgotCSAqIAotCSAqIEByZXR1cm4gU2lnbmF0dXJlLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgc2lnbmF0dXJlKCkgewotCQlyZXR1cm4gc2lnbmF0dXJlKHRoaXMpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJpdHkgZnJvbSBzaWduYXR1cmUuCi0JICogCi0JICogQHBhcmFtIGYKLQkgKiAgICAgICAgICAgIGN1cnJlbnQgZnVuY3Rpb24uCi0JICogQHJldHVybiBTaWduYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgc2lnbmF0dXJlKEZ1bmN0aW9uIGYpIHsKLQkJcmV0dXJuIHNpZ25hdHVyZShmLm5hbWUoKSwgZi5pc192YXJhcmcoKSA/IC0xIDogZi5taW5fYXJpdHkoKSk7Ci0JfQotCi0JLyoqCi0JICogQXBwbHkgdGhlIG5hbWUgYW5kIGFyaXR5IHRvIHNpZ25hdHVyZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICogQHBhcmFtIGFyaXR5Ci0JICogICAgICAgICAgICBhcml0eSBvZiB0aGUgZnVuY3Rpb24uCi0JICogQHJldHVybiBTaWduYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgc2lnbmF0dXJlKFFOYW1lIG5hbWUsIGludCBhcml0eSkgewotCQlTdHJpbmcgbiA9IG5hbWUuZXhwYW5kZWRfbmFtZSgpOwotCQlpZiAobiA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJbiArPSAiXyI7Ci0KLQkJaWYgKGFyaXR5IDwgMCkKLQkJCW4gKz0gIngiOwotCQllbHNlCi0JCQluICs9IGFyaXR5OwotCi0JCXJldHVybiBuOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIGFic3RyYWN0IFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3I7Ci0KLQkvLyBjb252ZXJ0IGFyZ3VtZW50IGFjY29yZGluZyB0byBzZWN0aW9uIDMuMS41IG9mIHhwYXRoIDIuMCBzcGVjCi0JLyoqCi0JICogQ29udmVydCB0aGUgaW5wdXQgYXJndW1lbnQgYWNjb3JkaW5nIHRvIHNlY3Rpb24gMy4xLjUgb2Ygc3BlY2lmaWNhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudC4KLQkgKiBAcGFyYW0gZXhwZWN0ZWQKLQkgKiAgICAgICAgICAgIEV4cGVjdGVkIFNlcXVlbmNlIHR5cGUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gQ29udmVydGVkIGFyZ3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY29udmVydF9hcmd1bWVudChSZXN1bHRTZXF1ZW5jZSBhcmcsCi0JCQlTZXFUeXBlIGV4cGVjdGVkKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcmVzdWx0ID0gYXJnOwotCi0JCS8vIFhYWDogU2hvdWxkIHVzZSB0eXBlX2NsYXNzIGluc3RlYWQgYW5kIHVzZSBpdGVtLmdldENsYXNzKCkuaXNBc3NpZ25hYmxlVG8oZXhwZWN0ZWQudHlwZV9jbGFzcygpKQotCQlBbnlUeXBlIGV4cGVjdGVkX3R5cGUgPSBleHBlY3RlZC50eXBlKCk7Ci0KLQkJLy8gZXhwZWN0ZWQgaXMgYXRvbWljCi0JCWlmIChleHBlY3RlZF90eXBlIGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkgewotCQkJQW55QXRvbWljVHlwZSBleHBlY3RlZF9hYXQgPSAoQW55QXRvbWljVHlwZSkgZXhwZWN0ZWRfdHlwZTsKLQkJCQotCQkJLy8gYXRvbWl6ZQotCQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBGbkRhdGEuYXRvbWl6ZShhcmcpOwotCi0JCQkvLyBjYXN0IHVudHlwZWQgdG8gZXhwZWN0ZWQgdHlwZQotCQkJcmVzdWx0ID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJCUFueVR5cGUgaXRlbSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQkJCQkKLQkJCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJCQkvLyBjcmVhdGUgYSBuZXcgaXRlbSBvZiB0aGUgZXhwZWN0ZWQKLQkJCQkJLy8gdHlwZSBpbml0aWFsaXplZCB3aXRoIGZyb20gdGhlIHN0cmluZwotCQkJCQkvLyB2YWx1ZSBvZiB0aGUgaXRlbQotCQkJCQlSZXN1bHRTZXF1ZW5jZSBjb252ZXJ0ZWQgPSBudWxsOwotCQkJCQlpZiAoZXhwZWN0ZWRfYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcpIHsKLQkJCQkJICAgWFNTdHJpbmcgc3RyVHlwZSA9IG5ldyBYU1N0cmluZyhpdGVtLnN0cmluZ192YWx1ZSgpKTsKLQkJCQkJICAgY29udmVydGVkID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoc3RyVHlwZSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCSAgIGNvbnZlcnRlZCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGl0ZW0pOwotCQkJCQl9Ci0JCQkJCQotCQkJCQlyZXN1bHQuY29uY2F0KGNvbnZlcnRlZCk7Ci0JCQkJfQotCQkJCS8vIHhzOmFueVVSSSBwcm9tb3Rpb24gdG8geHM6c3RyaW5nCi0JCQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFhTQW55VVJJICYmIGV4cGVjdGVkX2FhdCBpbnN0YW5jZW9mIFhTU3RyaW5nKSB7Ci0JCQkJCXJlc3VsdC5hZGQobmV3IFhTU3RyaW5nKGl0ZW0uc3RyaW5nX3ZhbHVlKCkpKTsKLQkJCQl9Ci0JCQkJLy8gbnVtZXJpYyB0eXBlIHByb21vdGlvbgotCQkJCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkgewotCQkJCQlpZiAoZXhwZWN0ZWRfYWF0IGluc3RhbmNlb2YgWFNEb3VibGUpIHsKLQkJCQkJICBYU0RvdWJsZSBkb3VibGVUeXBlID0gbmV3IFhTRG91YmxlKGl0ZW0uc3RyaW5nX3ZhbHVlKCkpOwotCQkJCQkgIHJlc3VsdC5hZGQoZG91YmxlVHlwZSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCSAgcmVzdWx0LmFkZChpdGVtKTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCXJlc3VsdC5hZGQoaXRlbSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gZG8gc2VxdWVuY2UgdHlwZSBtYXRjaGluZyBvbiBjb252ZXJ0ZWQgYXJndW1lbnRzCi0JCXJldHVybiBleHBlY3RlZC5tYXRjaChyZXN1bHQpOwotCX0KLQotCS8vIGNvbnZlcnQgYXJndW1lbnRzCi0JLy8gcmV0dXJucyBjb2xsZWN0aW9uIG9mIGFyZ3VtZW50cwotCS8qKgotCSAqIENvbnZlcnQgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGV4cGVjdGVkCi0JICogICAgICAgICAgICBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gQ29udmVydGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIENvbGxlY3Rpb24gY29udmVydF9hcmd1bWVudHMoQ29sbGVjdGlvbiBhcmdzLAotCQkJQ29sbGVjdGlvbiBleHBlY3RlZCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA8PSBleHBlY3RlZC5zaXplKCk7Ci0KLQkJSXRlcmF0b3IgYXJnaSA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJSXRlcmF0b3IgZXhwaSA9IGV4cGVjdGVkLml0ZXJhdG9yKCk7Ci0KLQkJLy8gY29udmVydCBhbGwgYXJndW1lbnRzCi0JCXdoaWxlIChhcmdpLmhhc05leHQoKSkgewotCQkJcmVzdWx0LmFkZChjb252ZXJ0X2FyZ3VtZW50KChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCksCi0JCQkJCShTZXFUeXBlKSBleHBpLm5leHQoKSkpOwotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGdldFJlc3VsdFNldEZvckFyaXR5WmVybyhEeW5hbWljQ29udGV4dCBkX2NvbnRleHQpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkKLQkJQW55VHlwZSBjb250ZXh0SXRlbSA9IGRfY29udGV4dC5jb250ZXh0X2l0ZW0oKTsKLQkJaWYgKGNvbnRleHRJdGVtICE9IG51bGwpIHsKLQkJICAvLyBpZiBjb250ZXh0IGl0ZW0gaXMgZGVmaW5lZCwgdGhlbiB0aGF0IGlzIHRoZSBkZWZhdWx0IGFyZ3VtZW50Ci0JCSAgLy8gdG8gZm46c3RyaW5nIGZ1bmN0aW9uCi0JCSAgcnMuYWRkKG5ldyBYU1N0cmluZyhjb250ZXh0SXRlbS5zdHJpbmdfdmFsdWUoKSkpOwotCQl9IGVsc2UgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJfQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBmdW5jdGlvbiBsaWJyYXJ5IHZhcmlhYmxlLgotCSAqIAotCSAqIEBwYXJhbSBmbAotCSAqICAgICAgICAgICAgRnVuY3Rpb24gTGlicmFyeS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfZnVuY3Rpb25fbGlicmFyeShGdW5jdGlvbkxpYnJhcnkgZmwpIHsKLQkJX2ZsID0gZmw7Ci0JfQotCi0JcHJvdGVjdGVkIFN0YXRpY0NvbnRleHQgc3RhdGljX2NvbnRleHQoKSB7Ci0JCWlmIChfZmwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBfZmwuc3RhdGljX2NvbnRleHQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgRHluYW1pY0NvbnRleHQgZHluYW1pY19jb250ZXh0KCkgewotCQlpZiAoX2ZsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXR1cm4gX2ZsLmR5bmFtaWNfY29udGV4dCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzX3ZhcmFyZygpIHsKLQkJcmV0dXJuIF9taW5fYXJpdHkgIT0gX21heF9hcml0eTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnVuY3Rpb25MaWJyYXJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Z1bmN0aW9uTGlicmFyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjVlMTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnVuY3Rpb25MaWJyYXJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ0NzEgLSBpbXByb3ZlbWVudHMgdG8gZm46c3RyaW5nIGZ1bmN0aW9uIChzdXBwb3J0IGZvciBhcml0eSAwKQotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIENsYXNzIGZvciBGdW5jdGlvbiBMaWJyYXJ5IHN1cHBvcnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGdW5jdGlvbkxpYnJhcnkgewotCXByaXZhdGUgU3RyaW5nIF9uYW1lc3BhY2U7Ci0JcHJpdmF0ZSBNYXAgX2Z1bmN0aW9uczsKLQlwcml2YXRlIFN0YXRpY0NvbnRleHQgX3NjOwotCXByaXZhdGUgRHluYW1pY0NvbnRleHQgX2RjOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZ1bmN0aW9uTGlicmFyeS4KLQkgKiAKLQkgKiBAcGFyYW0gbnMKLQkgKiAgICAgICAgICAgIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgRnVuY3Rpb25MaWJyYXJ5KFN0cmluZyBucykgewotCQlfbmFtZXNwYWNlID0gbnM7Ci0JCV9mdW5jdGlvbnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCV9zYyA9IG51bGw7Ci0JCV9kYyA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgZnVuY3Rpb24uCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIGZ1bmN0aW9uIHRvIGFkZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRfZnVuY3Rpb24oRnVuY3Rpb24geCkgewotCQl4Lm5hbWUoKS5zZXRfbmFtZXNwYWNlKF9uYW1lc3BhY2UpOwotCQl4LnNldF9mdW5jdGlvbl9saWJyYXJ5KHRoaXMpOwotCQlfZnVuY3Rpb25zLnB1dCh4LnNpZ25hdHVyZSgpLCB4KTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVja3Mgd2hldGhlciB0aGUgZnVuY3Rpb24gZXhpc3RzIG9yIG5vdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUgb2YgZnVuY3Rpb24uCi0JICogQHBhcmFtIGFyaXR5Ci0JICogICAgICAgICAgICBhcml0eSBvZiB0aGUgZnVuY3Rpb24uCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIHRlc3QuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZnVuY3Rpb25fZXhpc3RzKFFOYW1lIG5hbWUsIGludCBhcml0eSkgewotCQlyZXR1cm4gZnVuY3Rpb24obmFtZSwgYXJpdHkpICE9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogRnVuY3Rpb24gc3VwcG9ydC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICogQHBhcmFtIGFyaXR5Ci0JICogICAgICAgICAgICBhcml0eSBvZiB0aGUgZnVuY3Rpb24uCi0JICogQHJldHVybiBUaGUgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBGdW5jdGlvbiBmdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJRnVuY3Rpb24gZiA9IChGdW5jdGlvbikgX2Z1bmN0aW9ucy5nZXQoRnVuY3Rpb24uc2lnbmF0dXJlKG5hbWUsIGFyaXR5KSk7Ci0KLQkJaWYgKGYgIT0gbnVsbCB8fCBhcml0eSA9PSAtMSkKLQkJCXJldHVybiBmOwotCi0JCS8vIHNlZSBpZiB3ZSBnb3QgYSB2YXJnIG9uZQotCQlmID0gZnVuY3Rpb24obmFtZSwgLTEpOwotCi0JCS8vIG5vcGUKLQkJaWYgKGYgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJaWYgKGYubWF0Y2hlc19hcml0eShhcml0eSkpCi0JCQlyZXR1cm4gZjsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBuYW1lc3BhY2UuCi0JICogCi0JICogQHJldHVybiBOYW1lc3BhY2UuCi0JICovCi0JcHVibGljIFN0cmluZyBuYW1lc3BhY2UoKSB7Ci0JCXJldHVybiBfbmFtZXNwYWNlOwotCX0KLQotCS8qKgotCSAqIFNldCBzdGF0aWMgY29udGV4dCBvbiBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfc3RhdGljX2NvbnRleHQoU3RhdGljQ29udGV4dCBzYykgewotCQlfc2MgPSBzYzsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgZHluYW1pYyBjb250ZXh0IG9uIGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9keW5hbWljX2NvbnRleHQoRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJX2RjID0gZGM7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgU3RhdGljIGNvbnRleHQuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQuCi0JICovCi0JcHVibGljIFN0YXRpY0NvbnRleHQgc3RhdGljX2NvbnRleHQoKSB7Ci0JCXJldHVybiBfc2M7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgRHluYW1pYyBjb250ZXh0LgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dC4KLQkgKi8KLQlwdWJsaWMgRHluYW1pY0NvbnRleHQgZHluYW1pY19jb250ZXh0KCkgewotCQlyZXR1cm4gX2RjOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aERpdi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoRGl2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NDFmMzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoRGl2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBNYXRoZW1hdGljYWwgZGl2aXNpb24uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWF0aERpdiB7Ci0JLyoqCi0JICogRGl2aXNpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50LgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3I7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhJRGl2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhJRGl2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZDc2ZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoSURpdi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgTWF0aGVtYXRpY2FsIEludGVnZXIgRGl2aXNpb24uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWF0aElEaXYgewotCS8qKgotCSAqIEludGVnZXIgRGl2aXNpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50LgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGlkaXYoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoTWludXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aE1pbnVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwODZiM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoTWludXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIE1hdGhlbWF0aWNhbCBTdWJ0cmFjdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBNYXRoTWludXMgewotCS8qKgotCSAqIFN1YnRyYWN0aW9uIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtaW51cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3I7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhNb2QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aE1vZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmExYjAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aE1vZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgTWF0aGVtYXRpY2FsIE1vZHVsYXIgb3BlcmF0aW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hdGhNb2QgewotCS8qKgotCSAqIE1vZHVsYXIgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50LgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1vZChSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3I7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhQbHVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhQbHVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYzQ4NmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoUGx1cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgTWF0aGVtYXRpY2FsIEFkZGl0aW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hdGhQbHVzIHsKLQkvKioKLQkgKiBBZGRpdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3I7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhUaW1lcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoVGltZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg4ODIwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhUaW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgTWF0aGVtYXRpY2FsIE11bHRpcGxpY2F0aW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hdGhUaW1lcyB7Ci0JLyoqCi0JICogTXVsdGlwbGljYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50LgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHRpbWVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BFeGNlcHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BFeGNlcHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ3MWIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wRXhjZXB0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgRXhjZXB0IG9wZXJhdGlvbiBvbiBub2RlIHR5cGVzLgotICovCi1wdWJsaWMgY2xhc3MgT3BFeGNlcHQgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgT3BFeGNlcHQuCi0JICovCi0JcHVibGljIE9wRXhjZXB0KCkgewotCQlzdXBlcihuZXcgUU5hbWUoImV4Y2VwdCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIG9wX2V4Y2VwdChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPcC1FeGNlcHQgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugb3BfZXhjZXB0KENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBjb252ZXJ0IGFyZ3VtZW50cwotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJndW1lbnRzCi0JCUl0ZXJhdG9yIGl0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBvbmUgPSAoUmVzdWx0U2VxdWVuY2UpIGl0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSB0d28gPSAoUmVzdWx0U2VxdWVuY2UpIGl0ZXIubmV4dCgpOwotCi0JCS8vIFhYWCBsYW1lCi0JCWZvciAoSXRlcmF0b3IgaSA9IG9uZS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCi0JCQkvLyBkZWF0aAotCQkJZm9yIChJdGVyYXRvciBqID0gdHdvLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykgewotCQkJCU5vZGVUeXBlIG5vZGUyID0gKE5vZGVUeXBlKSBqLm5leHQoKTsKLQotCQkJCWlmIChub2RlLm5vZGVfdmFsdWUoKSA9PSBub2RlMi5ub2RlX3ZhbHVlKCkpIHsKLQkJCQkJZm91bmQgPSB0cnVlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCX0KLQkJCWlmICghZm91bmQpCi0JCQkJcnMuYWRkKG5vZGUpOwotCQl9Ci0JCXJzID0gTm9kZVR5cGUuZWxpbWluYXRlX2R1cHMocnMpOwotCQlycyA9IE5vZGVUeXBlLnNvcnRfZG9jdW1lbnRfb3JkZXIocnMpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCVNlcVR5cGUgc3QgPSBuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19TVEFSKTsKLQotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKHN0KTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChzdCk7Ci0JCX0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BGdW5jdGlvbkxpYnJhcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BGdW5jdGlvbkxpYnJhcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVlNTU2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wRnVuY3Rpb25MaWJyYXJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLS8vIHRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgbGliYyA9RAotLyoqCi0gKiBNYWludGFpbnMgYSBsaWJyYXJ5IG9mIGJ1aWx0LWluIG9wZXJhdG9ycyBhcyBmdW5jdGlvbnMuCi0gKiAKLSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGlmIG5vcm1hbGl6YXRpb24gaXMgYmVpbmcgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIE9wRnVuY3Rpb25MaWJyYXJ5IGV4dGVuZHMgRnVuY3Rpb25MaWJyYXJ5IHsKLQotCS8vIFhYWCBzaG91bGQgYmUgaW50ZXJuYWwKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF9PUF9OUyA9ICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELXhxdWVyeS1zZW1hbnRpY3MtMjAwMzA1MDIvIjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBPcEZ1bmN0aW9uTGlicmFyeS4KLQkgKi8KLQlwdWJsaWMgT3BGdW5jdGlvbkxpYnJhcnkoKSB7Ci0JCXN1cGVyKFhQQVRIX09QX05TKTsKLQotCQkvLyBvcGVyYXRvcnMgYWNjb3JkaW5nIHRvIGZvcm1hbCBzZW1hbnRpY3MKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGc0RpdigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGc0VxKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZzR2UoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRnNHdCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGc0lEaXYoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRnNMZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGc0x0KCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZzTWludXMoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRnNNb2QoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRnNOZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGc1BsdXMoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRnNUaW1lcygpKTsKLQotCQkvLyB1dGlsaXR5IGZ1bmN0aW9ucyBpbiBmb3JtYWwgc2VtYW50aWNzCi0JCWFkZF9mdW5jdGlvbihuZXcgRnNDb252ZXJ0T3BlcmFuZCgpKTsKLQotCQkvLyBvcGVyYXRvcnMgYWNjb3JkaW5nIHRvIGZ1bmN0aW9ucyAmIG9wZXJhdG9ycwotCQlhZGRfZnVuY3Rpb24obmV3IE9wRXhjZXB0KCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IE9wSW50ZXJzZWN0KCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IE9wVG8oKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgT3BVbmlvbigpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wSW50ZXJzZWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wSW50ZXJzZWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMTg1YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcEludGVyc2VjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIEludGVyc2VjdCBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBPcEludGVyc2VjdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBPcEludGVyc2VjdC4KLQkgKi8KLQlwdWJsaWMgT3BJbnRlcnNlY3QoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaW50ZXJzZWN0IiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gb3BfaW50ZXJzZWN0KGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIE9wLUludGVyc2VjdCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBvcF9pbnRlcnNlY3QoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBjb252ZXJ0IGFyZ3VtZW50cwotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJndW1lbnRzCi0JCUl0ZXJhdG9yIGl0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBvbmUgPSAoUmVzdWx0U2VxdWVuY2UpIGl0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSB0d28gPSAoUmVzdWx0U2VxdWVuY2UpIGl0ZXIubmV4dCgpOwotCi0JCS8vIFhYWCBsYW1lCi0JCWZvciAoSXRlcmF0b3IgaSA9IG9uZS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCi0JCQkvLyBkZWF0aAotCQkJZm9yIChJdGVyYXRvciBqID0gdHdvLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykgewotCQkJCU5vZGVUeXBlIG5vZGUyID0gKE5vZGVUeXBlKSBqLm5leHQoKTsKLQotCQkJCWlmIChub2RlLm5vZGVfdmFsdWUoKSA9PSBub2RlMi5ub2RlX3ZhbHVlKCkpIHsKLQkJCQkJZm91bmQgPSB0cnVlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCX0KLQkJCWlmIChmb3VuZCkKLQkJCQlycy5hZGQobm9kZSk7Ci0JCX0KLQkJcnMgPSBOb2RlVHlwZS5lbGltaW5hdGVfZHVwcyhycyk7Ci0JCXJzID0gTm9kZVR5cGUuc29ydF9kb2N1bWVudF9vcmRlcihycyk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQkJU2VxVHlwZSBzdCA9IG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1NUQVIpOwotCi0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoc3QpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKHN0KTsKLQkJfQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcFRvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wVG8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ5NGI5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wVG8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFRvIG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIE9wVG8gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgT3BUby4KLQkgKi8KLQlwdWJsaWMgT3BUbygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0byIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMjsKLQotCQkvLyBJdGVyYXRvciBpID0gYXJncy5pdGVyYXRvcigpOwotCi0JCS8vIHJldHVybiBvcF90byggKFJlc3VsdFNlcXVlbmNlKSBpLm5leHQoKSwgKFJlc3VsdFNlcXVlbmNlKSBpLm5leHQoKSk7Ci0JCXJldHVybiBvcF90byhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPcC1UbyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBvcF90byhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gY29udmVydCBhcmd1bWVudHMKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZ3VtZW50cwotCQlJdGVyYXRvciBpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgciA9IChSZXN1bHRTZXF1ZW5jZSkgaXRlci5uZXh0KCk7Ci0JCWludCBvbmUgPSAoKFhTSW50ZWdlcikgci5maXJzdCgpKS5pbnRfdmFsdWUoKS5pbnRWYWx1ZSgpOwotCQlyID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQkJaWYgKHIuZmlyc3QoKSA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJaW50IHR3byA9ICgoWFNJbnRlZ2VyKSByLmZpcnN0KCkpLmludF92YWx1ZSgpLmludFZhbHVlKCk7Ci0KLQkJaWYgKG9uZSA+IHR3bykKLQkJCXJldHVybiByczsKLQotCQkvLyBpbmNsdXNpdmUgZmlyc3QgYW5kIGxhc3QKLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKG9uZSkpKTsKLQotCQlpZiAob25lID09IHR3bykgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCS8qCi0JCSAqIGZvcihvbmUrKzsgb25lIDw9IHR3bzsgb25lKyspIHsgcnMuYWRkKG5ldyBYU0ludGVnZXIob25lKSk7IH0KLQkJICogCi0JCSAqIHJldHVybiByczsKLQkJICovCi0JCXJldHVybiBuZXcgUmFuZ2VSZXN1bHRTZXF1ZW5jZShvbmUsIHR3byk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCQlTZXFUeXBlIHN0ID0gbmV3IFNlcVR5cGUobmV3IFhTSW50ZWdlcigpKTsKLQotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKHN0KTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChzdCk7Ci0JCX0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BVbmlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcFVuaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NjYwMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcFVuaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBVbmlvbiBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBPcFVuaW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE9wVW5pb24uCi0JICovCi0JcHVibGljIE9wVW5pb24oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidW5pb24iKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBvcF91bmlvbihhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPcC1VbmlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBvcF91bmlvbihDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gY29udmVydCBhcmd1bWVudHMKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZ3VtZW50cwotCQlJdGVyYXRvciBpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQotCQkvLyBYWFggaSBkb24ndCBmaW5rIHUndmUgZXZlciBzZWVuIGFueXRoaW5nIGxhbWVyIHRoYW4gdGhpcwotCQlycy5jb25jYXQob25lKTsKLQkJcnMuY29uY2F0KHR3byk7Ci0JCXJzID0gTm9kZVR5cGUuZWxpbWluYXRlX2R1cHMocnMpOwotCQlycyA9IE5vZGVUeXBlLnNvcnRfZG9jdW1lbnRfb3JkZXIocnMpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCVNlcVR5cGUgc3QgPSBuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19TVEFSKTsKLQotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKHN0KTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChzdCk7Ci0JCX0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55QXRvbWljVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlBdG9taWNUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMjg0NmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlBdG9taWNUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLS8qKgotICogQ29tbW9uIGJhc2UgZm9yIGV2ZXJ5IGF0b21pYyB0eXBlCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBbnlBdG9taWNUeXBlIGV4dGVuZHMgQW55U2ltcGxlVHlwZSB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0FueVNpbXBsZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55U2ltcGxlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2I2YzlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55U2ltcGxlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi0vKioKLSAqIENvbW1vbiBiYXNlIGZvciBldmVyeSBzaW1wbGUgdHlwZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQW55U2ltcGxlVHlwZSBleHRlbmRzIEFueVR5cGUgewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0FueVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcyNGRkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0FueVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotLyoqCi0gKiBDb21tb24gYmFzZSBmb3IgZXZlcnkgdHlwZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQW55VHlwZSB7Ci0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIERhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgc3RyaW5nX3R5cGUoKTsKLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiBEYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIHN0cmluZ192YWx1ZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BdHRyVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BdHRyVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTc5ZDZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQXR0clR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgIC0gYnVnIDI3NjEzNCAtIGltcHJvdmVtZW50cyB0byBzY2hlbWEgYXdhcmUgcHJpbWl0aXZlIHR5cGUgc3VwcG9ydAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXR0cmlidXRlL2VsZW1lbnQgbm9kZXMgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODExNTkgLSB3ZSB3ZXJlIG1pc3Npbmcgb3V0IG9uIHF1YWxpZmllZCBhdHRyaWJ1dGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyICAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODkzMDQgLSBmaXhlIHNjaGVtYSBhd2FybmVzcyBvZiB0eXBlcyBvbiBhdHRyaWJ1dGVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uUFNWSUF0dHJOU0ltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uVHlwZUluZm87Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQXR0cmlidXRlVHlwZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgQXR0clR5cGUgZXh0ZW5kcyBOb2RlVHlwZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURSA9ICJhdHRyaWJ1dGUiOwotCXByaXZhdGUgQXR0ciBfdmFsdWU7Ci0KLQkvLyBjb25zdHJ1Y3RvciBvbmx5IHVzZWZ1bGwgZm9yIHN0cmluZ190eXBlKCkKLQkvLyBYWFggbmVlZHMgdG8gYmUgZml4ZWQgaW4gZnV0dXJlCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBBdHRyVHlwZSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gdgotCSAqICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZSBiZWluZyByZXByZXNlbnRlZAotCSAqLwotCXB1YmxpYyBBdHRyVHlwZShBdHRyIHYpIHsKLQkJc3VwZXIodik7Ci0JCV92YWx1ZSA9IHY7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJhdHRyaWJ1dGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gQVRUUklCVVRFOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWUuZ2V0VmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHR5cGVkX3ZhbHVlKCkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKCEoX3ZhbHVlIGluc3RhbmNlb2YgUFNWSUF0dHJOU0ltcGwpKSB7Ci0JCQlycy5hZGQobmV3IFhTVW50eXBlZEF0b21pYyhzdHJpbmdfdmFsdWUoKSkpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCQotCQlQU1ZJQXR0ck5TSW1wbCBwc3ZpQXR0ciA9IChQU1ZJQXR0ck5TSW1wbCkgX3ZhbHVlOwotCQlYU1R5cGVEZWZpbml0aW9uIHR5cGVEZWYgPSBwc3ZpQXR0ci5nZXRUeXBlRGVmaW5pdGlvbigpOwotCi0JCWlmICh0eXBlRGVmICE9IG51bGwpIHsKLQkJCVhTU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcFR5cGUgPSAoWFNTaW1wbGVUeXBlRGVmaW5pdGlvbikgdHlwZURlZjsKLQkJCU9iamVjdCBzY2hlbWFUeXBlVmFsdWUgPSBnZXRUeXBlZFZhbHVlRm9yUHJpbWl0aXZlVHlwZShzaW1wVHlwZSk7Ci0JCQlpZiAoc2NoZW1hVHlwZVZhbHVlICE9IG51bGwpIHsKLQkJCQlycy5hZGQoKEFueVR5cGUpIHNjaGVtYVR5cGVWYWx1ZSk7Ci0JCQl9IGVsc2UgewotCQkJCXJzLmFkZChuZXcgWFNVbnR5cGVkQXRvbWljKHN0cmluZ192YWx1ZSgpKSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlycy5hZGQobmV3IFhTVW50eXBlZEF0b21pYyhzdHJpbmdfdmFsdWUoKSkpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZQotCSAqIAotCSAqIEByZXR1cm4gTmFtZSBvZiB0aGUgbm9kZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBRTmFtZSBub2RlX25hbWUoKSB7Ci0JCVFOYW1lIG5hbWUgPSBuZXcgUU5hbWUoX3ZhbHVlLmdldFByZWZpeCgpLCBfdmFsdWUuZ2V0TG9jYWxOYW1lKCksCi0JCQkJX3ZhbHVlLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQkvKioKLQkgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBvZiB0eXBlIElECi0JICogQHNpbmNlIDEuMTsKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0lEKCkgewotCQlyZXR1cm4gaXNBdHRyVHlwZShTQ0hFTUFfVFlQRV9JRCk7Ci0JfQotCQotCS8qKgotCSAqIAotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0lEUkVGKCkgewotCQlyZXR1cm4gaXNBdHRyVHlwZShTQ0hFTUFfVFlQRV9JRFJFRik7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzQXR0clR5cGUoU3RyaW5nIHR5cGVOYW1lKSB7Ci0JCWlmIChfdmFsdWUuZ2V0T3duZXJEb2N1bWVudCgpLmlzU3VwcG9ydGVkKCJDb3JlIiwgIjMuMCIpKSB7Ci0JCQlyZXR1cm4gdHlwZUluZm8odHlwZU5hbWUpOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIHR5cGVJbmZvKFN0cmluZyB0eXBlTmFtZSkgewotCQlUeXBlSW5mbyB0eXBlSW5mbyA9IF92YWx1ZS5nZXRTY2hlbWFUeXBlSW5mbygpOwotCQlyZXR1cm4gaXNUeXBlKHR5cGVJbmZvLCB0eXBlTmFtZSk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9DYWxlbmRhclR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ2FsZW5kYXJUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMDU4MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9DYWxlbmRhclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjYyNzY1IC0gZml4IHR5cGUgdGVzdHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLQotLy8gY29tbW9uIGJhc2UgZm9yIGFueXRoaW5nIHRoYXQgdXNlcyBhIGNhbGVuZGFyLi4uIGJhc2ljYWxseSBzdHVmZiBkb2luZyB3aXRoCi0vLyB0aW1lLi4uIGhvcGVmdWxseSBpbiB0aGUgZnV0dXJlIHRoaXMgbWF5IGJlIGZhY3RvcmVkIG91dCBoZXJlCi0vKioKLSAqIENvbW1vbiBiYXNlIGZvciBhbGwgQ2FsZW5kYXIgYmFzZWQgY2xhc3NlcwotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2FsZW5kYXJUeXBlIGV4dGVuZHMgQ3RyVHlwZSB7Ci0KLQlwdWJsaWMgQ2FsZW5kYXIgbm9ybWFsaXplQ2FsZW5kYXIoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHRpbWV6b25lKSB7Ci0JCUNhbGVuZGFyIGFkanVzdGVkID0gKENhbGVuZGFyKSBjYWwuY2xvbmUoKTsKLQkJCi0JCWlmICh0aW1lem9uZSAhPSBudWxsKSB7Ci0JCQlpbnQgaG91cnMgPSB0aW1lem9uZS5ob3VycygpOwotCQkJaW50IG1pbnV0ZXMgPSB0aW1lem9uZS5taW51dGVzKCk7Ci0JCQlpZiAoIXRpbWV6b25lLm5lZ2F0aXZlKCkpIHsKLQkJCQlob3VycyAqPSAtMTsKLQkJCQltaW51dGVzICo9IC0xOwotCQkJfQotCQkJYWRqdXN0ZWQuYWRkKENhbGVuZGFyLkhPVVJfT0ZfREFZLCBob3Vycyk7Ci0JCQlhZGp1c3RlZC5hZGQoQ2FsZW5kYXIuTUlOVVRFLCBtaW51dGVzKTsKLQkJfQotCQkKLQkJcmV0dXJuIGFkanVzdGVkOwotCQkKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0dEYXRhVHlwZShBbnlUeXBlIGFhdCkgewotCQlpZiAoISAoYWF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpIHJldHVybiBmYWxzZTsKLQkKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnTW9udGhEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdNb250aCIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z1llYXIiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyTW9udGgiKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ29tbWVudFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ29tbWVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ3NDg3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0NvbW1lbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIENvbW1lbnRUeXBlIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tZW50VHlwZSBleHRlbmRzIE5vZGVUeXBlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUVOVCA9ICJjb21tZW50IjsKLQlwcml2YXRlIENvbW1lbnQgX3ZhbHVlOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZSBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gdgotCSAqICAgICAgICAgICAgVGhlIGNvbW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKi8KLQlwdWJsaWMgQ29tbWVudFR5cGUoQ29tbWVudCB2KSB7Ci0JCXN1cGVyKHYpOwotCQlfdmFsdWUgPSB2OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAiY29tbWVudCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBDT01NRU5UOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWVudCBiZWluZyBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWVudCBiZWluZyBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5nZXROb2RlVmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGNvbW1lbnQgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgY29tbWVudCBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdHlwZWRfdmFsdWUoKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlycy5hZGQobmV3IFhTU3RyaW5nKF92YWx1ZS5nZXREYXRhKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogVW5zdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIG5vZGUuCi0JICogCi0JICogQHJldHVybiBudWxsCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFFOYW1lIG5vZGVfbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzSUQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNJRFJFRigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ3RyVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9DdHJUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYWU2NDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9DdHJUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDdHJUeXBlIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDdHJUeXBlIGV4dGVuZHMgQW55QXRvbWljVHlwZSB7Ci0JLy8gdXNlZCBmb3IgY29uc3RydWN0b3IgZnVuY3Rpb25zCi0JLy8gYXJnIGlzIGVpdGhlciBlbXB0eSBzZXF1ZW5jZSwgb3IgMSBhbnlhdG9taWN0eXBlCi0JLyoqCi0JICogVXNlZCBmb3IgY29uc3RydWN0b3IgZnVuY3Rpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgRWl0aGVyIGFuIGVtcHR5IHNlcXVlbmNlIG9yIDEgYXRvbWljIHR5cGUKLQkgKiBAcmV0dXJuIFRoZSByZXN1bHRpbmcgUmVzdWx0U2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvcjsKLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgdHlwZV9uYW1lKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0RvY1R5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvRG9jVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTY5YTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvRG9jVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLnczYy5kb20uKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEb2N1bWVudFR5cGUgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIERvY1R5cGUgZXh0ZW5kcyBOb2RlVHlwZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ1VNRU5UID0gImRvY3VtZW50IjsKLQlwcml2YXRlIERvY3VtZW50IF92YWx1ZTsKLQlwcml2YXRlIFN0cmluZyBfc3RyaW5nX3ZhbHVlOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIHYKLQkgKiAgICAgICAgICAgIFRoZSBkb2N1bWVudCBiZWluZyByZXByZXNlbnRlZAotCSAqLwotCXB1YmxpYyBEb2NUeXBlKERvY3VtZW50IHYpIHsKLQkJc3VwZXIodik7Ci0JCV92YWx1ZSA9IHY7Ci0JCV9zdHJpbmdfdmFsdWUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIGRvY3VtZW50IGJlaW5nIHJlcHJlc2VudGVkCi0JICogCi0JICogQHJldHVybiBBY3R1YWwgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnQgdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJkb2N1bWVudCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBET0NVTUVOVDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJLy8gWFhYIGNhY2hpbmcKLQkJaWYgKF9zdHJpbmdfdmFsdWUgPT0gbnVsbCkKLQkJCV9zdHJpbmdfdmFsdWUgPSBFbGVtZW50VHlwZS50ZXh0bm9kZV9zdHJpbmdzKF92YWx1ZSk7Ci0KLQkJcmV0dXJuIF9zdHJpbmdfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdHlwZWRfdmFsdWUoKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBYWFggbm8gcHN2aQotCQlycy5hZGQobmV3IFhTVW50eXBlZEF0b21pYyhzdHJpbmdfdmFsdWUoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFFOYW1lIG5vZGVfbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzSUQoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0lEUkVGKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9FbGVtZW50VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9FbGVtZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGJkNTVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvRWxlbWVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc2MTM0IC0gaW1wcm92ZW1lbnRzIHRvIHNjaGVtYSBhd2FyZSBwcmltaXRpdmUgdHlwZSBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXR0cmlidXRlL2VsZW1lbnQgbm9kZXMKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODkzMDQgLSBmaXggc2NoZW1hIGF3YXJuZXNzIG9mIHR5cGVzIG9uIGVsZW1lbnRzCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyOTc5NTggLSBGaXggZm46bmlsbGVkIGZvciBlbGVtZW50cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLlBTVklFbGVtZW50TlNJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLWltcG9ydCBvcmcudzNjLmRvbS5UeXBlSW5mbzsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBFbGVtZW50VHlwZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgRWxlbWVudFR5cGUgZXh0ZW5kcyBOb2RlVHlwZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlQgPSAiZWxlbWVudCI7Ci0KLQlwcml2YXRlIEVsZW1lbnQgX3ZhbHVlOwotCi0JcHJpdmF0ZSBTdHJpbmcgX3N0cmluZ192YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIGEgbnVsbCBlbGVtZW50Ci0JICovCi0JcHVibGljIEVsZW1lbnRUeXBlKCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSB2Ci0JICogICAgICAgICAgICBUaGUgZWxlbWVudCBiZWluZyByZXByZXNlbnRlZAotCSAqLwotCXB1YmxpYyBFbGVtZW50VHlwZShFbGVtZW50IHYpIHsKLQkJc3VwZXIodik7Ci0JCV92YWx1ZSA9IHY7Ci0KLQkJX3N0cmluZ192YWx1ZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIEFkb3B0ZXJzIG5lZWQgdG8gdXNlCi0JICogRWxlbWVudFR5cGUoRWxlbWVudCkKLQkgKiAKLQkgKiBAcGFyYW0gdgotCSAqIEBwYXJhbSBub2RlUG9zaXRpb24KLQkgKiBAZGVwcmVjYXRlZCBVc2UgRWxlbWVudFR5cGUoRWxlbWVudCB2KSBpbnN0ZWFkLgotCSAqLwotCUBEZXByZWNhdGVkCi0JcHVibGljIEVsZW1lbnRUeXBlKEVsZW1lbnQgdiwgaW50IG5vZGVQb3NpdGlvbikgewotCQkvLyB1bnVzZWQgcGFyYW1ldGVyLCBub2RlUG9zaXRpb24hCi0JCXN1cGVyKHYpOwotCQlfdmFsdWUgPSB2OwotCQlfc3RyaW5nX3ZhbHVlID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkCi0JICogCi0JICogQHJldHVybiBBY3R1YWwgZWxlbWVudCB2YWx1ZSBiZWluZyByZXByZXNlbnRlZAotCSAqLwotCXB1YmxpYyBFbGVtZW50IHZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAiZWxlbWVudCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBFTEVNRU5UOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBiZWluZyBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBiZWluZyBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJLy8gWFhYIGNhbiB3ZSBjYWNoZSA/Ci0JCWlmIChfc3RyaW5nX3ZhbHVlICE9IG51bGwpCi0JCQlyZXR1cm4gX3N0cmluZ192YWx1ZTsKLQotCQlfc3RyaW5nX3ZhbHVlID0gdGV4dG5vZGVfc3RyaW5ncyhfdmFsdWUpOwotCi0JCXJldHVybiBfc3RyaW5nX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVudCBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBlbGVtZW50IHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB0eXBlZF92YWx1ZSgpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkKLQkJaWYgKCEoX3ZhbHVlIGluc3RhbmNlb2YgUFNWSUVsZW1lbnROU0ltcGwpKSB7Ci0JCQlycy5hZGQobmV3IFhTVW50eXBlZEF0b21pYyhzdHJpbmdfdmFsdWUoKSkpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJUFNWSUVsZW1lbnROU0ltcGwgdHlwZUluZm8gPSAoUFNWSUVsZW1lbnROU0ltcGwpIF92YWx1ZTsKLQotCQlYU1R5cGVEZWZpbml0aW9uIHR5cGVEZWYgPSB0eXBlSW5mby5nZXRUeXBlRGVmaW5pdGlvbigpOwotCi0JCWlmICh0eXBlRGVmICE9IG51bGwpIHsKLQkJCVhTU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcFR5cGUgPSBudWxsOwotCQkJaWYgKHR5cGVEZWYgaW5zdGFuY2VvZiBYU0NvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotCQkJCVhTQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlRGVmaW5pdGlvbiA9IChYU0NvbXBsZXhUeXBlRGVmaW5pdGlvbikgdHlwZURlZjsKLQkJCQlzaW1wVHlwZSA9IGNvbXBsZXhUeXBlRGVmaW5pdGlvbi5nZXRTaW1wbGVUeXBlKCk7Ci0JCQl9IGVsc2UgewotCQkJCXNpbXBUeXBlID0gKFhTU2ltcGxlVHlwZURlZmluaXRpb24pIHR5cGVEZWY7Ci0JCQl9Ci0JCQlPYmplY3Qgc2NoZW1hVHlwZVZhbHVlID0gZ2V0VHlwZWRWYWx1ZUZvclByaW1pdGl2ZVR5cGUoc2ltcFR5cGUpOwotCQkJaWYgKHNjaGVtYVR5cGVWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJcnMuYWRkKChBbnlUeXBlKSBzY2hlbWFUeXBlVmFsdWUpOwotCQkJfSBlbHNlIHsKLQkJCQlycy5hZGQobmV3IFhTVW50eXBlZEF0b21pYyhzdHJpbmdfdmFsdWUoKSkpOwotCQkJfQotCQl9IGVsc2UgewotCQkJcnMuYWRkKG5ldyBYU1VudHlwZWRBdG9taWMoc3RyaW5nX3ZhbHVlKCkpKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvLyByZWN1cnNpdmVseSBjb25jYXRlbmF0ZSBUZXh0Tm9kZSBzdHJpbmdzCi0JLyoqCi0JICogUmVjdXJzaXZlbHkgY29uY2F0ZW5hdGUgVGV4dE5vZGUgc3RyaW5ncwotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBOb2RlIHRvIHJlY3Vyc2UKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBzdXBwbGllZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRleHRub2RlX3N0cmluZ3MoTm9kZSBub2RlKSB7Ci0JCVN0cmluZyByZXN1bHQgPSAiIjsKLQotCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuVEVYVF9OT0RFKSB7Ci0JCQlUZXh0IHRuID0gKFRleHQpIG5vZGU7Ci0JCQlyZXN1bHQgKz0gdG4uZ2V0RGF0YSgpOwotCQl9Ci0KLQkJTm9kZUxpc3QgbmwgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihyZXN1bHQpOwotCQkvLyBjb25jYXRlbmF0ZSBjaGlsZHJlbgotCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCU5vZGUgbiA9IG5sLml0ZW0oaSk7Ci0KLQkJCWJ1Zi5hcHBlbmQodGV4dG5vZGVfc3RyaW5ncyhuKSk7Ci0JCX0KLQotCQlyZXN1bHQgPSBidWYudG9TdHJpbmcoKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFFOYW1lIG5vZGVfbmFtZSgpIHsKLQkJUU5hbWUgbmFtZSA9IG5ldyBRTmFtZShfdmFsdWUuZ2V0UHJlZml4KCksIF92YWx1ZS5nZXRMb2NhbE5hbWUoKSwKLQkJCQlfdmFsdWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCi0JCXJldHVybiBuYW1lOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBuaWxsZWQoKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoX3ZhbHVlIGluc3RhbmNlb2YgUFNWSUVsZW1lbnROU0ltcGwpIHsKLQkJCVBTVklFbGVtZW50TlNJbXBsIHBzdmlFbGVtZW50ID0gKFBTVklFbGVtZW50TlNJbXBsKSBfdmFsdWU7Ci0JCQlycy5hZGQobmV3IFhTQm9vbGVhbihwc3ZpRWxlbWVudC5nZXROaWwoKSkpOwotCQl9IGVsc2UgewotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNJRCgpIHsKLQkJcmV0dXJuIGlzRWxlbWVudFR5cGUoU0NIRU1BX1RZUEVfSUQpOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0lEUkVGKCkgewotCQlyZXR1cm4gaXNFbGVtZW50VHlwZShTQ0hFTUFfVFlQRV9JRFJFRik7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNFbGVtZW50VHlwZShTdHJpbmcgdHlwZU5hbWUpIHsKLQkJVHlwZUluZm8gdHlwZUluZm8gPSBfdmFsdWUuZ2V0U2NoZW1hVHlwZUluZm8oKTsKLQkJcmV0dXJuIGlzVHlwZSh0eXBlSW5mbywgdHlwZU5hbWUpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9Ob2RlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9Ob2RlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWU4MWE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvTm9kZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc2MTM0IC0gaW1wcm92ZW1lbnRzIHRvIHNjaGVtYSBhd2FyZSBwcmltaXRpdmUgdHlwZSBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhdHRyaWJ1dGUvZWxlbWVudCBub2RlcwotICogICAgIERhdmlkIENhcnZlciAoU1RBUiktIGJ1ZyAyNzc3NzQgLSBYU0RlY2ltYWwgcmV0dXJuaW5nIHdyb25nIHZhbHVlcy4KLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODkzMDQgLSBmaXhlZCBzY2hlbWEgYXdhcmVuZXNzIG9uIGVsZW1lbnRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkNvbW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotaW1wb3J0IG9yZy53M2MuZG9tLlR5cGVJbmZvOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBOb2RlIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb2RlVHlwZSBleHRlbmRzIEFueVR5cGUgewotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV9UWVBFX0lEUkVGID0gIklEUkVGIjsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUFfVFlQRV9JRCA9ICJJRCI7Ci0JcHJpdmF0ZSBOb2RlIF9ub2RlOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBOb2RlIGJlaW5nIHJlcHJlc2VudGVkCi0JICogQHBhcmFtIGRvY3VtZW50X29yZGVyCi0JICogICAgICAgICAgICBUaGUgZG9jdW1lbnQgb3JkZXIKLQkgKi8KLQlwdWJsaWMgTm9kZVR5cGUoTm9kZSBub2RlKSB7Ci0JCV9ub2RlID0gbm9kZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBub2RlIGJlaW5nIHJlcHJlc2VudGVkCi0JICogCi0JICogQHJldHVybiBBY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZAotCSAqLwotCXB1YmxpYyBOb2RlIG5vZGVfdmFsdWUoKSB7Ci0JCXJldHVybiBfbm9kZTsKLQl9Ci0KLQkvLyBBY2Nlc3NvcnMgZGVmaW5lZCBpbiBYUGF0aCBEYXRhIG1vZGVsCi0JLy8gaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZGF0YW1vZGVsLwotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEFjdHVhbCBub2RlIGJlaW5nIHJlcHJlc2VudGVkCi0JICovCi0JcHVibGljIGFic3RyYWN0IFJlc3VsdFNlcXVlbmNlIHR5cGVkX3ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlCi0JICovCi0JcHVibGljIGFic3RyYWN0IFFOYW1lIG5vZGVfbmFtZSgpOyAvLyBtYXkgcmV0dXJuIG51bGwgWyJlbXB0eSBzZXF1ZW5jZSJdCi0KLQkvLyBYWFggZWxlbWVudCBzaG91bGQgb3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbmlsbGVkKCkgewotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQl9Ci0KLQkvLyBhIGxpdHRsZSBmYWN0b3J5IGZvciBjb252ZXJ0aW5nIGZyb20gRE9NIHRvIG91ciByZXByZXNlbnRhdGlvbgotCXB1YmxpYyBzdGF0aWMgTm9kZVR5cGUgZG9tX3RvX3hwYXRoKE5vZGUgbm9kZSkgewotCQlhc3NlcnQgbm9kZSAhPSBudWxsOwotCQkKLQkJc3dpdGNoIChub2RlLmdldE5vZGVUeXBlKCkpIHsKLQkJY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKLQkJCXJldHVybiBuZXcgRWxlbWVudFR5cGUoKEVsZW1lbnQpIG5vZGUpOwotCi0JCWNhc2UgTm9kZS5DT01NRU5UX05PREU6Ci0JCQlyZXR1cm4gbmV3IENvbW1lbnRUeXBlKChDb21tZW50KSBub2RlKTsKLQotCQljYXNlIE5vZGUuQVRUUklCVVRFX05PREU6Ci0JCQlyZXR1cm4gbmV3IEF0dHJUeXBlKChBdHRyKSBub2RlKTsKLQotCQljYXNlIE5vZGUuVEVYVF9OT0RFOgotCQkJcmV0dXJuIG5ldyBUZXh0VHlwZSgoVGV4dCkgbm9kZSk7Ci0KLQkJY2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6Ci0JCQlyZXR1cm4gbmV3IERvY1R5cGUoKERvY3VtZW50KSBub2RlKTsKLQotCQljYXNlIE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgotCQkJcmV0dXJuIG5ldyBQSVR5cGUoKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikgbm9kZSk7Ci0KLQkJCS8vIFhYWAotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCi0JCX0KLQotCQkvLyB1bnJlYWNoLi4uIGhvcGVmdWxseQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGVsaW1pbmF0ZV9kdXBzKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCUhhc2h0YWJsZSBhZGRlZCA9IG5ldyBIYXNodGFibGUocnMuc2l6ZSgpKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCQkJTm9kZSBuID0gbm9kZS5ub2RlX3ZhbHVlKCk7Ci0KLQkJCWlmIChhZGRlZC5jb250YWluc0tleShuKSkKLQkJCQlpLnJlbW92ZSgpOwotCQkJZWxzZQotCQkJCWFkZGVkLnB1dChuLCBCb29sZWFuLlRSVUUpOwotCQl9Ci0JCXJldHVybiByczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHNvcnRfZG9jdW1lbnRfb3JkZXIoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJQXJyYXlMaXN0IHJlcyA9IG5ldyBBcnJheUxpc3QocnMuc2l6ZSgpKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCQkJYm9vbGVhbiBhZGRlZCA9IGZhbHNlOwotCi0JCQlmb3IgKGludCBqID0gMDsgaiA8IHJlcy5zaXplKCk7IGorKykgewotCQkJCU5vZGVUeXBlIHggPSAoTm9kZVR5cGUpIHJlcy5nZXQoaik7Ci0KLQkJCQlpZiAoYmVmb3JlKG5vZGUsIHgpKSB7Ci0JCQkJCXJlcy5hZGQoaiwgbm9kZSk7Ci0JCQkJCWFkZGVkID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKCFhZGRlZCkKLQkJCQlyZXMuYWRkKG5vZGUpOwotCQl9Ci0KLQkJcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSByZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQotCQkJcnMuYWRkKG5vZGUpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzYW1lKE5vZGVUeXBlIGEsIE5vZGVUeXBlIGIpIHsKLQkJcmV0dXJuIChhLm5vZGVfdmFsdWUoKS5pc1NhbWVOb2RlKGIubm9kZV92YWx1ZSgpKSk7Ci0JCS8vIFdoaWxlIGNvbXBhcmVfbm9kZShhLCBiKSA9PSAwIGlzIHRlbXB0aW5nLCBpdCBpcyBhbHNvIGV4cGVuc2l2ZQotCX0KLQotCXB1YmxpYyBib29sZWFuIGJlZm9yZShOb2RlVHlwZSB0d28pIHsKLQkJcmV0dXJuIGJlZm9yZSh0aGlzLCB0d28pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBiZWZvcmUoTm9kZVR5cGUgYSwgTm9kZVR5cGUgYikgewotCQlyZXR1cm4gY29tcGFyZV9ub2RlKGEsIGIpIDwgMDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBhZnRlcihOb2RlVHlwZSB0d28pIHsKLQkJcmV0dXJuIGFmdGVyKHRoaXMsIHR3byk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGFmdGVyKE5vZGVUeXBlIGEsIE5vZGVUeXBlIGIpIHsKLQkJcmV0dXJuIGNvbXBhcmVfbm9kZShhLCBiKSA+IDA7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIGludCBjb21wYXJlX25vZGUoTm9kZVR5cGUgYSwgTm9kZVR5cGUgYikgewotCQlOb2RlIG5vZGVBID0gYS5ub2RlX3ZhbHVlKCk7Ci0JCU5vZGUgbm9kZUIgPSBiLm5vZGVfdmFsdWUoKTsKLQkJCi0JCWlmIChub2RlQSA9PSBub2RlQiB8fCBub2RlQS5pc1NhbWVOb2RlKG5vZGVCKSkgcmV0dXJuIDA7Ci0KLQkJRG9jdW1lbnQgZG9jQSA9IGdldERvY3VtZW50KG5vZGVBKTsKLQkJRG9jdW1lbnQgZG9jQiA9IGdldERvY3VtZW50KG5vZGVCKTsKLQkJCi0JCWlmIChkb2NBICE9IGRvY0IgJiYgISBkb2NBLmlzU2FtZU5vZGUoZG9jQikpIHsKLQkJCXJldHVybiBjb21wYXJlRG9jdW1lbnRzKGRvY0EsIGRvY0IpOwotCQl9Ci0JCXNob3J0IHJlbGF0aW9uID0gbm9kZUEuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZUIpOwotCQlpZiAoKHJlbGF0aW9uICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcpICE9IDApIAotCQkJICByZXR1cm4gMTsKLQkJaWYgKChyZWxhdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSAhPSAwKSAKLQkJCSAgcmV0dXJuIC0xOwotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCByZXN1bHQgZnJvbSBub2RlIGNvbXBhcmlzb246ICIgKyByZWxhdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGNvbXBhcmVEb2N1bWVudHMoRG9jdW1lbnQgZG9jQSwgRG9jdW1lbnQgZG9jQikgewotCQkvLyBBcmJpdHJhcnkgYnV0IGZ1bGZpbGxzIHRoZSBzcGVjIChwcm92aWRlZCBkb2N1bWVuVVJJIGlzIGFsd2F5cyBzZXQpCi0JCWlmIChkb2NCLmdldERvY3VtZW50VVJJKCkgPT0gbnVsbCAmJiBkb2NBLmdldERvY3VtZW50VVJJKCkgPT0gbnVsbCkgewotCQkJLy8gQmVzdCBndWVzcwotCQkJcmV0dXJuIDA7IAotCQl9Ci0JCXJldHVybiBkb2NCLmdldERvY3VtZW50VVJJKCkuY29tcGFyZVRvKGRvY0EuZ2V0RG9jdW1lbnRVUkkoKSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoTm9kZSBub2RlQSkgewotCQlyZXR1cm4gbm9kZUEgaW5zdGFuY2VvZiBEb2N1bWVudCA/IChEb2N1bWVudClub2RlQSA6IG5vZGVBLmdldE93bmVyRG9jdW1lbnQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgT2JqZWN0IGdldFR5cGVkVmFsdWVGb3JQcmltaXRpdmVUeXBlKFhTVHlwZURlZmluaXRpb24gdHlwZURlZikgewkJCi0JCU9iamVjdCBzY2hlbWFUeXBlVmFsdWUgPSBudWxsOwotCQlpZiAodHlwZURlZiA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbmV3IFhTVW50eXBlZEF0b21pYyhzdHJpbmdfdmFsdWUoKSk7Ci0JCX0KLQkJU3RyaW5nIHR5cGVOYW1lID0gdHlwZURlZi5nZXROYW1lKCk7Ci0JCWlmICgiZGF0ZSIuZXF1YWxzKHR5cGVOYW1lKSkgewkJCi0JCSAgIHNjaGVtYVR5cGVWYWx1ZSA9IFhTRGF0ZS5wYXJzZV9kYXRlKHN0cmluZ192YWx1ZSgpKTsKLQkJfQotCQllbHNlIGlmICgiaW50Ii5lcXVhbHModHlwZU5hbWUpKSB7CQkKLQkJICAgc2NoZW1hVHlwZVZhbHVlID0gbmV3IFhTSW50KG5ldyBCaWdJbnRlZ2VyKHN0cmluZ192YWx1ZSgpKSk7Ci0JCX0KLQkJZWxzZSBpZiAoImxvbmciLmVxdWFscyh0eXBlTmFtZSkpIHsJCQotCQkgIHNjaGVtYVR5cGVWYWx1ZSA9IG5ldyBYU0xvbmcobmV3IEJpZ0ludGVnZXIoc3RyaW5nX3ZhbHVlKCkpKTsKLQkgICAgfQotCQllbHNlIGlmICgiaW50ZWdlciIuZXF1YWxzKHR5cGVOYW1lKSkgewkJCi0JCSAgc2NoZW1hVHlwZVZhbHVlID0gbmV3IFhTSW50ZWdlcihuZXcgQmlnSW50ZWdlcihzdHJpbmdfdmFsdWUoKSkpOwotCQl9Ci0JCWVsc2UgaWYgKCJkb3VibGUiLmVxdWFscyh0eXBlTmFtZSkpIHsJCQotCQkgIHNjaGVtYVR5cGVWYWx1ZSA9IG5ldyBYU0RvdWJsZShEb3VibGUucGFyc2VEb3VibGUoc3RyaW5nX3ZhbHVlKCkpKTsKLQkJfQotCQllbHNlIGlmICgiZmxvYXQiLmVxdWFscyh0eXBlTmFtZSkpIHsJCQotCQkgIHNjaGVtYVR5cGVWYWx1ZSA9IG5ldyBYU0Zsb2F0KEZsb2F0LnBhcnNlRmxvYXQoc3RyaW5nX3ZhbHVlKCkpKTsKLQkgICAgfQotCQllbHNlIGlmICgiZGVjaW1hbCIuZXF1YWxzKHR5cGVOYW1lKSkgewkJCi0JCSAgc2NoZW1hVHlwZVZhbHVlID0gbmV3IFhTRGVjaW1hbChuZXcgQmlnRGVjaW1hbChzdHJpbmdfdmFsdWUoKSkpOwotCQl9IGVsc2UgaWYgKCJkYXRlVGltZSIuZXF1YWxzKHR5cGVOYW1lKSkgewotCQkgIHNjaGVtYVR5cGVWYWx1ZSA9IFhTRGF0ZVRpbWUucGFyc2VEYXRlVGltZShzdHJpbmdfdmFsdWUoKSk7Ci0JCX0gZWxzZSBpZiAoInRpbWUiLmVxdWFscyh0eXBlTmFtZSkpIHsKLQkJCXNjaGVtYVR5cGVWYWx1ZSA9IFhTVGltZS5wYXJzZV90aW1lKHN0cmluZ192YWx1ZSgpKTsKLQkJfSBlbHNlIGlmICgiZGF0ZSIuZXF1YWxzKHR5cGVOYW1lKSkgewotCQkJc2NoZW1hVHlwZVZhbHVlID0gWFNEYXRlLnBhcnNlX2RhdGUoc3RyaW5nX3ZhbHVlKCkpOwotCQl9IGVsc2UgaWYgKCJib29sZWFuIi5lcXVhbHModHlwZU5hbWUpKSB7Ci0JCQlzY2hlbWFUeXBlVmFsdWUgPSBuZXcgWFNCb29sZWFuKEJvb2xlYW4udmFsdWVPZihzdHJpbmdfdmFsdWUoKSkpOwotCQl9IGVsc2UgaWYgKCJOT1RBVElPTiIuZXF1YWxzKHR5cGVOYW1lKSkgewotCQkJc2NoZW1hVHlwZVZhbHVlID0gbmV3IFhTU3RyaW5nKHN0cmluZ192YWx1ZSgpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHNjaGVtYVR5cGVWYWx1ZTsKLQl9Ci0JCi0JcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNJRCgpOwotCQotCXB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzSURSRUYoKTsKLQotCS8qKgotCSAqIFV0aWxpdHkgbWV0aG9kIHRvIGNoZWNrIHRvIHNlZSBpZiBhIHBhcnRpY3VsYXIgVHlwZUluZm8gbWF0Y2hlcy4KLQkgKiBAcGFyYW0gdHlwZUluZm8KLQkgKiBAcGFyYW0gdHlwZU5hbWUKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNUeXBlKFR5cGVJbmZvIHR5cGVJbmZvLCBTdHJpbmcgdHlwZU5hbWUpIHsKLQkJaWYgKHR5cGVJbmZvICE9IG51bGwpIHsKLQkJCVN0cmluZyB0eXBlSW5mb05hbWUgPSB0eXBlSW5mby5nZXRUeXBlTmFtZSgpOwotCQkJaWYgKHR5cGVJbmZvTmFtZSAhPSBudWxsKSB7Ci0JCQkJaWYgKHR5cGVJbmZvLmdldFR5cGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSh0eXBlTmFtZSkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfSAKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9OdW1lcmljVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9OdW1lcmljVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjUyZjU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvTnVtZXJpY1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBOdW1lcmljVHlwZSBkYXRhdHlwZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTnVtZXJpY1R5cGUgZXh0ZW5kcyBDdHJUeXBlCi0KLWltcGxlbWVudHMgQ21wRXEsIENtcEd0LCBDbXBMdCwKLQotTWF0aFBsdXMsIE1hdGhNaW51cywgTWF0aFRpbWVzLCBNYXRoRGl2LCBNYXRoSURpdiwgTWF0aE1vZCB7Ci0KLQkvLyBYWFggbmVlZGVkIGZvciBmbjpib29sZWFuCi0JLyoqCi0JICogQ2hlY2sgd2hldGhlciBub2RlIHJlcHJlc250cyAwCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIG5vZGUgcmVwcmVzbnRzIDAuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHplcm8oKTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgbnVtYmVyCi0JICogc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBSZXN1bHRTZXF1ZW5jZSB1bmFyeV9taW51cygpOwotCi0JLy8gbnVtZXJpYyBmdW5jdGlvbnMKLQkvKioKLQkgKiBBYnNvbHV0ZXMgdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICovCi0JcHVibGljIGFic3RyYWN0IE51bWVyaWNUeXBlIGFicygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG51bWJlciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgTnVtZXJpY1R5cGUgY2VpbGluZygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0JICogICAgICAgICBudW1iZXIgc3RvcmVkCi0JICovCi0JcHVibGljIGFic3RyYWN0IE51bWVyaWNUeXBlIGZsb29yKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICogCi0JICogQHJldHVybiBBIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBOdW1lcmljVHlwZSByb3VuZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKCk7Ci0JCi0JcHVibGljIGFic3RyYWN0IE51bWVyaWNUeXBlIHJvdW5kX2hhbGZfdG9fZXZlbihpbnQgcHJlY2lzaW9uKTsKLQotCXByb3RlY3RlZCBBbnlUeXBlIGdldF9zaW5nbGVfYXJnKFJlc3VsdFNlcXVlbmNlIHJzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKHJzLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlyZXR1cm4gcnMuZmlyc3QoKTsKLQl9Ci0KLQkvKioqCi0JICogQ2hlY2sgd2hldGhlciB0aGUgc3VwcGxpZWQgbm9kZSBpcyBvZiB0aGUgc3VwcGxpZWQgdHlwZQotCSAqIAotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgVGhlIG5vZGUgYmVpbmcgdGVzdGVkCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFRoZSB0eXBlIGV4cGVjdGVkCi0JICogQHJldHVybiBUaGUgbm9kZSBiZWluZyB0ZXN0ZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIElmIG5vZGUgYmVpbmcgdGVzdGVkIGlzIG5vdCBvZiBleHBlY3RlZCB0eXBlCi0JICovCi0JcHVibGljIHN0YXRpYyBBbnlUeXBlIGdldF9zaW5nbGVfdHlwZShBbnlUeXBlIGF0LCBDbGFzcyB0eXBlKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJaWYgKCF0eXBlLmlzSW5zdGFuY2UoYXQpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlyZXR1cm4gYXQ7Ci0JfQotCi0JLyoqKgotCSAqIENoZWNrIHdoZXRoZXIgZmlyc3Qgbm9kZSBpbiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSBpcyBvZiB0aGUgc3VwcGxpZWQKLQkgKiB0eXBlCi0JICogCi0JICogQHBhcmFtIHJzCi0JICogICAgICAgICAgICBUaGUgbm9kZSBiZWluZyB0ZXN0ZWQKLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVGhlIHR5cGUgZXhwZWN0ZWQKLQkgKiBAcmV0dXJuIFRoZSBub2RlIGJlaW5nIHRlc3RlZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgSWYgbm9kZSBiZWluZyB0ZXN0ZWQgaXMgbm90IG9mIGV4cGVjdGVkIHR5cGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFueVR5cGUgZ2V0X3NpbmdsZV90eXBlKFJlc3VsdFNlcXVlbmNlIHJzLCBDbGFzcyB0eXBlKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChycy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQW55VHlwZSBhdCA9IHJzLmZpcnN0KCk7Ci0KLQkJaWYgKCF0eXBlLmlzSW5zdGFuY2UoYXQpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlyZXR1cm4gYXQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9QSVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvUElUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNGVmNGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9QSVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgRGF2aWQgQ2FydmVyICAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgUHJvY2Vzc2luZ0luc3RydWN0aW9uIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBQSVR5cGUgZXh0ZW5kcyBOb2RlVHlwZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gPSAicHJvY2Vzc2luZyBpbnN0cnVjdGlvbiI7Ci0JcHJpdmF0ZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gX3ZhbHVlOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIHYKLQkgKiAgICAgICAgICAgIFRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRoaXMgbm9kZSByZXByZXNlbnRzCi0JICogQHBhcmFtIGRvY19vcmRlcgotCSAqICAgICAgICAgICAgVGhlIGRvY3VtZW50IG9yZGVyCi0JICovCi0JcHVibGljIFBJVHlwZShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gdikgewotCQlzdXBlcih2KTsKLQkJX3ZhbHVlID0gdjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRoaXMgbm9kZSByZXByZXNlbnRzCi0JICogCi0JICogQHJldHVybiBBY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50cwotCSAqLwotCXB1YmxpYyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJwcm9jZXNzaW5nLWluc3RydWN0aW9uIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFBST0NFU1NJTkdfSU5TVFJVQ1RJT047Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotCSAqIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5nZXREYXRhKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uCi0JICogc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotCSAqICAgICAgICAgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHR5cGVkX3ZhbHVlKCkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhzdHJpbmdfdmFsdWUoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIHRoZSBub2RlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gQSBRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUU5hbWUgbm9kZV9uYW1lKCkgewotCQlRTmFtZSBuYW1lID0gbmV3IFFOYW1lKG51bGwsIF92YWx1ZS5nZXRUYXJnZXQoKSk7Ci0KLQkJbmFtZS5zZXRfbmFtZXNwYWNlKG51bGwpOwotCi0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0lEKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzSURSRUYoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1FOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1FOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNmM0NjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9RTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjgxMTU5IC0gZGVidWdnaW5nIGNvbnZlbmllbmNlIHRvU3RyaW5nIG1ldGhvZCAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4ODg4NiAtIGFkZCB1bml0IHRlc3RzIGFuZCBmaXggZm46cmVzb2x2ZS1xbmFtZSBmdW5jdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiBhIFFOYW1lIGRhdGF0eXBlIChuYW1lIG9mIGEgbm9kZSkKLSAqLwotcHVibGljIGNsYXNzIFFOYW1lIGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfUV9OQU1FID0gInhzOlFOYW1lIjsKLQlwcml2YXRlIFN0cmluZyBfbmFtZXNwYWNlOwotCXByaXZhdGUgU3RyaW5nIF9wcmVmaXg7Ci0JcHJpdmF0ZSBTdHJpbmcgX2xvY2FsX3BhcnQ7Ci0JcHJpdmF0ZSBib29sZWFuIF9leHBhbmRlZDsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIHByZWZpeAotCSAqICAgICAgICAgICAgUHJlZml4IG9mIHRoZSBub2RlIG5hbWUKLQkgKiBAcGFyYW0gbG9jYWxfcGFydAotCSAqICAgICAgICAgICAgVGhlIG5vZGUgbmFtZSBpdHNlbGYKLQkgKiBAcGFyYW0gbnMKLQkgKiAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgdGhpcyBub2RlbmFtZSBiZWxvbmdzIHRvCi0JICovCi0JcHVibGljIFFOYW1lKFN0cmluZyBwcmVmaXgsIFN0cmluZyBsb2NhbF9wYXJ0LCBTdHJpbmcgbnMpIHsKLQkJdGhpcyhwcmVmaXgsIGxvY2FsX3BhcnQpOwotCQlpZiAobnMgIT0gbnVsbCkgewotCQkJc2V0X25hbWVzcGFjZShucyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSBwcmVmaXgKLQkgKiAgICAgICAgICAgIFByZWZpeCBvZiB0aGUgbm9kZSBuYW1lCi0JICogQHBhcmFtIGxvY2FsX3BhcnQKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIG5hbWUgaXRzZWxmCi0JICovCi0JcHVibGljIFFOYW1lKFN0cmluZyBwcmVmaXgsIFN0cmluZyBsb2NhbF9wYXJ0KSB7Ci0JCV9wcmVmaXggPSBwcmVmaXg7Ci0JCV9sb2NhbF9wYXJ0ID0gbG9jYWxfcGFydDsKLQkJX2V4cGFuZGVkID0gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgb25seSB0aGUgbm9kZSBuYW1lIChubyBwcmVmaXgpCi0JICogCi0JICogQHBhcmFtIGxvY2FsX3BhcnQKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIG5hbWUKLQkgKi8KLQlwdWJsaWMgUU5hbWUoU3RyaW5nIGxvY2FsX3BhcnQpIHsKLQkJdGhpcyhudWxsLCBsb2NhbF9wYXJ0KTsKLQkJc2V0X25hbWVzcGFjZShudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB3aXRoIGEgbnVsbCBwcmVmaXggYW5kIG51bGwgbm9kZSBuYW1lCi0JICovCi0JcHVibGljIFFOYW1lKCkgewotCQl0aGlzKG51bGwsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUU5hbWUgYnkgcGFyc2luZyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lCi0JICogQHJldHVybiBudWxsCi0JICovCi0JcHVibGljIHN0YXRpYyBRTmFtZSBwYXJzZV9RTmFtZShTdHJpbmcgc3RyKSB7Ci0JCWludCBvY2N1cnMgPSAwOwotCQlmb3IgKENoYXJhY3RlciBjaCA6IHN0ci50b0NoYXJBcnJheSgpKSB7Ci0JCQlpZiAoY2ggPT0gJzonKSB7Ci0JCQkJb2NjdXJzICs9MTsKLQkJCX0KLQkJfQotCQkKLQkJaWYgKG9jY3VycyA+IDEpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCQotCQlTdHJpbmdbXSB0b2tlbnMgPSBzdHIuc3BsaXQoIjoiKTsKLQotCQlpZiAodG9rZW5zLmxlbmd0aCA9PSAxKQotCQkJcmV0dXJuIG5ldyBRTmFtZSh0b2tlbnNbMF0pOwotCQkKLQkJaWYgKHRva2Vucy5sZW5ndGggPT0gMikgewotCQkJCXJldHVybiBuZXcgUU5hbWUodG9rZW5zWzBdLCB0b2tlbnNbMV0pOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBRTmFtZSBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBleHRyYWN0IGZyb20KLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBRTmFtZSBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCi0JCWlmICghKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nKSAmJiAhKGFhdCBpbnN0YW5jZW9mIFFOYW1lKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQotCQlTdHJpbmcgc2FyZyA9IGFhdC5zdHJpbmdfdmFsdWUoKTsKLQotCQlRTmFtZSBxbmFtZSA9IHBhcnNlX1FOYW1lKHNhcmcpOwotCQlpZiAocW5hbWUgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlycy5hZGQocW5hbWUpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZS4gVGhpcyBtZXRob2QgaXMKLQkgKiBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZygpCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gc3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpRTmFtZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19RX05BTUU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJRTmFtZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIlFOYW1lIjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZS4gVGhpcyBtZXRob2QgaXMKLQkgKiBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZ192YWx1ZSgpCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nKCkgewotCQlTdHJpbmcgcmVzID0gIiI7Ci0KLQkJaWYgKF9wcmVmaXggIT0gbnVsbCkgewotCQkJcmVzID0gX3ByZWZpeCArICI6IjsKLQkJfQotCi0JCXJlcyArPSBfbG9jYWxfcGFydDsKLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aG5hbWUgaW5jbHVkaW5nIHRoZSBuYW1lc3BhY2UuIFRoaXMgbWV0aG9kIG11c3Qgbm90Ci0JICogYmUgY2FsbGVkIGlmIGEgbmFtZXNwYWNlIGRvZXMgZXhpc3QgZm9yIHRoaXMgbm9kZQotCSAqIAotCSAqIEByZXR1cm4gRnVsbCBwYXRobmFtZSBpbmNsdWRpbmcgbmFtZXNwYWNlCi0JICovCi0JcHVibGljIFN0cmluZyBleHBhbmRlZF9uYW1lKCkgewotCQlhc3NlcnQgX2V4cGFuZGVkOwotCQkvLyBpZighX2V4cGFuZGVkKQotCQkvLyByZXR1cm4gbnVsbDsKLQotCQlTdHJpbmcgZSA9ICIiOwotCQlpZiAoX25hbWVzcGFjZSAhPSBudWxsKQotCQkJZSArPSBfbmFtZXNwYWNlICsgIjoiOwotCi0JCXJldHVybiBlICsgX2xvY2FsX3BhcnQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBwcmVmaXggb2YgdGhlIG5vZGUncyBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gUHJlZml4IG9mIHRoZSBub2RlJ3MgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHByZWZpeCgpIHsKLQkJcmV0dXJuIF9wcmVmaXg7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgbmFtZXNwYWNlIGZvciB0aGlzIG5vZGUKLQkgKiAKLQkgKiBAcGFyYW0gbgotCSAqICAgICAgICAgICAgTmFtZXNwYWNlIHRoaXMgbm9kZSBiZWxvbmdzIGluCi0JICovCi0JcHVibGljIHZvaWQgc2V0X25hbWVzcGFjZShTdHJpbmcgbikgewotCQlfbmFtZXNwYWNlID0gbjsKLQkJX2V4cGFuZGVkID0gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5hbWVzcGFjZSB0aGF0IHRoaXMgbm9kZSBiZWxvbmdzIGluLiBUaGlzIG1ldGhvZCBtdXN0IG5vdAotCSAqIGJlIGNhbGxlZCBpZiB0aGUgbm9kZSBkb2VzIG5vdCBiZWxvbmcgaW4gYSBuYW1lc3BhY2UKLQkgKiAKLQkgKiBAcmV0dXJuIE5hbWVzcGFjZSB0aGF0IHRoaXMgbm9kZSBiZWxvbmdzIGluCi0JICovCi0JcHVibGljIFN0cmluZyBuYW1lc3BhY2UoKSB7Ci0JCWFzc2VydCBfZXhwYW5kZWQ7Ci0JCXJldHVybiBfbmFtZXNwYWNlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbm9kZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIE5vZGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBsb2NhbCgpIHsKLQkJcmV0dXJuIF9sb2NhbF9wYXJ0OwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciB3aGV0aGVyIGEgbmFtZXNwYWNlIGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoaXMgbm9kZQotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWZpbmVkIGZvciBub2RlLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBleHBhbmRlZCgpIHsKLQkJcmV0dXJuIF9leHBhbmRlZDsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBRTmFtZSBhbmQgYSBzdXBwbGllZCBRTmFtZQotCSAqIAotCSAqIEBwYXJhbSBvYmoKLQkgKiAgICAgICAgICAgIFRoZSBvYmplY3QgdG8gY29tcGFyZSB3aXRoLiBTaG91bGQgYmUgb2YgdHlwZSBRTmFtZQotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudCB0aGUgc2FtZSBub2RlLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotCi0JCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgY29tcGFyaW5nIGEgcW5hbWUKLQkJaWYgKCEob2JqIGluc3RhbmNlb2YgUU5hbWUpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVFOYW1lIGFyZyA9IChRTmFtZSkgb2JqOwotCi0JCS8vIGlmIHRoZXkgYXJlbid0IGV4cGFuZGVkLi4uIHdlIGNhbid0IGNvbXBhcmUgdGhlbQotCQlpZiAoIV9leHBhbmRlZCB8fCAhYXJnLmV4cGFuZGVkKCkpIHsKLQkJCWFzc2VydCBmYWxzZTsgLy8gWFhYIG5vdCBzdHJpY2x5IG5lY2Vzc2FyeQotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJLy8gdHdvIGNhc2VzOiBudWxsID09IG51bGwsIG9yIC5lcXVhbHMob3RoZXIpCi0JCVN0cmluZyBhcmduID0gYXJnLm5hbWVzcGFjZSgpOwotCQlpZiAoX25hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQlpZiAoIV9uYW1lc3BhY2UuZXF1YWxzKGFyZ24pKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfSBlbHNlIHsKLQkJCWlmIChhcmduICE9IG51bGwpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJU3RyaW5nIGFyZ2wgPSBhcmcubG9jYWwoKTsKLQkJLy8gWFhYIGxvY2FsIHBhcnQgc2hvdWxkIGFsd2F5cyBiZSBub24gbnVsbCA/Ci0JCWlmIChfbG9jYWxfcGFydCAhPSBudWxsKSB7Ci0JCQlpZiAoIV9sb2NhbF9wYXJ0LmVxdWFscyhhcmdsKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYXJnbCAhPSBudWxsKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZXMgdGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gVGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0JCWludCBuYW1lc3BhY2UgPSAzOwotCQlpbnQgbG9jYWwgPSA0OwotCQlpbnQgcmVzdWx0ID0gMDsKLQotCQlhc3NlcnQgZXhwYW5kZWQoKTsKLQotCQlpZiAoX25hbWVzcGFjZSAhPSBudWxsKQotCQkJbmFtZXNwYWNlID0gX25hbWVzcGFjZS5oYXNoQ29kZSgpOwotCQlpZiAoX2xvY2FsX3BhcnQgIT0gbnVsbCkKLQkJCWxvY2FsID0gX2xvY2FsX3BhcnQuaGFzaENvZGUoKTsKLQotCQlyZXN1bHQgPSBuYW1lc3BhY2U7Ci0JCXJlc3VsdCBePSAoMiAqIGxvY2FsKTsKLQotCQlpZiAoX2V4cGFuZGVkKQotCQkJcmVzdWx0IF49IChyZXN1bHQgKyAxKTsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIFFOYW1lIGFuZCB0aGUgc3VwcGxpZWQgUU5hbWUKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUU5hbWUgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50IHRoZSBzYW1lIG5vZGUuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlRTmFtZSB2YWwgPSAoUU5hbWUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsIFFOYW1lLmNsYXNzKTsKLQkJcmV0dXJuIGVxdWFscyh2YWwpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlyZXR1cm4gc3RyaW5nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9UZXh0VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9UZXh0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNThiZjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvVGV4dFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgRGF2aWQgQ2FydmVyICAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgVGV4dFR5cGUgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFRleHRUeXBlIGV4dGVuZHMgTm9kZVR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUID0gInRleHQiOwotCXByaXZhdGUgVGV4dCBfdmFsdWU7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSB2Ci0JICogICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIFRleHRUeXBlIG5vZGUKLQkgKi8KLQlwdWJsaWMgVGV4dFR5cGUoVGV4dCB2KSB7Ci0JCXN1cGVyKHYpOwotCQlfdmFsdWUgPSB2OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAidGV4dCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBURVhUOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHZhbHVlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgdmFsdWUgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWUuZ2V0Tm9kZVZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBUZXh0IHZhbHVlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFRleHQgdmFsdWUgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHR5cGVkX3ZhbHVlKCkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJcnMuYWRkKG5ldyBYU1VudHlwZWRBdG9taWMoX3ZhbHVlLmdldERhdGEoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBVbnN1cHBvcnRlZCBtZXRob2QgZm9yIHRoaXMgbm9kZXR5cGUuCi0JICogCi0JICogQHJldHVybiBudWxsIChubyB1c2VyIGRlZmluZWQgbmFtZSBmb3IgdGhpcyBub2RlIGdldHMgZGVmaW5lZCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUU5hbWUgbm9kZV9uYW1lKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBXaWxsIGFsd2F5cyByZXR1cm4gZmFsc2U7Ci0JICogQHNpbmNlIDEuMQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzSUQoKSB7Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0lEUkVGKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YUGF0aERlY2ltYWxGb3JtYXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFBhdGhEZWNpbWFsRm9ybWF0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDM3MTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YUGF0aERlY2ltYWxGb3JtYXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODM0MDQgLSBmaXhlZCBsb2NhbGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OwotaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0U3ltYm9sczsKLWltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotCi0vKioKLSAqIFRoaXMgaXMgYW4gWFBhdGggc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgRGVjaW1hbEZvcm1hdCB0byBoYW5kbGUKLSAqIHNvbWUgb2YgdGhlIHhwYXRoIHNwZWNpZmljIGZvcm1hdHRpbmcgcmVxdWlyZW1lbnRzLiAgIFNwZWNpZmljYWxseQotICogaXQgYWxsb3dzIGZvciBFIyB0byBiZSByZXByZXNlbnRlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBleHBvbmVudCB2YWx1ZQotICogaXMgb3B0aW9uYWwuICBPdGhlcndpc2UgYWxsIGV4aXN0aW5nIERlY2ltYWxGb3JtYXQgcGF0dGVybnMgYXJlIGhhbmRsZWQKLSAqIGFzIGlzLgotICogQGF1dGhvciBkY2FydmVyCi0gKiBAc2VlIDEuMQotICoKLSAqLwotcHVibGljIGNsYXNzIFhQYXRoRGVjaW1hbEZvcm1hdCBleHRlbmRzIERlY2ltYWxGb3JtYXQgewotCQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC04MjI5ODg1OTU1ODY0MTg3NDAwTDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVHX0lORklOSVRZID0gIi1JTkYiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1NfSU5GSU5JVFkgPSAiSU5GIjsKLQotCXB1YmxpYyBYUGF0aERlY2ltYWxGb3JtYXQoU3RyaW5nIHBhdHRlcm4pIHsKLQkJLy8gWHBhdGggaGFyZGNvZGVzIHRoaXMgdG8gVVMgbG9jYWxlCi0JCXN1cGVyKHBhdHRlcm4sIG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUuVVMpKTsKLQl9Ci0KLQkvKioKLQkgKiBGb3JtYXRzIHRoZSBzdHJpbmcgZHJvcHBpbmcgYSBaZXJvIEV4cG9uZW50IFZhbHVlIGlmIGl0IGV4aXN0cy4KLQkgKiBAcGFyYW0gb2JqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmcgeHBhdGhGb3JtYXQoT2JqZWN0IG9iaikgewotCQlyZXR1cm4gZm9ybWF0WFBhdGgob2JqKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBmb3JtYXRYUGF0aChPYmplY3Qgb2JqKSB7Ci0JCVN0cmluZyBjdXJQYXR0ZXJuID0gdG9QYXR0ZXJuKCk7Ci0JCVN0cmluZyBuZXdQYXR0ZXJuID0gY3VyUGF0dGVybi5yZXBsYWNlKCJFMCIsICIiKTsKLQkJaWYgKG9iaiBpbnN0YW5jZW9mIEZsb2F0KSB7Ci0gICAgICAgICAgICByZXR1cm4gZm9ybWF0RmxvYXRWYWx1ZShvYmosIGN1clBhdHRlcm4sIG5ld1BhdHRlcm4pOwotCQl9Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBEb3VibGUpIHsKLQkJCXJldHVybiBmb3JtYXREb3VibGVWYWx1ZShvYmosIGN1clBhdHRlcm4sIG5ld1BhdHRlcm4pOwotCQl9Ci0JCXJldHVybiBzdXBlci5mb3JtYXQob2JqLCBuZXcgU3RyaW5nQnVmZmVyKCksIG5ldyBGaWVsZFBvc2l0aW9uKDApKS50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGZvcm1hdERvdWJsZVZhbHVlKE9iamVjdCBvYmosIFN0cmluZyBjdXJQYXR0ZXJuLAotCQkJU3RyaW5nIG5ld1BhdHRlcm4pIHsKLQkJRG91YmxlIGRvdWJsZVZhbHVlID0gKERvdWJsZSkgb2JqOwotCQlpZiAoaXNEb3VibGVOZWdhdGl2ZUluZmluaXR5KGRvdWJsZVZhbHVlKSkgewotCQkJcmV0dXJuIE5FR19JTkZJTklUWTsKLQkJfQotCQlpZiAoaXNEb3VibGVQb3NpdGl2ZUluZmluaXR5KGRvdWJsZVZhbHVlKSkgewotCQkJcmV0dXJuIFBPU19JTkZJTklUWTsKLQkJfQotCQlkb3VibGVYUGF0aFBhdHRlcm4ob2JqLCBjdXJQYXR0ZXJuLCBuZXdQYXR0ZXJuKTsKLQkJcmV0dXJuIGZvcm1hdChvYmosIG5ldyBTdHJpbmdCdWZmZXIoKSwgbmV3IEZpZWxkUG9zaXRpb24oMCkpLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvdWJsZVhQYXRoUGF0dGVybihPYmplY3Qgb2JqLCBTdHJpbmcgY3VyUGF0dGVybiwKLQkJCVN0cmluZyBuZXdQYXR0ZXJuKSB7Ci0JCUJpZ0RlY2ltYWwgZG91YlZhbHVlID0gQmlnRGVjaW1hbC52YWx1ZU9mKCgoRG91YmxlKSBvYmopKTsKLQkJQmlnRGVjaW1hbCBtaW5WYWx1ZSA9IG5ldyBCaWdEZWNpbWFsKCItMUU2Iik7Ci0JCUJpZ0RlY2ltYWwgbWF4VmFsdWUgPSBuZXcgQmlnRGVjaW1hbCgiMUU2Iik7Ci0JCWlmIChkb3ViVmFsdWUuY29tcGFyZVRvKG1pblZhbHVlKSA+IDAgJiYgZG91YlZhbHVlLmNvbXBhcmVUbyhtYXhWYWx1ZSkgPCAwKSB7Ci0JCQlhcHBseVBhdHRlcm4obmV3UGF0dGVybik7Ci0JCX0gZWxzZSB7IC8vaWYgKGRvdWJWYWx1ZS5jb21wYXJlVG8obWluVmFsdWUpIDwgMCkgewotCQkJYXBwbHlQYXR0ZXJuKGN1clBhdHRlcm4ucmVwbGFjZSgiMC4jIiwgIjAuMCIpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0RvdWJsZVBvc2l0aXZlSW5maW5pdHkoRG91YmxlIGRvdWJsZVZhbHVlKSB7Ci0JCXJldHVybiBkb3VibGVWYWx1ZSA9PSBEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzRG91YmxlTmVnYXRpdmVJbmZpbml0eShEb3VibGUgZG91YmxlVmFsdWUpIHsKLQkJcmV0dXJuIGRvdWJsZVZhbHVlID09IERvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBmb3JtYXRGbG9hdFZhbHVlKE9iamVjdCBvYmosIFN0cmluZyBjdXJQYXR0ZXJuLAotCQkJU3RyaW5nIG5ld1BhdHRlcm4pIHsKLQkJRmxvYXQgZmxvYXRWYWx1ZSA9IChGbG9hdCkgb2JqOwotCQlpZiAoaXNGbG9hdE5lZ0luZmluaXR5KGZsb2F0VmFsdWUpKSB7Ci0JCQlyZXR1cm4gTkVHX0lORklOSVRZOwotCQl9Ci0JCWlmIChpc0Zsb2F0UG9zSW5maW5pdHkoZmxvYXRWYWx1ZSkpIHsKLQkJCXJldHVybiBQT1NfSU5GSU5JVFk7Ci0JCX0KLQkJZmxvYXRYUGF0aFBhdHRlcm4oY3VyUGF0dGVybiwgbmV3UGF0dGVybiwgZmxvYXRWYWx1ZSk7Ci0JCXJldHVybiBmb3JtYXQob2JqLCBuZXcgU3RyaW5nQnVmZmVyKCksIG5ldyBGaWVsZFBvc2l0aW9uKDApKS50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0Zsb2F0UG9zSW5maW5pdHkoRmxvYXQgZmxvYXRWYWx1ZSkgewotCQlyZXR1cm4gZmxvYXRWYWx1ZSA9PSBGbG9hdC5QT1NJVElWRV9JTkZJTklUWTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNGbG9hdE5lZ0luZmluaXR5KEZsb2F0IGZsb2F0VmFsdWUpIHsKLQkJcmV0dXJuIGZsb2F0VmFsdWUgPT0gRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZsb2F0WFBhdGhQYXR0ZXJuKFN0cmluZyBjdXJQYXR0ZXJuLCBTdHJpbmcgbmV3UGF0dGVybiwKLQkJCUZsb2F0IGZsb2F0VmFsdWUpIHsKLQkJaWYgKGZsb2F0VmFsdWUgPiAtMUU2ZiAmJiBmbG9hdFZhbHVlIDwgMUU2ZikgewotCQkJCi0JCQlhcHBseVBhdHRlcm4obmV3UGF0dGVybik7Ci0JCX0gZWxzZSBpZiAoZmxvYXRWYWx1ZSA8PSAtMUU2ZikgewotCQkJYXBwbHlQYXR0ZXJuKGN1clBhdHRlcm4ucmVwbGFjZSgiMC4jIiwgIjAuMCIgKSk7Ci0JCX0KLQl9Ci0JCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQW55VVJJLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQW55VVJJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMWE0YmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0FueVVSSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZzI3NDcxOSAtIGltcGxlbWVudGF0aW9uIG9mIGVxdWFsaXR5IG9mIHhzOmFueVVSSSB2YWx1ZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIGZpeGVkIGNhc3RpbmcgdG8geHM6YW55VVJJIG9ubHkgc3RyaW5nLAotICogICAgICAgICB1bnR5cGVkQXRvbWljLCBhbmQgYW55VVJJIGFyZSBhbGxvd2VkLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgzNzc3IC0gaW1wbGVtZW50ZWQgZ3QsIGx0IGNvbXBhcmlzb24gY29kZS4KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTE1OSAtIGFkZGVkIHByb21vdGlvbiBvZiB4czphbnlVUkkgdG8gc3RyaW5nIChyZXZlcnNlIGNhc2UpIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEVxOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBHdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wTHQ7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIFVuaXZlcnNhbCBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIHJlZmVyZW5jZQotICovCi1wdWJsaWMgY2xhc3MgWFNBbnlVUkkgZXh0ZW5kcyBDdHJUeXBlIGltcGxlbWVudHMgQ21wRXEsIENtcEd0LCBDbXBMdCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfQU5ZX1VSSSA9ICJ4czphbnlVUkkiOwotCXByaXZhdGUgU3RyaW5nIF92YWx1ZTsKLQotCS8qKgotCSAqIEFyaXR5IDEgQ29uc3RydWN0b3IKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkkKLQkgKi8KLQlwdWJsaWMgWFNBbnlVUkkoU3RyaW5nIHgpIHsKLQkJX3ZhbHVlID0geDsKLQl9Ci0KLQkvKioKLQkgKiBBcml0eSAwIENvbnN0cnVjdG9yLiBJbml0aWF0ZXMgVVJJIHRvIG51bGwuCi0JICovCi0JcHVibGljIFhTQW55VVJJKCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIGZ1bGwgdHlwZSBwYXRobmFtZSBvZiB0aGlzIGRhdGF0eXBlCi0JICogCi0JICogQHJldHVybiAieHM6YW55VVJJIiwgdGhlIGZ1bGwgdHlwZSBwYXRobmFtZSBvZiB0aGlzIGRhdGF0eXBlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0FOWV9VUkk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdHlwZSBuYW1lIG9mIHRoaXMgZGF0YXR5cGUKLQkgKiAKLQkgKiBAcmV0dXJuICJhbnlVUkkiLCB0aGUgdHlwZSBuYW1lIG9mIHRoaXMgZGF0YXR5cGUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJhbnlVUkkiOwotCX0KLQotCS8qKgotCSAqIFRyYW5zZm9ybXMgYW5kIHJldHJpZXZlcyB0aGUgVVJJIHZhbHVlIG9mIHRoaXMgVVJJIGRhdGF0eXBlIGluIFN0cmluZwotCSAqIGZvcm1hdAotCSAqIAotCSAqIEByZXR1cm4gdGhlIFVSSSB2YWx1ZSBoZWxkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgdGhlIFVSSSBkYXRhdHlwZSBhcyBhCi0JICogICAgICAgICBTdHJpbmcKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGlvbiBvZiBhIHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIGEgVVJJIGZyb20gYSBwcmV2aW91cyByZXN1bHQKLQkgKiBzZXF1ZW5jZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBwcmV2aW91cyByZXN1bHQgc2VxdWVuY2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgc3VwcGxpZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCWlmICghKGFhdC5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6c3RyaW5nIikKLQkJCQl8fCBhYXQuc3RyaW5nX3R5cGUoKS5lcXVhbHMoWFNfQU5ZX1VSSSkgfHwgYWF0LnN0cmluZ190eXBlKCkKLQkJCQkuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCXJzLmFkZChuZXcgWFNBbnlVUkkoYWF0LnN0cmluZ192YWx1ZSgpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLQkgKiBtdXN0IGJlIG9mIHR5cGUgeHM6YW55VVJJIChvciwgYnkgcHJvbW90aW9uIG9mIHRoaXMsIHhzOnN0cmluZykKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnIGluc3RhbmNlb2YgWFNBbnlVUkkgfHwgYXJnIGluc3RhbmNlb2YgWFNTdHJpbmcpIHsKLQkJCWlmICh0aGlzLnN0cmluZ192YWx1ZSgpLmVxdWFscyhhcmcuc3RyaW5nX3ZhbHVlKCkpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIEdyZWF0ZXIgdGhhbiBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0JICogbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBib29sZWFuIGd0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKCEoYXJnIGluc3RhbmNlb2YgWFNBbnlVUkkgfHwgYXJnIGluc3RhbmNlb2YgWFNTdHJpbmcpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwkKLQkJfQotCQkKLQkJU3RyaW5nIGFueVVSSSA9IHRoaXMuc3RyaW5nX3ZhbHVlKCk7Ci0JCVN0cmluZyBjb21wYXJlVG9VUkkgPSBhcmcuc3RyaW5nX3ZhbHVlKCk7Ci0JCWlmIChhbnlVUkkuY29tcGFyZVRvKGNvbXBhcmVUb1VSSSkgPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBMZXNzIHRoYW4gY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotCSAqIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKQotCSAqIAotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmICghKGFyZyBpbnN0YW5jZW9mIFhTQW55VVJJIHx8IGFyZyBpbnN0YW5jZW9mIFhTU3RyaW5nKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCQkKLQkJU3RyaW5nIGFueVVSSSA9IHRoaXMuc3RyaW5nX3ZhbHVlKCk7Ci0JCVN0cmluZyBjb21wYXJlVG9VUkkgPSBhcmcuc3RyaW5nX3ZhbHVlKCk7Ci0JCWlmIChhbnlVUkkuY29tcGFyZVRvKGNvbXBhcmVUb1VSSSkgPCAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCYXNlNjRCaW5hcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCYXNlNjRCaW5hcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM5NjgwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQmFzZTY0QmluYXJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODEwNDYgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLmR2LnV0aWwuQmFzZTY0OwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYudXRpbC5IZXhCaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEVxOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNCYXNlNjRCaW5hcnkgZXh0ZW5kcyBDdHJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0JBU0U2NF9CSU5BUlkgPSAieHM6YmFzZTY0QmluYXJ5IjsKLQlwcml2YXRlIFN0cmluZyBfdmFsdWU7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgdG8gaW5pdGlhbGlzZSB0bwotCSAqLwotCXB1YmxpYyBYU0Jhc2U2NEJpbmFyeShTdHJpbmcgeCkgewotCQlfdmFsdWUgPSB4OwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIG51bGwKLQkgKi8KLQlwdWJsaWMgWFNCYXNlNjRCaW5hcnkoKSB7Ci0JCXRoaXMobnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpiYXNlNjRCaW5hcnkiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfQkFTRTY0X0JJTkFSWTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImJhc2U2NEJpbmFyeSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImJhc2U2NEJpbmFyeSI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotCSAqIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdmFsdWUoKQotCSAqIAotCSAqIEByZXR1cm4gVGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKQotCSAqIAotCSAqIEByZXR1cm4gVGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYmFzZTY0QmluYXJ5IHZhbHVlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGJhc2U2NEJpbmFyeSB2YWx1ZSAKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgYmFzZTY0QmluYXJ5IHZhbHVlIAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQkKLQkJU3RyaW5nIHN0cl92YWx1ZSA9IGFhdC5zdHJpbmdfdmFsdWUoKTsKLQkJCi0JCWJ5dGVbXSBkZWNvZGVkVmFsdWUgPSBCYXNlNjQuZGVjb2RlKHN0cl92YWx1ZSk7Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkpIHsKLQkJCWRlY29kZWRWYWx1ZSA9IEhleEJpbi5kZWNvZGUoc3RyX3ZhbHVlKTsKLQkJCWRlY29kZWRWYWx1ZSA9IEJhc2U2NC5lbmNvZGUoZGVjb2RlZFZhbHVlKS5nZXRCeXRlcygpOwotCQl9IGVsc2UgewotCQkJZGVjb2RlZFZhbHVlID0gc3RyX3ZhbHVlLmdldEJ5dGVzKCk7Ci0JCX0KLQkJaWYgKGRlY29kZWRWYWx1ZSAhPSBudWxsKSB7Ci0JCSAgcnMuYWRkKG5ldyBYU0Jhc2U2NEJpbmFyeShuZXcgU3RyaW5nKGRlY29kZWRWYWx1ZSkpKTsKLQkJfQotCQllbHNlIHsKLQkJICAvLyBpbnZhbGlkIGJhc2U2NCBzdHJpbmcKLQkJICB0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwkKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5KSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLQkgKiBtdXN0IGJlIG9mIHR5cGUgYmFzZTY0QmluYXJ5Ci0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBzYW1lLiBGYWxzZSBvdGhlcndpc2UuCi0JICogICAgICAgICAKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLSAgICAgIFN0cmluZyB2YWxUb0NvbXBhcmUgPSBhcmcuc3RyaW5nX3ZhbHVlKCk7Ci0gICAgICAKLSAgICAgIGJ5dGVbXSB2YWx1ZTEgPSBCYXNlNjQuZGVjb2RlKF92YWx1ZSk7Ci0gICAgICBieXRlW10gdmFsdWUyID0gQmFzZTY0LmRlY29kZSh2YWxUb0NvbXBhcmUpOwotICAgICAgaWYgKHZhbHVlMiA9PSBudWxsKSB7Ci0gICAgCXJldHVybiBmYWxzZTsgIAotICAgICAgfQotICAgICAgCi0gICAgICBpbnQgbGVuID0gdmFsdWUxLmxlbmd0aDsKLSAgICAgIGlmIChsZW4gIT0gdmFsdWUyLmxlbmd0aCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgaWYgKHZhbHVlMVtpXSAhPSB2YWx1ZTJbaV0pIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIHRydWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQm9vbGVhbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0Jvb2xlYW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwZmRmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQm9vbGVhbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcyNzQ3ODQgLSBpbXByb3ZlbWVudHMgdG8geHM6Ym9vbGVhbiBkYXRhIHR5cGUgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gY29ycmVjdGVkIGNhc3RpbmcgdG8gYm9vbGVhbi4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wR3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEx0OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSB0cnVlIG9yIGEgZmFsc2UgdmFsdWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0Jvb2xlYW4gZXh0ZW5kcyBDdHJUeXBlIGltcGxlbWVudHMgQ21wRXEsIENtcEd0LCBDbXBMdCB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0JPT0xFQU4gPSAieHM6Ym9vbGVhbiI7Ci0JcHJpdmF0ZSBib29sZWFuIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYXRlcyB0aGUgbmV3IHJlcHJlc2VudGF0aW9uIHRvIHRoZSBib29sZWFuIHN1cHBsaWVkCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICBJbml0aWFsaXplcyB0aGlzIGRhdGF0eXBlIHRvIHJlcHJlc2VudCB0aGlzIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgWFNCb29sZWFuKGJvb2xlYW4geCkgewotCQlfdmFsdWUgPSB4OwotCX0KLQotCS8qKgotCSAqIEluaXRpYXRlcyB0byBhIGRlZmF1bHQgcmVwcmVzZW50YXRpb24gb2YgZmFsc2UuCi0JICovCi0JcHVibGljIFhTQm9vbGVhbigpIHsKLQkgIHRoaXMoZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmJvb2xlYW4iLCB0aGUgZnVsbCBkYXRhdHlwZSBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19CT09MRUFOOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBkYXRhdHlwZSBuYW1lCi0JICogCi0JICogQHJldHVybiAiYm9vbGVhbiIsIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSBuYW1lLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImJvb2xlYW4iOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gIiIgKyBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgYm9vbGVhbiB2YWx1ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBhY3R1YWwgYm9vbGVhbiB2YWx1ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBib29sZWFuIHZhbHVlCi0JICogaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBib29sZWFuIHZhbHVlLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYm9vbGVhbiB2YWx1ZSBzdXBwbGllZC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJICByZXR1cm4gcnM7Ci0JCQotCQlBbnlUeXBlIGFueVR5cGUgPSBhcmcuZmlyc3QoKTsKLQkJCi0JCWlmIChhbnlUeXBlIGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fCBhbnlUeXBlIGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8Ci0JCQlhbnlUeXBlIGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwgYW55VHlwZSBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8Ci0JCQlhbnlUeXBlIGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0JCQotCQlTdHJpbmcgc3RyX3ZhbHVlID0gYW55VHlwZS5zdHJpbmdfdmFsdWUoKTsKLQkJCi0JCQotCQlpZiAoIShpc0Nhc3RhYmxlKGFueVR5cGUsIHN0cl92YWx1ZSkpKSB7Ci0JCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCQlCb29sZWFuIGIgPSBudWxsOwotCQlpZiAoaXNGYWxzZShzdHJfdmFsdWUpKSB7Ci0JCSAgYiA9IEJvb2xlYW4uRkFMU0U7CQotCQl9Ci0JCWVsc2UgewotCQkgIGIgPSBCb29sZWFuLlRSVUU7CQkKLQkJfQotCQkKLQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4oYi5ib29sZWFuVmFsdWUoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNGYWxzZShTdHJpbmcgc3RyX3ZhbHVlKSB7Ci0JCXJldHVybiBzdHJfdmFsdWUuZXF1YWxzKCIwIikgfHwgc3RyX3ZhbHVlLmVxdWFscygiZmFsc2UiKSB8fAotCQkgICAgc3RyX3ZhbHVlLmVxdWFscygiKzAiKSB8fCBzdHJfdmFsdWUuZXF1YWxzKCItMCIpIHx8Ci0JCSAgICBzdHJfdmFsdWUuZXF1YWxzKCIwLjBFMCIpIHx8IHN0cl92YWx1ZS5lcXVhbHMoIk5hTiIpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueVR5cGUgYW55VHlwZSwgU3RyaW5nIHN0cl92YWx1ZSkgewotCQlyZXR1cm4gc3RyX3ZhbHVlLmVxdWFscygiMCIpIHx8IHN0cl92YWx1ZS5lcXVhbHMoIjEiKSB8fCAKLQkJCSBzdHJfdmFsdWUuZXF1YWxzKCJ0cnVlIikgfHwgc3RyX3ZhbHVlLmVxdWFscygiZmFsc2UiKSB8fAotCQkJIGFueVR5cGUgaW5zdGFuY2VvZiBOdW1lcmljVHlwZTsKLQl9Ci0KLQkvLyBjb21wYXJpc29ucwotCS8qKgotCSAqIENvbXBhcmlzb24gZm9yIGVxdWFsaXR5IGJldHdlZW4gdGhlIHN1cHBsaWVkIGFuZCB0aGlzIGJvb2xlYW4KLQkgKiByZXByZXNlbnRhdGlvbi4gUmV0dXJucyB0cnVlIGlmIGJvdGggcmVwcmVzZW50IHNhbWUgYm9vbGVhbiB2YWx1ZSwgZmFsc2UKLQkgKiBvdGhlcndpc2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHRvIGNvbXBhcmUKLQkgKiAgICAgICAgICAgIHdpdGguCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIE5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlIGVxdWFsaXR5Ci0JICogICAgICAgICBjb21wYXJpc29uCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0Jvb2xlYW4gYmFyZyA9IChYU0Jvb2xlYW4pIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNCb29sZWFuLmNsYXNzKTsKLQotCQlyZXR1cm4gdmFsdWUoKSA9PSBiYXJnLnZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zCi0JICogdHJ1ZSBpZiB0aGlzIFhTQm9vbGVhbiByZXByZXNlbnRzIHRydWUgYW5kIHRoYXQgWFNCb29sZWFuIHN1cHBsaWVkCi0JICogcmVwcmVzZW50cyBmYWxzZS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHRvIGNvbXBhcmUKLQkgKiAgICAgICAgICAgIHdpdGguCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIE5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlCi0JICogICAgICAgICBjb21wYXJpc29uCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0Jvb2xlYW4gYmFyZyA9IChYU0Jvb2xlYW4pIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNCb29sZWFuLmNsYXNzKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0JCWlmICh2YWx1ZSgpICYmICFiYXJnLnZhbHVlKCkpCi0JCQlyZXN1bHQgPSB0cnVlOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGUgc3VwcGxpZWQgYW5kIHRoaXMgYm9vbGVhbiByZXByZXNlbnRhdGlvbi4gUmV0dXJucwotCSAqIHRydWUgaWYgdGhpcyBYU0Jvb2xlYW4gcmVwcmVzZW50cyBmYWxzZSBhbmQgdGhhdCBYU0Jvb2xlYW4gc3VwcGxpZWQKLQkgKiByZXByZXNlbnRzIHRydWUuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlCi0JICogICAgICAgICAgICB3aXRoLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBOZXcgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRydWUvZmFsc2UgcmVzdWx0IG9mIHRoZQotCSAqICAgICAgICAgY29tcGFyaXNvbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGx0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNCb29sZWFuIGJhcmcgPSAoWFNCb29sZWFuKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTQm9vbGVhbi5jbGFzcyk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotCQlpZiAoIXZhbHVlKCkgJiYgYmFyZy52YWx1ZSgpKQotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCeXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQnl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWYzMDQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCeXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MzkgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpieXRlIGRhdGEgdHlwZQotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU0J5dGUgZXh0ZW5kcyBYU1Nob3J0IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfQllURSA9ICJ4czpieXRlIjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU0J5dGUoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGJ5dGUgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgQnl0ZSB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNCeXRlKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpieXRlIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0JZVEU7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiYnl0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImJ5dGUiOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdieXRlJyBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBieXRlIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdieXRlJyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSBieXRlLgotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkKLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZwotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoLTEyOEwpOwotCQkJQmlnSW50ZWdlciBtYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMTI3TCk7CQkJCi0KLQkJCWlmIChiaWdJbnQuY29tcGFyZVRvKG1pbikgPCAwIHx8IGJpZ0ludC5jb21wYXJlVG8obWF4KSA+IDApIHsKLQkJCSAgIC8vIGludmFsaWQgaW5wdXQKLQkJCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7CQotCQkJfQotCQkJCi0JCQlycy5hZGQobmV3IFhTQnl0ZShiaWdJbnQpKTsKLQkJCQotCQkJcmV0dXJuIHJzOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQyYjY2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ3OTIgLSBpbXByb3ZlbWVudHMgdG8geHM6ZGF0ZSBjb25zdHJ1Y3RvciBmdW5jdGlvbi4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkIGNhc3RpbmcgaXNzdWUuIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjYyNzY1IC0gZml4IHR5cGUgdGVzdHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkR1cmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5YTUxHcmVnb3JpYW5DYWxlbmRhcjsKLQotLyoqCi0gKiBSZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgb2YgdGhlIGZvcm0geWVhci1tb250aC1kYXkgYW5kIG9wdGlvbmFsIHRpbWV6b25lCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RhdGUgZXh0ZW5kcyBDYWxlbmRhclR5cGUgaW1wbGVtZW50cyBDbXBFcSwgQ21wTHQsIENtcEd0LAotCi1NYXRoTWludXMsIE1hdGhQbHVzLAotCi1DbG9uZWFibGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19EQVRFID0gInhzOmRhdGUiOwotCXByaXZhdGUgQ2FsZW5kYXIgX2NhbGVuZGFyOwotCXByaXZhdGUgYm9vbGVhbiBfdGltZXpvbmVkOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiBhIHN1cHBsaWVkIGRhdGUKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBUaGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gYmUgc3RvcmVkCi0JICogQHBhcmFtIHR6Ci0JICogICAgICAgICAgICBUaGUgdGltZSB6b25lIG9mIHRoZSBkYXRlIHRvIGJlIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgWFNEYXRlKENhbGVuZGFyIGNhbCwgWFNEdXJhdGlvbiB0eikgewotCQlfY2FsZW5kYXIgPSBjYWw7Ci0KLQkJX3R6ID0gdHo7Ci0JCWlmICh0eiA9PSBudWxsKQotCQkJX3RpbWV6b25lZCA9IGZhbHNlOwotCQllbHNlCi0JCQlfdGltZXpvbmVkID0gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXRlCi0JICovCi0JcHVibGljIFhTRGF0ZSgpIHsKLQkJdGhpcyhuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSBuYW1lCi0JICogCi0JICogQHJldHVybiAiZGF0ZSIgd2hpY2ggaXMgdGhlIGRhdGF5cGUgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImRhdGUiOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgZGF0ZSByZXByZXNlbnRhdGlvbgotCSAqIAotCSAqIEByZXR1cm4gQSBjb3B5IG9mIHRoaXMgZGF0ZSByZXByZXNlbnRhdGlvbgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewotCQlDYWxlbmRhciBjID0gKENhbGVuZGFyKSBjYWxlbmRhcigpLmNsb25lKCk7Ci0JCVhTRHVyYXRpb24gdCA9IHR6KCk7Ci0KLQkJaWYgKHQgIT0gbnVsbCkKLQkJCXQgPSAoWFNEdXJhdGlvbikgdC5jbG9uZSgpOwotCi0JCXJldHVybiBuZXcgWFNEYXRlKGMsIHQpOwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgKG9mIHRoZSBmb3JtIHllYXItbW9udGgtZGF5IG9yCi0JICogeWVhci1tb250aC1kYXkrdGltZXpvbmUpIGFuZCBjb25zdHJ1Y3RzIGEgbmV3IFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZgotCSAqIGl0LgotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRGF0ZSBwYXJzZV9kYXRlKFN0cmluZyBzdHIpIHsKLQotCQlTdHJpbmcgZGF0ZSA9ICIiOwotCQlTdHJpbmcgdGltZSA9ICJUMDA6MDA6MDAuMCI7Ci0KLQkJaW50IGluZGV4ID0gc3RyLmluZGV4T2YoJysnLCAxKTsKLQkJaWYgKGluZGV4ID09IC0xKSB7Ci0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCctJywgMSk7Ci0JCQlpZiAoaW5kZXggPT0gLTEpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCctJywgaW5kZXggKyAxKTsKLQkJCWlmIChpbmRleCA9PSAtMSkKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJy0nLCBpbmRleCArIDEpOwotCQl9Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJ1onLCAxKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQlkYXRlID0gc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkvLyBoZXJlIHdlIGdvCi0JCQlkYXRlICs9IHRpbWU7Ci0JCQlkYXRlICs9IHN0ci5zdWJzdHJpbmcoaW5kZXgsIHN0ci5sZW5ndGgoKSk7Ci0JCX0gZWxzZSB7Ci0JCQlkYXRlID0gc3RyICsgdGltZTsKLQkJfQotCi0JCS8vIHNvcnJ5IGFnYWluID1ECi0JCVhTRGF0ZVRpbWUgZHQgPSBYU0RhdGVUaW1lLnBhcnNlRGF0ZVRpbWUoZGF0ZSk7Ci0JCWlmIChkdCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIG5ldyBYU0RhdGUoZHQuY2FsZW5kYXIoKSwgZHQudHooKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZGF0ZSB2YWx1ZSBpbgotCSAqIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZGF0ZSB2YWx1ZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gQSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGRhdGUgdmFsdWUgc3VwcGxpZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlYU0RhdGUgZHQgPSBjYXN0RGF0ZShhYXQpOwotCi0JCWlmIChkdCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlycy5hZGQoZHQpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlUeXBlIGFhdCkgewotCi0JCS8vIFdlIG1pZ2h0IGJlIGFibGUgdG8gY2FzdCB0aGVzZS4KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYwotCQkJCXx8IGFhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1RpbWUpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQotCQl9Ci0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSBYU0RhdGUgY2FzdERhdGUoQW55VHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSkgewotCQkJWFNEYXRlIGRhdGUgPSAoWFNEYXRlKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTRGF0ZShkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTRGF0ZShkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKTsKLQkJfQotCi0JCXJldHVybiBwYXJzZV9kYXRlKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIHllYXIgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB5ZWFyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgeWVhcigpIHsKLQkJaW50IHkgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOwotCQlpZiAoX2NhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKQotCQkJeSAqPSAtMTsKLQotCQlyZXR1cm4geTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgbW9udGggZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtb250aCB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IG1vbnRoKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmdldChDYWxlbmRhci5NT05USCkgKyAxOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBkYXkgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBkYXkgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBkYXkoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyBkYXRlIGhhcyBhbiBvcHRpb25hbCB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggaXQKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlcmUgaXMgYSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXRlLiBGYWxzZQotCSAqICAgICAgICAgb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHRpbWV6b25lZCgpIHsKLQkJcmV0dXJuIF90aW1lem9uZWQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlTdHJpbmcgcmV0ID0gIiI7Ci0KLQkJQ2FsZW5kYXIgYWRqdXN0Rm9ydGltZXpvbmUgPSBjYWxlbmRhcigpOwotCi0JCWlmIChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuRVJBKSA9PSBHcmVnb3JpYW5DYWxlbmRhci5CQykgewotCQkJcmV0ICs9ICItIjsKLQkJfQotCi0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLllFQVIpLCA0KTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1vbnRoKCksIDIpOwotCi0JCXJldCArPSAiLSI7Ci0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCksCi0JCQkJMik7Ci0KLQkJaWYgKHRpbWV6b25lZCgpKSB7Ci0JCQlpbnQgaHJzID0gX3R6LmhvdXJzKCk7Ci0JCQlpbnQgbWluID0gX3R6Lm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gX3R6LnNlY29uZHMoKTsKLQkJCWlmIChocnMgPT0gMCAmJiBtaW4gPT0gMCAmJiBzZWNzID09IDApIHsKLQkJCQlyZXQgKz0gIloiOwotCQkJfSBlbHNlIHsKLQkJCQlTdHJpbmcgdFpvbmVTdHIgPSAiIjsKLQkJCQlpZiAoX3R6Lm5lZ2F0aXZlKCkpIHsKLQkJCQkJdFpvbmVTdHIgKz0gIi0iOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRab25lU3RyICs9ICIrIjsKLQkJCQl9Ci0JCQkJdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KGhycywgMik7Ci0JCQkJdFpvbmVTdHIgKz0gIjoiOwotCQkJCXRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChtaW4sIDIpOwotCi0JCQkJcmV0ICs9IHRab25lU3RyOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaXZlIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6ZGF0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfREFURTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIENhbGVuZGFyIGNhbGVuZGFyKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9Ci0KLQkvLyBjb21wYXJpc29ucwotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8KLQkgKiBhY2NvdW50KQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byBkYXRlcyBhcmUgcmVwcmVzZW50IHRoZSBzYW1lIGV4YWN0IHBvaW50IGluIHRpbWUuCi0JICogICAgICAgICBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0RhdGUgdmFsID0gKFhTRGF0ZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNEYXRlLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgKHRha2luZyB0aW1lem9uZXMgaW50byBhY2NvdW50KQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIFRydWUgaWYgaW4gdGltZSwgdGhpcyBkYXRlIGxpZXMgYmVmb3JlIHRoZSBkYXRlIHN1cHBsaWVkLiBGYWxzZQotCSAqICAgICAgICAgb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGx0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEYXRlIHZhbCA9IChYU0RhdGUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRGF0ZS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuYmVmb3JlKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8gYWNjb3VudCkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBsaWVzIGFmdGVyIHRoZSBkYXRlIHN1cHBsaWVkLiBGYWxzZQotCSAqICAgICAgICAgb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGd0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEYXRlIHZhbCA9IChYU0RhdGUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRGF0ZS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuYWZ0ZXIodGhhdGNhbCk7Ci0JfQotCi0JLy8gWFhYIHRoaXMgaXMgaW5jb3JyZWN0IFtlcG9jaF0KLQkvKioKLQkgKiBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgbWV0aG9kLiBSZXRyaWV2ZXMgdGhlIGRhdGUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlCi0JICogdGhlIGJlZ2luaW5nIG9mIGVwb2NoCi0JICogCi0JICogQHJldHVybiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBiZWdpbmluZyBvZiB0aGUgZXBvY2gKLQkgKi8KLQlwdWJsaWMgZG91YmxlIHZhbHVlKCkgewotCQlyZXR1cm4gY2FsZW5kYXIoKS5nZXRUaW1lSW5NaWxsaXMoKSAvIDEwMDAuMDsKLQl9Ci0KLQkvLyBtYXRoCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIG1pbnVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0JICogc2VxdWVuY2UgKFhTRGF0ZSwgWFNZZWFyTW9udGhEdXJhdGlvbiBhbmQgWFNEYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkKLQkgKiB2YWxpZCBvbmVzKS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzCi0JICogICAgICAgICAgICBvcGVyYXRvci4gSWYgdGhpcyBpcyBhbiBYU0RhdGUsIHRoZSByZXN1bHQgd2lsbCBiZSBhCi0JICogICAgICAgICAgICBYU0RheVRpbWVEdXJhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlIHR3bwotCSAqICAgICAgICAgICAgZGF0ZXMuIElmIGFyZyBpcyBhbiBYU1llYXJNb250aER1cmF0aW9uIG9yIGFuCi0JICogICAgICAgICAgICBYU0RheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGUgb2YgdGhlIHJlc3VsdCBvZgotCSAqICAgICAgICAgICAgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZC4KLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgbWludXMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtaW51cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlBbnlUeXBlIGF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0RhdGUpICYmICEoYXQgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKQotCQkJCSYmICEoYXQgaW5zdGFuY2VvZiBYU0RheVRpbWVEdXJhdGlvbikpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU0RhdGUpIHsKLQkJCXJldHVybiBtaW51c1hTRGF0ZShhcmcpOwotCQl9Ci0JCQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU1llYXJNb250aER1cmF0aW9uKGF0KTsKLQkJfQotCQkKLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNEYXlUaW1lRHVyYXRpb24pIHsKLQkJCXJldHVybiBtaW51c1hTRGF5VGltZUR1cmF0aW9uKGF0KTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgbWludXNYU0RheVRpbWVEdXJhdGlvbihBbnlUeXBlIGF0KSB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIGF0OwotCi0JCXRyeSB7Ci0JCQlYU0RhdGUgcmVzID0gKFhTRGF0ZSkgY2xvbmUoKTsKLQkJCXRyeSB7Ci0JCQkJWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sQ2FsID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkKLQkJCQkJCS5uZXdYTUxHcmVnb3JpYW5DYWxlbmRhcigKLQkJCQkJCQkJKEdyZWdvcmlhbkNhbGVuZGFyKSBjYWxlbmRhcigpKTsKLQkJCQlEdXJhdGlvbiBkdGR1cmF0aW9uID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkKLQkJCQkJCS5uZXdEdXJhdGlvbih2YWwuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCXhtbENhbC5hZGQoZHRkdXJhdGlvbi5uZWdhdGUoKSk7Ci0JCQkJcmVzID0gbmV3IFhTRGF0ZSh4bWxDYWwudG9HcmVnb3JpYW5DYWxlbmRhcigpLCByZXMudHooKSk7Ci0JCQl9IGNhdGNoIChEYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXgpIHsKLQotCQkJfQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGV4KSB7Ci0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNZZWFyTW9udGhEdXJhdGlvbihBbnlUeXBlIGF0KSB7Ci0JCVhTWWVhck1vbnRoRHVyYXRpb24gdmFsID0gKFhTWWVhck1vbnRoRHVyYXRpb24pIGF0OwotCQl0cnkgewotCQkJWFNEYXRlIHJlcyA9IChYU0RhdGUpIGNsb25lKCk7Ci0KLQkJCXJlcy5jYWxlbmRhcigpLmFkZChDYWxlbmRhci5NT05USCwgdmFsLm1vbnRoVmFsdWUoKSAqIC0xKTsKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQl9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBleCkgewotCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBtaW51c1hTRGF0ZShSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0RhdGUgdmFsID0gKFhTRGF0ZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNEYXRlLmNsYXNzKTsKLQkJRHVyYXRpb24gZHRkdXJhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlDYWxlbmRhciB0aGlzQ2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCQlDYWxlbmRhciB0aGF0Q2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQkJCWxvbmcgZHVyYXRpb24gPSB0aGlzQ2FsLmdldFRpbWVJbk1pbGxpcygpCi0JCQkJCS0gdGhhdENhbC5nZXRUaW1lSW5NaWxsaXMoKTsKLQkJCWR0ZHVyYXRpb24gPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEdXJhdGlvbihkdXJhdGlvbik7Ci0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoWFNEYXlUaW1lRHVyYXRpb24KLQkJCQkJLnBhcnNlRFREdXJhdGlvbihkdGR1cmF0aW9uLnRvU3RyaW5nKCkpKTsKLQotCQl9IGNhdGNoIChEYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXgpIHsKLQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlIGFuZCBhIHN1cHBsaWVkIHJlc3VsdAotCSAqIHNlcXVlbmNlIChYRFRZZWFyTW9udGhEdXJhdGlvbiBhbmQgWERURGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5IHZhbGlkCi0JICogb25lcykuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotCSAqICAgICAgICAgICAgb3BlcmF0b3IuIElmIGFyZyBpcyBhbiBYRFRZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotCSAqICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZSBvZiB0aGUgcmVzdWx0Ci0JICogICAgICAgICAgICBvZiB0aGUgY3VycmVudCBkYXRlIG1pbnVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN1cHBsaWVkLgotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBtaW51cyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHBsdXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQW55VHlwZSBhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlpZiAoYXQgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKSB7Ci0JCQkJWFNZZWFyTW9udGhEdXJhdGlvbiB2YWwgPSAoWFNZZWFyTW9udGhEdXJhdGlvbikgYXQ7Ci0KLQkJCQlYU0RhdGUgcmVzID0gKFhTRGF0ZSkgY2xvbmUoKTsKLQotCQkJCXJlcy5jYWxlbmRhcigpLmFkZChDYWxlbmRhci5NT05USCwgdmFsLm1vbnRoVmFsdWUoKSk7Ci0JCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JCQl9IGVsc2UgaWYgKGF0IGluc3RhbmNlb2YgWFNEYXlUaW1lRHVyYXRpb24pIHsKLQkJCQlYU0RheVRpbWVEdXJhdGlvbiB2YWwgPSAoWFNEYXlUaW1lRHVyYXRpb24pIGF0OwotCi0JCQkJWFNEYXRlIHJlcyA9IChYU0RhdGUpIGNsb25lKCk7Ci0KLQkJCQkvLyBXZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBOdW1iZXIgb2YgZGF5cyBkcm9wcGluZyB0aGUgcmVzdC4KLQkJCQlpbnQgZGF5cyA9IHZhbC5kYXlzKCk7Ci0JCQkJaWYgKHZhbC5uZWdhdGl2ZSgpKSB7Ci0JCQkJCWRheXMgKj0gLTE7Ci0JCQkJfQotCQkJCXJlcy5jYWxlbmRhcigpLmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIGRheXMpOwotCi0JCQkJcmVzLmNhbGVuZGFyKCkuYWRkKENhbGVuZGFyLk1JTExJU0VDT05ELAotCQkJCQkJKGludCkgKHZhbC50aW1lX3ZhbHVlKCkgKiAxMDAwLjApKTsKLQkJCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJCX0gZWxzZSB7Ci0JCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQkJfQotCQl9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlcnIpIHsKLQkJCWFzc2VydCBmYWxzZTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYTMzZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5ODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW1wcm92ZWQgc3RyaW5nX3ZhbHVlKCkgaW1wbGVtZW50YXRpb24gKG1vdGl2YXRlZCBieSBidWcsIDI4MTgyMikKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24uCi0gKiAgICAgICAgICAgICAgICAgIC0gYnVnIDI2Mjc2NSAtIGFkZGl0aW9uYWwgdHdlYWsgdG8gY29udmVydCAyNDowMDowMCB0byAwMDowMDowMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EdXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLSAqLwotcHVibGljIGNsYXNzIFhTRGF0ZVRpbWUgZXh0ZW5kcyBDYWxlbmRhclR5cGUgaW1wbGVtZW50cyBDbXBFcSwgQ21wTHQsIENtcEd0LAotCi1NYXRoTWludXMsIE1hdGhQbHVzLAotCi1DbG9uZWFibGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19EQVRFX1RJTUUgPSAieHM6ZGF0ZVRpbWUiOwotCXByaXZhdGUgQ2FsZW5kYXIgX2NhbGVuZGFyOwotCXByaXZhdGUgYm9vbGVhbiBfdGltZXpvbmVkOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0KLQkvKioKLQkgKiBJbml0aWF0ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgYSBzdXBwbGllZCBkYXRlIGFuZCB0aW1lCi0JICogCi0JICogQHBhcmFtIGNhbAotCSAqICAgICAgICAgICAgVGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGFuZCB0aW1lIHRvIGJlIHN0b3JlZAotCSAqIEBwYXJhbSB0egotCSAqICAgICAgICAgICAgVGhlIHRpbWV6b25lIG9mIHRoZSBkYXRlIHRvIGJlIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgWFNEYXRlVGltZShDYWxlbmRhciBjYWwsIFhTRHVyYXRpb24gdHopIHsKLQkJX2NhbGVuZGFyID0gY2FsOwotCi0JCV90eiA9IHR6OwotCi0JCWlmICh0eiA9PSBudWxsKQotCQkJX3RpbWV6b25lZCA9IGZhbHNlOwotCQllbHNlCi0JCQlfdGltZXpvbmVkID0gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIEEgY29weSBvZiB0aGlzIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKLQkJQ2FsZW5kYXIgYyA9IChDYWxlbmRhcikgY2FsZW5kYXIoKS5jbG9uZSgpOwotCQlYU0R1cmF0aW9uIHQgPSB0eigpOwotCi0JCWlmICh0ICE9IG51bGwpCi0JCQl0ID0gKFhTRHVyYXRpb24pIHQuY2xvbmUoKTsKLQotCQlyZXR1cm4gbmV3IFhTRGF0ZVRpbWUoYywgdCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGl0YXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lCi0JICovCi0JcHVibGljIFhTRGF0ZVRpbWUoKSB7Ci0JCXRoaXMobmV3IEdyZWdvcmlhbkNhbGVuZGFyKCksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImRhdGVUaW1lIiB3aGljaCBpcyB0aGUgZGF0YXlwZSBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZGF0ZVRpbWUiOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHRvIHNlZSBpZiBhIGNoYXJhY3RlciBpcyBudW1lcmljCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIENoYXJhY3RlciB0byBiZSB0ZXN0ZWQKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNoYXJhY3RlciBpcyBudW1lcmljLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzX2RpZ2l0KGNoYXIgeCkgewotCQlpZiAoJzAnIDw9IHggJiYgeCA8PSAnOScpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUgeWVhciwKLQkgKiBtb250aCBhbmQgZGF5IGZyb20gaXQKLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpCi0JICogQHJldHVybiBJbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIGlzIHRoZSB5ZWFyLCBlbGVtZW50IDIgaXMgdGhlCi0JICogICAgICAgICBtb250aCBhbmQgZWxlbWVudCAzIGlzIHRoZSBkYXkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludFtdIHBhcnNlX2RhdGUoU3RyaW5nIHN0cikgewotCQlpbnQgc3RhdGUgPSAwOyAvLyAwIGV4cGVjdCB5ZWFyIG9yIG1pbnVzCi0JCS8vIDEgZ2V0dGluZyB5ZWFyCi0JCS8vIDIgZ2V0dGluZyBtb250aAotCQkvLyAzIGdldHRpbmcgZGF5Ci0KLQkJaW50W10gcmV0ID0gbmV3IGludFszXTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IHJldC5sZW5ndGg7IGkrKykKLQkJCXJldFtpXSA9IDA7Ci0KLQkJU3RyaW5nIHRva2VuID0gIiI7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyBpKyspIHsKLQkJCWNoYXIgeCA9IHN0ci5jaGFyQXQoaSk7Ci0KLQkJCXN3aXRjaCAoc3RhdGUpIHsKLQkJCWNhc2UgMDoKLQkJCQlpZiAoaXNfZGlnaXQoeCkpIHsKLQkJCQkJdG9rZW4gKz0geDsKLQkJCQl9IGVsc2UgaWYgKHggPT0gJy0nKSB7Ci0JCQkJCXRva2VuICs9IHg7Ci0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCXN0YXRlID0gMTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxOgotCQkJCS8vIHdlIGdvdCB0aGUgeWVhciBpbiB0aGVvcnkuLi4KLQkJCQlpZiAoeCA9PSAnLScpIHsKLQotCQkJCQkvLyBjaGVjayBvdXQgdGhlIHVuc2lnbmVkIHllYXIKLQkJCQkJU3RyaW5nIHV5ID0gdG9rZW47Ci0JCQkJCWlmICh1eS5zdGFydHNXaXRoKCItIikpCi0JCQkJCQl1eSA9IHV5LnN1YnN0cmluZygxLCB1eS5sZW5ndGgoKSk7Ci0JCQkJCWludCB1eWwgPSB1eS5sZW5ndGgoKTsKLQotCQkJCQlpZiAodXlsIDwgNCkKLQkJCQkJCXJldHVybiBudWxsOwotCi0JCQkJCWlmICh1eWwgPT0gNCkgewotCQkJCQkJaWYgKHV5LmNvbXBhcmVUbygiMDAwMCIpID09IDApCi0JCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJCX0gZWxzZSBpZiAodXkuY2hhckF0KDApID09ICcwJykKLQkJCQkJCXJldHVybiBudWxsOwotCi0JCQkJCS8vIHNlbW1zIGdvb2QgdG8gbWUKLQkJCQkJcmV0WzBdID0gSW50ZWdlci5wYXJzZUludCh0b2tlbik7Ci0JCQkJCXRva2VuID0gIiI7Ci0JCQkJCXN0YXRlID0gMjsKLQkJCQl9IGVsc2UgaWYgKGlzX2RpZ2l0KHgpKQotCQkJCQl0b2tlbiArPSB4OwotCQkJCWVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMjoKLQkJCQkvLyB3ZSBnb3QgdGhlIG1vbnRoCi0JCQkJaWYgKHggPT0gJy0nKSB7Ci0JCQkJCWlmICh0b2tlbi5sZW5ndGgoKSAhPSAyKQotCQkJCQkJcmV0dXJuIG51bGw7Ci0KLQkJCQkJcmV0WzFdID0gSW50ZWdlci5wYXJzZUludCh0b2tlbik7Ci0JCQkJCXRva2VuID0gIiI7Ci0JCQkJCXN0YXRlID0gMzsKLQkJCQl9IGVsc2UgaWYgKGlzX2RpZ2l0KHgpKQotCQkJCQl0b2tlbiArPSB4OwotCQkJCWVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMzoKLQkJCQkvLyBnZXR0aW5nIGRheQotCQkJCWlmIChpc19kaWdpdCh4KSkKLQkJCQkJdG9rZW4gKz0geDsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCWFzc2VydCBmYWxzZTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQl9Ci0JCWlmIChzdGF0ZSAhPSAzKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJLy8gZ290IHRoZSBkYXkKLQkJaWYgKHRva2VuLmxlbmd0aCgpICE9IDIpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXRbMl0gPSBJbnRlZ2VyLnBhcnNlSW50KHRva2VuKTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8vIHJldHVybgotCS8vIGhvdXIKLQkvLyBtaW51dGUKLQkvLyBzZWNvbmRzCi0JLyoqCi0JICogUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZSBob3VyLAotCSAqIG1pbnV0ZSBhbmQgc2Vjb25kcyBmcm9tIGl0Ci0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKQotCSAqIEByZXR1cm4gSW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSBpcyB0aGUgaG91ciwgZWxlbWVudCAyIGlzIHRoZQotCSAqICAgICAgICAgbWludXRlIGFuZCBlbGVtZW50IDMgaXMgdGhlIHNlY29uZHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGRvdWJsZVtdIHBhcnNlX3RpbWUoU3RyaW5nIHN0cikgewotCQlpbnQgc3RhdGUgPSAwOyAvLyAwIGdldHRpbmcgbWludXRlCi0JCS8vIDEgZ2V0dGluZyBob3VyCi0JCS8vIDIgZ2V0dGluZyBzZWNvbmRzIFt0aGUgd2hvbGUgcGFydF0KLQkJLy8gMyBnZXR0aW5nIGZyYWN0aW9uIG9mIHNlY29uZHMKLQotCQlkb3VibGVbXSByZXQgPSBuZXcgZG91YmxlWzNdOwotCi0JCVN0cmluZyB0b2tlbiA9ICIiOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyBpKyspIHsKLQkJCWNoYXIgeCA9IHN0ci5jaGFyQXQoaSk7Ci0KLQkJCXN3aXRjaCAoc3RhdGUpIHsKLQkJCWNhc2UgMDoKLQkJCWNhc2UgMToKLQkJCQkvLyBnb3QgbWludXRlIC8gaG91cgotCQkJCWlmICh4ID09ICc6JykgewotCQkJCQlpZiAodG9rZW4ubGVuZ3RoKCkgIT0gMikKLQkJCQkJCXJldHVybiBudWxsOwotCQkJCQlyZXRbc3RhdGVdID0gSW50ZWdlci5wYXJzZUludCh0b2tlbik7Ci0JCQkJCXN0YXRlKys7Ci0JCQkJCXRva2VuID0gIiI7Ci0JCQkJfSBlbHNlIGlmIChpc19kaWdpdCh4KSkKLQkJCQkJdG9rZW4gKz0geDsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDI6Ci0JCQkJaWYgKGlzX2RpZ2l0KHgpKSB7Ci0JCQkJCXRva2VuICs9IHg7Ci0JCQkJCWlmICh0b2tlbi5sZW5ndGgoKSA+IDIpCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9IGVsc2UgaWYgKHggPT0gJy4nKSB7Ci0JCQkJCXRva2VuICs9IHg7Ci0JCQkJCXN0YXRlID0gMzsKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMzoKLQkJCQlpZiAoaXNfZGlnaXQoeCkpCi0JCQkJCXRva2VuICs9IHg7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCX0KLQkJaWYgKCEoc3RhdGUgPT0gMyB8fCBzdGF0ZSA9PSAyKSkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIGdldCBzZWNvbmRzCi0JCS8vIHRoaXMgaXMgd2hvbGUgKyBkb3QgKyBub3RoaW5nIGVsc2UKLQkJaWYgKHRva2VuLmxlbmd0aCgpID09IDMpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXRbMl0gPSBEb3VibGUucGFyc2VEb3VibGUodG9rZW4pOwotCi0JCWlmIChyZXRbMF0gPT0gMjQuMCkgewotCQkJcmV0WzBdID0gMDAuMDsKLQkJfQotCi0JCS8vIFhYWCBzYW5pdHkgY2hlY2sgYXJncy4uLgotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8vIHJldHVybnMKLQkvLyBwb3NpdGl2ZS9uZWdhdGl2ZQotCS8vIGhvdXIKLQkvLyBtaW51dGUKLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCByZXRyaWV2ZXMgdGhlCi0JICogdGltZXpvbmUgZnJvbSBpdAotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIEludGVnZXIgYXJyYXkgb2Ygc2l6ZSAzLiBFbGVtZW50IDEgcmVwcmVzZW50cyB3aGV0aGVyIHRoZQotCSAqICAgICAgICAgdGltZXpvbmUgaXMgYWhlYWQgb3IgYmVoaW5kIEdNVCwgZWxlbWVudCAyIGlzIHRoZSBob3VyCi0JICogICAgICAgICBkaXNwbGFjZW1lbnQgYW5kIGVsZW1lbnQgMyBpcyB0aGUgbWludXRlIGRpc3BsYWNlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludFtdIHBhcnNlX3RpbWV6b25lKFN0cmluZyBzdHIpIHsKLQkJaW50W10gcmV0ID0gbmV3IGludFszXTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IHJldC5sZW5ndGg7IGkrKykKLQkJCXJldFtpXSA9IDA7Ci0JCXJldFswXSA9IDE7Ci0KLQkJaWYgKHN0ci5lcXVhbHMoIloiKSkgewotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCS8vIGdldCBpbml0aWFsIHBsdXMvbWludXMKLQkJaWYgKHN0ci5zdGFydHNXaXRoKCIrIikpCi0JCQlyZXRbMF0gPSAxOwotCQllbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiLSIpKQotCQkJcmV0WzBdID0gLTE7Ci0JCWVsc2UKLQkJCXJldHVybiBudWxsOwotCi0JCXN0ciA9IHN0ci5zdWJzdHJpbmcoMSwgc3RyLmxlbmd0aCgpKTsKLQotCQlpZiAoc3RyLmxlbmd0aCgpICE9ICgyICsgMSArIDIpKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJdHJ5IHsKLQkJCXJldFsxXSA9IEludGVnZXIucGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLCAyKSk7Ci0JCQlyZXRbMl0gPSBJbnRlZ2VyLnBhcnNlSW50KHN0ci5zdWJzdHJpbmcoMywgNSkpOwotCi0JCQkvLyBBY2NvcmRpbmcgdG8gc2NoZW1hIHNwZWMsIHRpbWV6b25lIGlzIGxpbWl0ZWQgdG8KLQkJCS8vIHRoaXMuLi4gW3dlbGwuLiBhbG1vc3QuLi5dCi0JCQlpZiAocmV0WzFdID4gMTQpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQlpZiAocmV0WzJdID4gNTkpCi0JCQkJcmV0dXJuIG51bGw7Ci0KLQkJCXJldHVybiByZXQ7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlcnIpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXR0ZW1wdHMgdG8gc2V0IGEgcGFydGljdWxhciBmaWVsZCBpbiB0aGUgQ2FsZW5kYXIKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBUaGUgQ2FsZW5kYXIgb2JqZWN0IHRvIHNldCB0aGUgZmllbGQgaW4KLQkgKiBAcGFyYW0gaXRlbQotCSAqICAgICAgICAgICAgVGhlIGZpZWxkIHRvIHNldAotCSAqIEBwYXJhbSB2YWwKLQkgKiAgICAgICAgICAgIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGZpZWxkIHRvCi0JICogQHJldHVybiBUcnVlIGlmIHN1Y2Nlc3NmdWxseSBzZXQuIEZhbHNlIG90aGVyd2lzZSAoZHVlIHRvIG91dCBvZiBib3VuZHMKLQkgKiAgICAgICAgIGZvciB0aGF0IGZpZWxkKQotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gc2V0X2l0ZW0oQ2FsZW5kYXIgY2FsLCBpbnQgaXRlbSwgaW50IHZhbCkgewotCQlpbnQgbWluID0gY2FsLmdldEFjdHVhbE1pbmltdW0oaXRlbSk7Ci0KLQkJaWYgKHZhbCA8IG1pbikKLQkJCXJldHVybiBmYWxzZTsKLQotCQlpbnQgbWF4ID0gY2FsLmdldEFjdHVhbE1heGltdW0oaXRlbSk7Ci0KLQkJaWYgKHZhbCA+IG1heCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQljYWwuc2V0KGl0ZW0sIHZhbCk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIGNvbnN0cnVjdHMgYSBuZXcKLQkgKiBYU0RhdGVUaW1lIG9iamVjdCB1c2luZyB0aGF0IGluZm9ybWF0aW9uCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKQotCSAqIEByZXR1cm4gVGhlIFhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgYW5kIHRpbWUgKGFuZCBvcHRpb25hbAotCSAqICAgICAgICAgdGltZXpvbmUpCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RhdGVUaW1lIHBhcnNlRGF0ZVRpbWUoU3RyaW5nIHN0cikgewotCQkvLyBvaCBuby4uLiBub3QgYWdhaW4KLQotCQkvLyBvayBpdHMgdGhyZWUgdGhpbmdzOgotCQkvLyBkYXRlIFQgdGltZSB0aW1lem9uZQotCi0JCWludCBpbmRleCA9IHN0ci5pbmRleE9mKCdUJyk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIHNwbGl0IGRhdGUgYW5kIHJlc3QuLi4KLQkJU3RyaW5nIGRhdGUgPSBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJU3RyaW5nIHRpbWUgPSBzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgc3RyLmxlbmd0aCgpKTsKLQkJU3RyaW5nIHRpbWV6b25lID0gbnVsbDsKLQotCQkvLyBjaGVjayBmb3IgdGltZXpvbmUKLQkJaW5kZXggPSB0aW1lLmluZGV4T2YoJysnKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJaW5kZXggPSB0aW1lLmluZGV4T2YoJy0nKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJaW5kZXggPSB0aW1lLmluZGV4T2YoJ1onKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQl0aW1lem9uZSA9IHRpbWUuc3Vic3RyaW5nKGluZGV4LCB0aW1lLmxlbmd0aCgpKTsKLQkJCXRpbWUgPSB0aW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCX0KLQotCQkvLyBnZXQgZGF0ZQotCQlpbnQgZFtdID0gcGFyc2VfZGF0ZShkYXRlKTsKLQkJaWYgKGQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIFNBTklUWSBDSEVYCi0JCVRpbWVab25lIFVUQyA9IFRpbWVab25lLmdldFRpbWVab25lKCJVVEMiKTsKLQkJR3JlZ29yaWFuQ2FsZW5kYXIgY2FsID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKFVUQyk7Ci0KLQkJLy8geWVhcgotCQlpbnQgeWVhciA9IGRbMF07Ci0JCWlmICh5ZWFyIDwgMCkgewotCQkJeWVhciAqPSAtMTsKLQkJCWNhbC5zZXQoQ2FsZW5kYXIuRVJBLCBHcmVnb3JpYW5DYWxlbmRhci5CQyk7Ci0JCX0gZWxzZSB7Ci0JCQljYWwuc2V0KENhbGVuZGFyLkVSQSwgR3JlZ29yaWFuQ2FsZW5kYXIuQUQpOwotCQl9Ci0KLQkJLy8gdGhpcyBpcyBhIG5pY2UgYnVnLi4uLgotCQkvLyBpZiBzYXkgdGhlIGN1cnJlbnQgZGF5IGlzIDI5Li4uCi0JCS8vIHRoZW4gaWYgd2Ugc2V0IHRoZSBtb250aCB0byBmZWIgZm9yIGV4YW1wbGUsIGFuZCAyOSBkb2Vzbid0Ci0JCS8vIGV4aXN0IGluIHRoYXQgeWVhciwgdGhlbiB0aGUgZGF0ZSBzY3Jld3MgdXAuCi0JCWNhbC5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAyKTsKLQkJY2FsLnNldChDYWxlbmRhci5NT05USCwgMik7Ci0KLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLllFQVIsIHllYXIpKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLk1PTlRILCBkWzFdIC0gMSkpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpZiAoIXNldF9pdGVtKGNhbCwgQ2FsZW5kYXIuREFZX09GX01PTlRILCBkWzJdKSkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIGdldCB0aW1lCi0JCWRvdWJsZSB0W10gPSBwYXJzZV90aW1lKHRpbWUpOwotCQlpZiAodCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLkhPVVJfT0ZfREFZLCAoaW50KSB0WzBdKSkKLQkJCXJldHVybiBudWxsOwotCi0JCWlmICghc2V0X2l0ZW0oY2FsLCBDYWxlbmRhci5NSU5VVEUsIChpbnQpIHRbMV0pKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLlNFQ09ORCwgKGludCkgdFsyXSkpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlkb3VibGUgbXMgPSB0WzJdIC0gKChpbnQpIHRbMl0pOwotCQltcyAqPSAxMDAwOwotCQlpZiAoIXNldF9pdGVtKGNhbCwgQ2FsZW5kYXIuTUlMTElTRUNPTkQsIChpbnQpIG1zKSkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIGdldCB0aW1lem9uZQotCQlpbnQgdHpbXSA9IG51bGw7Ci0JCVhTRHVyYXRpb24gdHpkID0gbnVsbDsKLQkJaWYgKHRpbWV6b25lICE9IG51bGwpIHsKLQkJCXR6ID0gcGFyc2VfdGltZXpvbmUodGltZXpvbmUpOwotCi0JCQlpZiAodHogPT0gbnVsbCkKLQkJCQlyZXR1cm4gbnVsbDsKLQotCQkJdHpkID0gbmV3IFhTRGF5VGltZUR1cmF0aW9uKDAsIHR6WzFdLCB0elsyXSwgMC4wLCB0elswXSA8IDApOwotCi0JCX0KLQotCQlyZXR1cm4gbmV3IFhTRGF0ZVRpbWUoY2FsLCB0emQpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRhdGUgYW5kIHRpbWUKLQkgKiB2YWx1ZSBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRhdGUgYW5kIHRpbWUKLQkgKiAgICAgICAgICAgIHZhbHVlLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGF0ZSBhbmQgdGltZSB2YWx1ZQotCSAqICAgICAgICAgc3VwcGxpZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uCi0JCQkJfHwgYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkKLQkJCQl8fCBhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkKLQkJCQl8fCBhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JCUNhbGVuZGFyVHlwZSBkdCA9IGNhc3REYXRlVGltZShhYXQpOwotCi0JCWlmIChkdCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlycy5hZGQoZHQpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1RpbWUpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSBDYWxlbmRhclR5cGUgY2FzdERhdGVUaW1lKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUpIHsKLQkJCVhTRGF0ZSBkYXRlID0gKFhTRGF0ZSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0RhdGVUaW1lKGRhdGUuY2FsZW5kYXIoKSwgZGF0ZS50eigpKTsKLQkJfQotCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNEYXRlVGltZShkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKTsKLQkJfQotCi0JCXJldHVybiBwYXJzZURhdGVUaW1lKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIHllYXIgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB5ZWFyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgeWVhcigpIHsKLQkJaW50IHkgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOwotCQlpZiAoX2NhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKQotCQkJeSAqPSAtMTsKLQotCQlyZXR1cm4geTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgbW9udGggZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtb250aCB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IG1vbnRoKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmdldChDYWxlbmRhci5NT05USCkgKyAxOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBkYXkgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBkYXkgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBkYXkoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIGhvdXIgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBob3VyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgaG91cigpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBtaW51dGUgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtaW51dGUgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBtaW51dGUoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTlVURSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIHNlY29uZHMgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzZWNvbmRzIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBkb3VibGUgc2Vjb25kKCkgewotCQlkb3VibGUgcyA9IF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuU0VDT05EKTsKLQotCQlkb3VibGUgbXMgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTExJU0VDT05EKTsKLQotCQltcyAvPSAxMDAwOwotCi0JCXMgKz0gbXM7Ci0JCXJldHVybiBzOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHRpbWV6b25lZCgpIHsKLQkJcmV0dXJuIF90aW1lem9uZWQ7Ci0JfQotCi0JLyoqCi0JICogUGFkcyB0aGUgc3VwcGxpZWQgbnVtYmVyIHRvIHRoZSBzdXBwbGllZCBudW1iZXIgb2YgZGlnaXRzIGJ5IGFkZGluZyAwJ3MKLQkgKiBpbiBmcm9udCBvZiBpdAotCSAqIAotCSAqIEBwYXJhbSBudW0KLQkgKiAgICAgICAgICAgIE51bWJlciB0aGF0IHNpIHRvIGJlIHBhZGRlZCAoaWYgbmVjY2Vzc2F5KQotCSAqIEBwYXJhbSBsZW4KLQkgKiAgICAgICAgICAgIERlc2lyZWQgbGVuZ3RoIGFmdGVyIHBhZGRpbmcKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFkZGVkIGludGVnZXIKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBwYWRfaW50KGludCBudW0sIGludCBsZW4pIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCQlTdHJpbmcgc251bSA9ICIiICsgbnVtOwotCi0JCWludCBwYWQgPSBsZW4gLSBzbnVtLmxlbmd0aCgpOwotCi0JCS8vIHNvcnQgb3V0IHRoZSBuZWdhdGl2ZQotCQlpZiAobnVtIDwgMCkgewotCQkJcmV0ICs9ICItIjsKLQkJCXNudW0gPSBzbnVtLnN1YnN0cmluZygxLCBzbnVtLmxlbmd0aCgpKTsKLQkJCXBhZCsrOwotCQl9Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIocmV0KTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYWQ7IGkrKykgewotCQkJYnVmLmFwcGVuZCgiMCIpOwotCQl9Ci0JCWJ1Zi5hcHBlbmQoc251bSk7Ci0JCXJldCA9IGJ1Zi50b1N0cmluZygpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCi0JCUNhbGVuZGFyIGFkanVzdEZvcnRpbWV6b25lID0gY2FsZW5kYXIoKTsKLQotCQlpZiAoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLkVSQSkgPT0gR3JlZ29yaWFuQ2FsZW5kYXIuQkMpIHsKLQkJCXJldCArPSAiLSI7Ci0JCX0KLQotCQlyZXQgKz0gcGFkX2ludChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuWUVBUiksIDQpOwotCi0JCXJldCArPSAiLSI7Ci0JCXJldCArPSBwYWRfaW50KG1vbnRoKCksIDIpOwotCi0JCXJldCArPSAiLSI7Ci0JCXJldCArPSBwYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpLCAyKTsKLQotCQkvLyB0aW1lCi0JCXJldCArPSAiVCI7Ci0KLQkJcmV0ICs9IHBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSwgMik7Ci0KLQkJcmV0ICs9ICI6IjsKLQkJcmV0ICs9IHBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLk1JTlVURSksIDIpOwotCi0JCXJldCArPSAiOiI7Ci0JCWludCBpc2Vjb25kID0gKGludCkgc2Vjb25kKCk7Ci0JCWRvdWJsZSBzZWMgPSBzZWNvbmQoKTsKLQotCQlpZiAoKHNlYyAtIChpc2Vjb25kKSkgPT0gMC4wKQotCQkJcmV0ICs9IHBhZF9pbnQoaXNlY29uZCwgMik7Ci0JCWVsc2UgewotCQkJaWYgKHNlYyA8IDEwLjApCi0JCQkJcmV0ICs9ICIwIiArIHNlYzsKLQkJCWVsc2UKLQkJCQlyZXQgKz0gc2VjOwotCQl9Ci0KLQkJaWYgKHRpbWV6b25lZCgpKSB7Ci0JCQlpbnQgaHJzID0gX3R6LmhvdXJzKCk7Ci0JCQlpbnQgbWluID0gX3R6Lm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gX3R6LnNlY29uZHMoKTsKLQkJCWlmIChocnMgPT0gMCAmJiBtaW4gPT0gMCAmJiBzZWNzID09IDApIHsKLQkJCQlyZXQgKz0gIloiOwotCQkJfSBlbHNlIHsKLQkJCQlTdHJpbmcgdFpvbmVTdHIgPSAiIjsKLQkJCQlpZiAoX3R6Lm5lZ2F0aXZlKCkpIHsKLQkJCQkJdFpvbmVTdHIgKz0gIi0iOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRab25lU3RyICs9ICIrIjsKLQkJCQl9Ci0JCQkJdFpvbmVTdHIgKz0gcGFkX2ludChocnMsIDIpOwotCQkJCXRab25lU3RyICs9ICI6IjsKLQkJCQl0Wm9uZVN0ciArPSBwYWRfaW50KG1pbiwgMik7Ci0KLQkJCQlyZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpdmUgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpkYXRlVGltZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfREFURV9USU1FOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLy8gY29tcGFyaXNvbnMKLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZwotCSAqIHRpbWV6b25lcyBpbnRvIGFjY291bnQpCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byBkYXRlcyBhbmQgdGltZXMgYXJlIHJlcHJlc2VudCB0aGUgc2FtZSBleGFjdAotCSAqICAgICAgICAgcG9pbnQgaW4gdGltZS4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEYXRlVGltZSB2YWwgPSAoWFNEYXRlVGltZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywKLQkJCQlYU0RhdGVUaW1lLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgYW5kIHRpbWVzICh0YWtpbmcgdGltZXpvbmVzCi0JICogaW50byBhY2NvdW50KQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBhbmQgdGltZSBsaWVzIGJlZm9yZSB0aGUgZGF0ZSBhbmQgdGltZQotCSAqICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRGF0ZVRpbWUgdmFsID0gKFhTRGF0ZVRpbWUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNEYXRlVGltZS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuYmVmb3JlKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzIGFuZCB0aW1lcyAodGFraW5nIHRpbWV6b25lcwotCSAqIGludG8gYWNjb3VudCkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBYU0RhdGVUaW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgYW5kIHRpbWUgbGllcyBhZnRlciB0aGUgZGF0ZSBhbmQgdGltZQotCSAqICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRGF0ZVRpbWUgdmFsID0gKFhTRGF0ZVRpbWUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNEYXRlVGltZS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuYWZ0ZXIodGhhdGNhbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uIHR6KCkgewotCQlyZXR1cm4gX3R6OwotCX0KLQotCS8vIFhYWCB0aGlzIGlzIGluY29ycmVjdCBbZXBvY2hdCi0JLyoqCi0JICogQ3VycmVudGx5IHVuc3VwcG9ydGVkIG1ldGhvZC4gUmV0cmlldmVzIHRoZSBkYXRlIGluIG1pbGxpc2Vjb25kcyBzaW5jZQotCSAqIHRoZSBiZWdpbmluZyBvZiBlcG9jaAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5pbmcgb2YgdGhlIGVwb2NoCi0JICovCi0JcHVibGljIGRvdWJsZSB2YWx1ZSgpIHsKLQkJcmV0dXJuIGNhbGVuZGFyKCkuZ2V0VGltZUluTWlsbGlzKCkgLyAxMDAwLjA7Ci0JfQotCi0JLy8gbWF0aAotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtaW51cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlVGltZSBhbmQgYSBzdXBwbGllZCByZXN1bHQKLQkgKiBzZXF1ZW5jZSAoWFNEYXRlVGltZSwgWERUWWVhck1vbnRoRHVyYXRpb24gYW5kIFhEVERheVRpbWVEdXJhdGlvbiBhcmUKLQkgKiBvbmx5IHZhbGlkIG9uZXMpLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMKLQkgKiAgICAgICAgICAgIG9wZXJhdG9yLiBJZiB0aGlzIGlzIGFuIFhTRGF0ZVRpbWUsIHRoZSByZXN1bHQgd2lsbCBiZSBhCi0JICogICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiB0aGVzZSB0d28KLQkgKiAgICAgICAgICAgIGRhdGVzLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4KLQkgKiAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGVUaW1lIG9mIHRoZQotCSAqICAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiAgICAgICAgICAgIHN1cHBsaWVkLgotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBtaW51cyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUpICYmICEoYXQgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKQotCQkJCSYmICEoYXQgaW5zdGFuY2VvZiBYU0RheVRpbWVEdXJhdGlvbikpIHsKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RhdGVUaW1lKGFyZyk7Ci0JCX0KLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU1llYXJNb250aER1cmF0aW9uKGF0KTsKLQkJfQotCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RheVRpbWVEdXJhdGlvbihhdCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgbWludXNYU0RhdGVUaW1lKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0RhdGVUaW1lIHZhbCA9IChYU0RhdGVUaW1lKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTRGF0ZVRpbWUuY2xhc3MpOwotCi0JCUR1cmF0aW9uIGR0ZHVyYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJQ2FsZW5kYXIgdGhpc0NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQkJQ2FsZW5kYXIgdGhhdENhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0JCQlsb25nIGR1cmF0aW9uID0gdGhpc0NhbC5nZXRUaW1lSW5NaWxsaXMoKQotCQkJCQktIHRoYXRDYWwuZ2V0VGltZUluTWlsbGlzKCk7Ci0JCQlkdGR1cmF0aW9uID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkKLQkJCQkJLm5ld0R1cmF0aW9uKGR1cmF0aW9uKTsKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhYU0RheVRpbWVEdXJhdGlvbgotCQkJCQkucGFyc2VEVER1cmF0aW9uKGR0ZHVyYXRpb24udG9TdHJpbmcoKSkpOwotCQl9IGNhdGNoIChEYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXgpIHsKLQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgbWludXNYU0RheVRpbWVEdXJhdGlvbihBbnlUeXBlIGF0KSB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIGF0OwotCi0JCXRyeSB7Ci0JCQlYU0RhdGVUaW1lIHJlcyA9IChYU0RhdGVUaW1lKSBjbG9uZSgpOwotCi0JCQl0cnkgewotCQkJCVhNTEdyZWdvcmlhbkNhbGVuZGFyIHhtbENhbCA9IERhdGF0eXBlRmFjdG9yeQotCQkJCQkJLm5ld0luc3RhbmNlKCkKLQkJCQkJCS5uZXdYTUxHcmVnb3JpYW5DYWxlbmRhcigoR3JlZ29yaWFuQ2FsZW5kYXIpIGNhbGVuZGFyKCkpOwotCQkJCUR1cmF0aW9uIGR0ZHVyYXRpb24gPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKQotCQkJCQkJLm5ld0R1cmF0aW9uKHZhbC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJeG1sQ2FsLmFkZChkdGR1cmF0aW9uLm5lZ2F0ZSgpKTsKLQkJCQlyZXMgPSBuZXcgWFNEYXRlVGltZSh4bWxDYWwudG9HcmVnb3JpYW5DYWxlbmRhcigpLCByZXMudHooKSk7Ci0JCQl9IGNhdGNoIChEYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXgpIHsKLQotCQkJfQotCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZXgpIHsKLQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgbWludXNYU1llYXJNb250aER1cmF0aW9uKEFueVR5cGUgYXQpIHsKLQkJWFNZZWFyTW9udGhEdXJhdGlvbiB2YWwgPSAoWFNZZWFyTW9udGhEdXJhdGlvbikgYXQ7Ci0KLQkJdHJ5IHsKLQkJCVhTRGF0ZVRpbWUgcmVzID0gKFhTRGF0ZVRpbWUpIGNsb25lKCk7Ci0KLQkJCXJlcy5jYWxlbmRhcigpLmFkZChDYWxlbmRhci5NT05USCwgdmFsLm1vbnRoVmFsdWUoKSAqIC0xKTsKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQl9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBleCkgewotCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGVUaW1lIGFuZCBhIHN1cHBsaWVkCi0JICogcmVzdWx0IHNlcXVlbmNlIChYRFRZZWFyTW9udGhEdXJhdGlvbiBhbmQgWERURGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5Ci0JICogdmFsaWQgb25lcykuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotCSAqICAgICAgICAgICAgb3BlcmF0b3IuIElmIGFyZyBpcyBhbiBYRFRZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotCSAqICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZVRpbWUgb2YgdGhlCi0JICogICAgICAgICAgICByZXN1bHQgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqICAgICAgICAgICAgc3VwcGxpZWQuCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlBbnlUeXBlIGF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCWlmIChhdCBpbnN0YW5jZW9mIFhTWWVhck1vbnRoRHVyYXRpb24pIHsKLQkJCQlYU1llYXJNb250aER1cmF0aW9uIHZhbCA9IChYU1llYXJNb250aER1cmF0aW9uKSBhdDsKLQotCQkJCVhTRGF0ZVRpbWUgcmVzID0gKFhTRGF0ZVRpbWUpIGNsb25lKCk7Ci0KLQkJCQlyZXMuY2FsZW5kYXIoKS5hZGQoQ2FsZW5kYXIuTU9OVEgsIHZhbC5tb250aFZhbHVlKCkpOwotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQkJfSBlbHNlIGlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQkJWFNEdXJhdGlvbiB2YWwgPSAoWFNEdXJhdGlvbikgYXQ7Ci0KLQkJCQlYU0RhdGVUaW1lIHJlcyA9IChYU0RhdGVUaW1lKSBjbG9uZSgpOwotCi0JCQkJdHJ5IHsKLQkJCQkJWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sQ2FsID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkKLQkJCQkJCQkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoCi0JCQkJCQkJCQkoR3JlZ29yaWFuQ2FsZW5kYXIpIGNhbGVuZGFyKCkpOwotCQkJCQlEdXJhdGlvbiBkdGR1cmF0aW9uID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkKLQkJCQkJCQkubmV3RHVyYXRpb24odmFsLnN0cmluZ192YWx1ZSgpKTsKLQkJCQkJeG1sQ2FsLmFkZChkdGR1cmF0aW9uKTsKLQkJCQkJcmVzID0gbmV3IFhTRGF0ZVRpbWUoeG1sQ2FsLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgcmVzLnR6KCkpOwotCQkJCX0gY2F0Y2ggKERhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleCkgewotCi0JCQkJfQotCi0JCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JCQl9IGVsc2UgewotCQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJCX0KLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZXJyKSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRGF5VGltZUR1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRGF5VGltZUR1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NDBlY2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RheVRpbWVEdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcyAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc5Mzc3IC0gaW1wcm92ZW1lbnRzIHRvIG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBvcGVyYXRpb25zCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHhzOmRheVRpbWVEdXJhdGlvbi4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5Sb3VuZGluZ01vZGU7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEYXlUaW1lRHVyYXRpb24gZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTRGF5VGltZUR1cmF0aW9uIGV4dGVuZHMgWFNEdXJhdGlvbiBpbXBsZW1lbnRzIENtcEVxLCBDbXBMdCwKLQkJQ21wR3QsCi0KLQkJTWF0aFBsdXMsIE1hdGhNaW51cywgTWF0aFRpbWVzLCBNYXRoRGl2LAotCi0JCUNsb25lYWJsZSB7Ci0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19EQVlfVElNRV9EVVJBVElPTiA9ICJ4czpkYXlUaW1lRHVyYXRpb24iOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIG1vcmUgdGhhbiAyNCBob3VycyBpcwotCSAqIHN1cHBsaWVkLCB0aGUgbnVtYmVyIG9mIGRheXMgaXMgYWRqdXN0ZWQgYWNvcmRpbmdseS4gVGhlIHNhbWUgb2NjdXJzIGZvcgotCSAqIG1pbnV0ZXMgYW5kIHNlY29uZHMKLQkgKiAKLQkgKiBAcGFyYW0gZGF5cwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIGRheXMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIGhvdXJzCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgaG91cnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIG1pbnV0ZXMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBtaW51dGVzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBzZWNvbmRzCi0JICogICAgICAgICAgICBOdW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcGFyYW0gbmVnYXRpdmUKLQkgKiAgICAgICAgICAgIFRydWUgaWYgdGhpcyBkdXJhdGlvbiBvZiB0aW1lIHJlcHJlc2VudHMgYSBiYWNrd2FyZHMgcGFzc2FnZQotCSAqICAgICAgICAgICAgdGhyb3VnaCB0aW1lLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgWFNEYXlUaW1lRHVyYXRpb24oaW50IGRheXMsIGludCBob3VycywgaW50IG1pbnV0ZXMsIGRvdWJsZSBzZWNvbmRzLAotCQkJYm9vbGVhbiBuZWdhdGl2ZSkgewotCQlzdXBlcigwLCAwLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbmVnYXRpdmUpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcwotCSAqIAotCSAqIEBwYXJhbSBzZWNzCi0JICogICAgICAgICAgICBOdW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqLwotCXB1YmxpYyBYU0RheVRpbWVEdXJhdGlvbihkb3VibGUgc2VjcykgewotCQlzdXBlcigwLCAwLCAwLCAwLCAwLCBNYXRoLmFicyhzZWNzKSwgc2VjcyA8IDApOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIGEgZHVyYXRpb24gb2Ygbm8gdGltZSAoMGRheXMsIDBob3VycywgMG1pbnV0ZXMsIDBzZWNvbmRzKQotCSAqLwotCXB1YmxpYyBYU0RheVRpbWVEdXJhdGlvbigpIHsKLQkJc3VwZXIoMCwgMCwgMCwgMCwgMCwgMC4wLCBmYWxzZSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhIHRpbWUgZHVyYXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICogQHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewotCQlyZXR1cm4gbmV3IFhTRGF5VGltZUR1cmF0aW9uKGRheXMoKSwgaG91cnMoKSwgbWludXRlcygpLCBzZWNvbmRzKCksCi0JCQkJbmVnYXRpdmUoKSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlIHx8IGFhdCBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuIHx8IGFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQotCQlYU0R1cmF0aW9uIGR0ZCA9IGNhc3REYXlUaW1lRHVyYXRpb24oYWF0KTsKLQkKLQkJaWYgKGR0ZCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkKLQkJcnMuYWRkKGR0ZCk7Ci0JCi0JCXJldHVybiByczsKLQl9Ci0JCi0JcHJpdmF0ZSBYU0R1cmF0aW9uIGNhc3REYXlUaW1lRHVyYXRpb24oQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24pIHsKLQkJCVhTRHVyYXRpb24gZHVyYXRpb24gPSAoWFNEdXJhdGlvbikgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0RheVRpbWVEdXJhdGlvbihkdXJhdGlvbi5kYXlzKCksIGR1cmF0aW9uLmhvdXJzKCksIGR1cmF0aW9uLm1pbnV0ZXMoKSwgZHVyYXRpb24uc2Vjb25kcygpLCBkdXJhdGlvbi5uZWdhdGl2ZSgpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlRFREdXJhdGlvbihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCX0KLQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgWFNEYXlUaW1lRHVyYXRpb24gYnkgcGFyc2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZQotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHJldHVybiBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN1cHBsaWVkCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0R1cmF0aW9uIHBhcnNlRFREdXJhdGlvbihTdHJpbmcgc3RyKSB7Ci0JCWJvb2xlYW4gbmVnYXRpdmUgPSBmYWxzZTsKLQkJaW50IGRheXMgPSAwOwotCQlpbnQgaG91cnMgPSAwOwotCQlpbnQgbWludXRlcyA9IDA7Ci0JCWRvdWJsZSBzZWNvbmRzID0gMDsKLQotCQkvLyBzdHJpbmcgZm9sbG93aW5nIHRoZSBQCi0JCVN0cmluZyBwc3RyID0gbnVsbDsKLQkJU3RyaW5nIHRzdHIgPSBudWxsOwotCi0JCS8vIGdldCB0aGUgbmVnYXRpdmUgYW5kIHBzdHIKLQkJaWYgKHN0ci5zdGFydHNXaXRoKCItUCIpKSB7Ci0JCQluZWdhdGl2ZSA9IHRydWU7Ci0JCQlwc3RyID0gc3RyLnN1YnN0cmluZygyLCBzdHIubGVuZ3RoKCkpOwotCQl9IGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJQIikpIHsKLQkJCW5lZ2F0aXZlID0gZmFsc2U7Ci0JCQlwc3RyID0gc3RyLnN1YnN0cmluZygxLCBzdHIubGVuZ3RoKCkpOwotCQl9IGVsc2UKLQkJCXJldHVybiBudWxsOwotCi0JCXRyeSB7Ci0JCQkvLyBnZXQgdGhlIGRheXMKLQkJCWludCBpbmRleCA9IHBzdHIuaW5kZXhPZignRCcpOwotCQkJYm9vbGVhbiBkaWRfc29tZXRoaW5nID0gZmFsc2U7Ci0KLQkJCS8vIG5vIEQuLi4gbXVzdCBoYXZlIFQKLQkJCWlmIChpbmRleCA9PSAtMSkgewotCQkJCWlmIChwc3RyLnN0YXJ0c1dpdGgoIlQiKSkgewotCQkJCQl0c3RyID0gcHN0ci5zdWJzdHJpbmcoMSwgcHN0ci5sZW5ndGgoKSk7Ci0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJfSBlbHNlIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSBwc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJZGF5cyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXRzdHIgPSBwc3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHBzdHIubGVuZ3RoKCkpOwotCi0JCQkJaWYgKHRzdHIuc3RhcnRzV2l0aCgiVCIpKSB7Ci0JCQkJCXRzdHIgPSB0c3RyLnN1YnN0cmluZygxLCB0c3RyLmxlbmd0aCgpKTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAodHN0ci5sZW5ndGgoKSA+IDApCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQkJdHN0ciA9ICIiOwotCQkJCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8vIGRvIHRoZSBUIHN0cgotCi0JCQkvLyBob3VyCi0JCQlpbmRleCA9IHRzdHIuaW5kZXhPZignSCcpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gdHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCWhvdXJzID0gSW50ZWdlci5wYXJzZUludChkaWdpdCk7Ci0JCQkJdHN0ciA9IHRzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgdHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0JCQkvLyBtaW51dGUKLQkJCWluZGV4ID0gdHN0ci5pbmRleE9mKCdNJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSB0c3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJbWludXRlcyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXRzdHIgPSB0c3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHRzdHIubGVuZ3RoKCkpOwotCQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQkJfQotCQkJLy8gc2Vjb25kcwotCQkJaW5kZXggPSB0c3RyLmluZGV4T2YoJ1MnKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCVN0cmluZyBkaWdpdCA9IHRzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCQlzZWNvbmRzID0gRG91YmxlLnBhcnNlRG91YmxlKGRpZ2l0KTsKLQkJCQl0c3RyID0gdHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCB0c3RyLmxlbmd0aCgpKTsKLQkJCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJCX0KLQkJCWlmIChkaWRfc29tZXRoaW5nKSB7Ci0JCQkJLy8gbWFrZSBzdXJlIHdlIHBhcnNlZCBpdCBhbGwKLQkJCQlpZiAodHN0ci5sZW5ndGgoKSAhPSAwKQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGVycikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhTRGF5VGltZUR1cmF0aW9uKGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBuZWdhdGl2ZSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cml2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImRheVRpbWVEdXJhdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImRheVRpbWVEdXJhdGlvbiI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpkYXlUaW1lRHVyYXRpb24iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfREFZX1RJTUVfRFVSQVRJT047Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGFkZGl0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gYWRkCi0JICogQHJldHVybiBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLQkgKiAgICAgICAgIHRoZSBhZGRpdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHBsdXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEdXJhdGlvbiB2YWwgPSAoWFNEdXJhdGlvbikgTnVtZXJpY1R5cGUKLQkJCQkuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNEYXlUaW1lRHVyYXRpb24uY2xhc3MpOwotCQkKLQkJZG91YmxlIHJlcyA9IHZhbHVlKCkgKyB2YWwudmFsdWUoKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGF5VGltZUR1cmF0aW9uKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIHN1YnRyYWN0Ci0JICogQHJldHVybiBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLQkgKiAgICAgICAgIHRoZSBzdWJ0cmFjdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRGF5VGltZUR1cmF0aW9uLmNsYXNzKTsKLQotCQlkb3VibGUgcmVzID0gdmFsdWUoKSAtIHZhbC52YWx1ZSgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEYXlUaW1lRHVyYXRpb24ocmVzKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gbXVsdGlwbHkgYnkKLQkgKiBAcmV0dXJuIE5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiBhZnRlcgotCSAqICAgICAgICAgdGhlIG11bHRpcGxpY2F0aW9uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdGltZXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY29udmVydGVkUlMgPSBhcmc7Ci0JCQotCQlpZiAoYXJnLnNpemUoKSA9PSAxKSB7Ci0JCQlBbnlUeXBlIGFyZ1ZhbHVlID0gYXJnLmZpcnN0KCk7Ci0gICAgICAgICAgICBpZiAoYXJnVmFsdWUgaW5zdGFuY2VvZiBYU0RlY2ltYWwpIHsKLSAgICAgICAgICAgIAljb252ZXJ0ZWRSUyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RvdWJsZShhcmdWYWx1ZS5zdHJpbmdfdmFsdWUoKSkpOwkKLSAgICAgICAgICAgIH0KLQkJfQotCQkKLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoY29udmVydGVkUlMsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTRG91YmxlLmNsYXNzKTsKLQkJaWYgKHZhbC5uYW4oKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLm5hbigpOwotCQl9Ci0KLQkJZG91YmxlIHJlcyA9IHZhbHVlKCkgKiB2YWwuZG91YmxlX3ZhbHVlKCk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RheVRpbWVEdXJhdGlvbihyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgZGl2aXNpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0JICogZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbikKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBkaXZpZGUgYnkKLQkgKiBAcmV0dXJuIE5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiBhZnRlcgotCSAqICAgICAgICAgdGhlIGRpdmlzaW9uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU0RvdWJsZSkgewotCQkJWFNEb3VibGUgZHQgPSAoWFNEb3VibGUpIGF0OwotCQkJZG91YmxlIHJldHZhbCA9IDA7Ci0JCQkKLQkJCWlmIChkdC5uYW4oKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5uYW4oKTsKLQkJCX0KLQkJCQotCQkJaWYgKCFkdC56ZXJvKCkpIHsKLQkJCQlCaWdEZWNpbWFsIHJldCA9IEJpZ0RlY2ltYWwuWkVSTzsKLQkJCQkKLQkJCQlpZiAoZHQuaW5maW5pdGUoKSkgewotCQkJCQlyZXR2YWwgPSB2YWx1ZSgpIC8gZHQuZG91YmxlX3ZhbHVlKCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0ID0gQmlnRGVjaW1hbC52YWx1ZU9mKHZhbHVlKCkpOwotCQkJCQlyZXQgPSByZXQuZGl2aWRlKEJpZ0RlY2ltYWwudmFsdWVPZihkdC5kb3VibGVfdmFsdWUoKSksIDE4LCBSb3VuZGluZ01vZGUuSEFMRl9FVkVOKTsKLQkJCQkJcmV0dmFsID0gcmV0LmRvdWJsZVZhbHVlKCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3Iub3ZlcmZsb3dVbmRlcmZsb3coKTsKLQkJCX0KLS8vCQkJCXJldCA9IHZhbHVlKCkgLyBkdC5kb3VibGVfdmFsdWUoKTsKLQkJCQotCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ci0JCQkJCS5jcmVhdGVfbmV3KG5ldyBYU0RheVRpbWVEdXJhdGlvbihyZXR2YWwpKTsKLQkJfSBlbHNlIGlmIChhdCBpbnN0YW5jZW9mIFhTRGVjaW1hbCkgewotCQkJWFNEZWNpbWFsIGR0ID0gKFhTRGVjaW1hbCkgYXQ7Ci0JCQkKLQkJCUJpZ0RlY2ltYWwgcmV0ID0gQmlnRGVjaW1hbC5aRVJPOwotCQkJCQkJCQotCQkJaWYgKCFkdC56ZXJvKCkpIHsKLQkJCQlyZXQgPSBCaWdEZWNpbWFsLnZhbHVlT2YodmFsdWUoKSk7Ci0JCQkJcmV0ID0gcmV0LmRpdmlkZShkdC5nZXRWYWx1ZSgpLCAxOCwgUm91bmRpbmdNb2RlLkhBTEZfRVZFTik7Ci0JCQl9IGVsc2UgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5vdmVyZmxvd1VuZGVyZmxvdygpOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGF5VGltZUR1cmF0aW9uKAotCQkJCQlyZXQuaW50VmFsdWUoKSkpOwkKLQkJfSBlbHNlIGlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQlYU0R1cmF0aW9uIG1kID0gKFhTRHVyYXRpb24pIGF0OwotCi0JCQlCaWdEZWNpbWFsIHJlcyA9IG51bGw7Ci0JCQl0cnkgewotICAgICAgICAgICAgICAgIER1cmF0aW9uIHRoaXNEdXJhdGlvbiAgPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEdXJhdGlvbihzdHJpbmdfdmFsdWUoKSk7Ci0JCQkJRHVyYXRpb24gbWRkdXJhdGlvbiA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0R1cmF0aW9uKG1kLnN0cmluZ192YWx1ZSgpKTsKLQkJCQlkb3VibGUgdGhpc3RpbWUgPSB0aGlzRHVyYXRpb24uZ2V0VGltZUluTWlsbGlzKENhbGVuZGFyLmdldEluc3RhbmNlKCkpOwotCQkJCWRvdWJsZSB0aGF0dGltZSA9IG1kZHVyYXRpb24uZ2V0VGltZUluTWlsbGlzKENhbGVuZGFyLmdldEluc3RhbmNlKCkpOwotCQkJCXJlcyA9IEJpZ0RlY2ltYWwudmFsdWVPZih0aGlzdGltZSk7Ci0JCQkJQmlnRGVjaW1hbCBsID0gQmlnRGVjaW1hbC52YWx1ZU9mKHRoYXR0aW1lKTsKLQkJCQlyZXMgPSByZXMuZGl2aWRlKGwsIDE4LCBSb3VuZGluZ01vZGUuSEFMRl9FVkVOKTsKLQkJCX0gY2F0Y2ggKERhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleCkgewotCQkJCQotCQkJfQotCi0vLwkJCWRvdWJsZSByZXMgPSB2YWx1ZSgpIC8gbWQudmFsdWUoKTsKLQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RlY2ltYWwocmVzKSk7Ci0JCX0gZWxzZSB7Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEZWNpbWFsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRGVjaW1hbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGJiNjhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEZWNpbWFsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZQotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjc3Nzc0IC0gWFNEZWNpbWFsIHJldHVybmluZyB3cm9uZyB2YWx1ZXMuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSB2YXJpb3VzIG51bWVyaWMgZm9ybWF0dGluZyBmaXhlcyBhbmQgY2FsY3VsYXRpb25zCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODIyMjMgLSBDYW4ndCBDYXN0IEV4cG9uZW50aWFsIHZhbHVlcyB0byBEZWNpbWFsIHZhbHVlcy4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGVkZ2UgY2FzZSB3aGVyZSByb3VuZGluZyB3YXMgb2NjdXJpbmcgd2hlbiBpdCBzaG91bGRuJ3QuIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjYyNzY1IC0gZml4IHR5cGUgdGVzdHMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGFicyB2YWx1ZSB0ZXN0cy4KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGZpeGVkIGRpdmlzaW9uIG9mIHplcm8gKG5vLCBub3QgYnkpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLm1hdGguTWF0aENvbnRleHQ7Ci1pbXBvcnQgamF2YS5tYXRoLlJvdW5kaW5nTW9kZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RlY2ltYWwgZXh0ZW5kcyBOdW1lcmljVHlwZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfREVDSU1BTCA9ICJ4czpkZWNpbWFsIjsKLQlwcml2YXRlIEJpZ0RlY2ltYWwgX3ZhbHVlOwotCXByaXZhdGUgWFBhdGhEZWNpbWFsRm9ybWF0IGZvcm1hdCA9IG5ldyBYUGF0aERlY2ltYWxGb3JtYXQoIjAuIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKLQotCS8qKgotCSAqIEluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAuMAotCSAqLwotCXB1YmxpYyBYU0RlY2ltYWwoKSB7Ci0JCXRoaXMoQmlnRGVjaW1hbC5aRVJPKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbnVtYmVyCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIE51bWJlciB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNEZWNpbWFsKEJpZ0RlY2ltYWwgeCkgewotCQlfdmFsdWUgPSB4OwotCX0KLQkKLQlwdWJsaWMgWFNEZWNpbWFsKFN0cmluZyB4KSB7Ci0JCV92YWx1ZSA9IG5ldyBCaWdEZWNpbWFsKHgsIE1hdGhDb250ZXh0LkRFQ0lNQUwxMjgpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6ZGVjaW1hbCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19ERUNJTUFMOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiZGVjaW1hbCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImRlY2ltYWwiOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJCi0JCWlmICh6ZXJvKCkpIHsKLQkJCXJldHVybiAiMCI7Ci0JCX0KLQkJCi0JCV92YWx1ZSA9IF92YWx1ZS5zdHJpcFRyYWlsaW5nWmVyb3MoKTsKLQkJcmV0dXJuIGZvcm1hdC54cGF0aEZvcm1hdChfdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGlmIHRoaXMgWFNEZWNpbWFsIHJlcHJlc2VudHMgMAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHplcm8oKSB7Ci0JCXJldHVybiAoX3ZhbHVlLmNvbXBhcmVUbyhCaWdEZWNpbWFsLnZhbHVlT2YoMC4wKSkgPT0gMCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZGVjaW1hbAotCSAqIG51bWJlciBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRlY2ltYWwgbnVtYmVyLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGVjaW1hbCBudW1iZXIgc3VwcGxpZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8IGFhdCBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCQkKLQkJaWYgKGFhdC5zdHJpbmdfdmFsdWUoKS5jb250YWlucygiLUlORiIpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JCQotCQlpZiAoIWlzTGV4aWNhbFZhbHVlKGFhdC5zdHJpbmdfdmFsdWUoKSkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkTGV4aWNhbFZhbHVlKCk7Ci0JCX0KLQkJCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQkJdHJ5IHsKLQkJCS8vIFhQYXRoIGRvZXNuJ3QgYWxsb3cgZm9yIGNvbnZlcnRpbmcgRXhwb25lbnRzIHRvIERlY2ltYWwgdmFsdWVzLgotCQkJCi0JCQlYU0RlY2ltYWwgZGVjaW1hbCA9IGNhc3REZWNpbWFsKGFhdCk7Ci0JCQkKLQkJCXJzLmFkZChkZWNpbWFsKTsKLQkJCXJldHVybiByczsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGlzTGV4aWNhbFZhbHVlKFN0cmluZyB2YWx1ZSkgewotCQlpZiAodmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgiaW5mIikpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJaWYgKHZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoIi1pbmYiKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlUeXBlIGFhdCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9CQkKLQkJCi0JCWlmIChhYXQuc3RyaW5nX3ZhbHVlKCkuY29udGFpbnMoIkUiKSB8fCBhYXQuc3RyaW5nX3ZhbHVlKCkuY29udGFpbnMoImUiKSAmJiAhKGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbikpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBhYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSBYU0RlY2ltYWwgY2FzdERlY2ltYWwoQW55VHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbikgewotCQkJaWYgKGFhdC5zdHJpbmdfdmFsdWUoKS5lcXVhbHMoInRydWUiKSkgewotCQkJCXJldHVybiBuZXcgWFNEZWNpbWFsKEJpZ0RlY2ltYWwuT05FKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIG5ldyBYU0RlY2ltYWwoQmlnRGVjaW1hbC5aRVJPKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIEBkZXByZWNhdGVkIFVzZSBnZXRWYWx1ZSgpIGluc3RlYWQuCi0JICovCi0JQERlcHJlY2F0ZWQKLQlwdWJsaWMgZG91YmxlIGRvdWJsZV92YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5kb3VibGVWYWx1ZSgpOwotCX0KLQkKLQlwdWJsaWMgQmlnRGVjaW1hbCBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBudW1iZXIgc3RvcmVkIHRvIHRoYXQgc3VwcGxpZWQKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgTnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9kb3VibGUoZG91YmxlIHgpIHsKLQkJX3ZhbHVlID0gQmlnRGVjaW1hbC52YWx1ZU9mKHgpOwotCX0KLQotCS8vIGNvbXBhcmlzb25zCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uCi0JICogQHBhcmFtIGF0Ci0JICogICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0JICogICAgICAgICAgICBYU0RlY2ltYWwpCi0JICogCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSAyIHJlcHJlc2VudGF0aW9uIHJlcHJlc2VudCB0aGUgc2FtZSBudW1iZXIuIEZhbHNlCi0JICogICAgICAgICBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGF0LCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEZWNpbWFsIGR0ID0gbnVsbDsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0RlY2ltYWwpKSB7IAotCQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhdCk7Ci0JCQkKLQkJCVJlc3VsdFNlcXVlbmNlIGNycyA9IGNvbnN0cnVjdG9yKHJzKTsKLQkJCWlmIChjcnMuZW1wdHkoKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQl9Ci0JCQotCQkJQW55VHlwZSBjYXQgPSBjcnMuZmlyc3QoKTsKLQotCQkJZHQgPSAoWFNEZWNpbWFsKSBjYXQ7Ci0JICAgIH0gZWxzZSB7Ci0JICAgIAlkdCA9IChYU0RlY2ltYWwpIGF0OwotCSAgICB9Ci0JCXJldHVybiAoX3ZhbHVlLmNvbXBhcmVUbyhkdC5nZXRWYWx1ZSgpKSA9PSAwKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotCSAqICAgICAgICAgICAgWFNEZWNpbWFsKQotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiB0aGlzCi0JICogICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUFueVR5cGUgY2FyZyA9IGNvbnZlcnRBcmcoYXJnKTsKLQkJCi0JCVhTRGVjaW1hbCB2YWwgPSAoWFNEZWNpbWFsKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEZWNpbWFsLmNsYXNzKTsKLQkJcmV0dXJuIChfdmFsdWUuY29tcGFyZVRvKHZhbC5nZXRWYWx1ZSgpKSA9PSAxKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgQW55VHlwZSBjb252ZXJ0QXJnKEFueVR5cGUgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhcmcpOwotCQlycyA9IGNvbnN0cnVjdG9yKHJzKTsKLQkJQW55VHlwZSBjYXJnID0gcnMuZmlyc3QoKTsKLQkJcmV0dXJuIGNhcmc7Ci0JfQotCQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0JICogICAgICAgICAgICBYU0RlY2ltYWwpCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBzdXBwbGllZCB0eXBlIHJlcHJlc2VudHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHRoaXMKLQkgKiAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGx0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQW55VHlwZSBjYXJnID0gY29udmVydEFyZyhhcmcpOwotCQlYU0RlY2ltYWwgdmFsID0gKFhTRGVjaW1hbCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRGVjaW1hbC5jbGFzcyk7Ci0JCXJldHVybiAoX3ZhbHVlLmNvbXBhcmVUbyh2YWwuZ2V0VmFsdWUoKSkgPT0gLTEpOwotCX0KLQotCS8vIG1hdGgKLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sIHRoZQotCSAqIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0RlY2ltYWwuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIGFkZGl0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIGdldCBhcmcKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQlBbnlUeXBlIGF0ID0gZ2V0X3NpbmdsZV9hcmcoY2FyZyk7Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNEZWNpbWFsKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVhTRGVjaW1hbCBkdCA9IChYU0RlY2ltYWwpIGF0OwotCi0JCS8vIG93biBpdAotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGVjaW1hbChfdmFsdWUuYWRkKGR0LmdldFZhbHVlKCkpKSk7Ci0JfQotCQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgY29udmVydFJlc3VsdFNlcXVlbmNlKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gYXJnOwotCQlJdGVyYXRvciBpdCA9IGNhcmcuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQW55VHlwZSB0eXBlID0gKEFueVR5cGUpIGl0Lm5leHQoKTsKLQkJCWlmICh0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikgfHwKLQkJCQl0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czpzdHJpbmciKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQkJfQotCQl9Ci0JCWNhcmcgPSBjb25zdHJ1Y3RvcihjYXJnKTsKLQkJcmV0dXJuIGNhcmc7Ci0JfQkKLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBzdWJ0cmFjdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgc3VidHJhY3Rpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCQotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJQW55VHlwZSBhdCA9IGdldF9zaW5nbGVfYXJnKGNhcmcpOwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIFhTRGVjaW1hbCkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQlYU0RlY2ltYWwgZHQgPSAoWFNEZWNpbWFsKSBhdDsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGVjaW1hbChfdmFsdWUuc3VidHJhY3QoZHQuZ2V0VmFsdWUoKSkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIG11bHRpcGxpY2F0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB0aW1lcyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNEZWNpbWFsIHZhbCA9IChYU0RlY2ltYWwpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RlY2ltYWwuY2xhc3MpOwotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IF92YWx1ZS5tdWx0aXBseSh2YWwuZ2V0VmFsdWUoKSk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKHJlc3VsdCkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgZGl2aXNpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCQkKLQkJWFNEZWNpbWFsIHZhbCA9IChYU0RlY2ltYWwpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RlY2ltYWwuY2xhc3MpOwotCQlpZiAodmFsLnplcm8oKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmRpdl96ZXJvKG51bGwpOwotCQl9Ci0JCUJpZ0RlY2ltYWwgcmVzdWx0ID0gZ2V0VmFsdWUoKS5kaXZpZGUodmFsLmdldFZhbHVlKCksIDE4LCBSb3VuZGluZ01vZGUuSEFMRl9FVkVOKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RlY2ltYWwocmVzdWx0KSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sCi0JICogdGhlIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0RlY2ltYWwuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyCi0JICogICAgICAgICBkaXZpc2lvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaWRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNEZWNpbWFsIHZhbCA9IChYU0RlY2ltYWwpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RlY2ltYWwuY2xhc3MpOwotCi0JCWlmICh2YWwuemVybygpKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmRpdl96ZXJvKG51bGwpOwotCQlCaWdJbnRlZ2VyIF9pdmFsdWUgPSBfdmFsdWUudG9CaWdJbnRlZ2VyKCk7Ci0JCUJpZ0ludGVnZXIgaXZhbCA9ICB2YWwuZ2V0VmFsdWUoKS50b0JpZ0ludGVnZXIoKTsKLQkJQmlnSW50ZWdlciByZXN1bHQgPSBfaXZhbHVlLmRpdmlkZShpdmFsKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyAKLQkJCQkgICAgICAgICAgIFhTSW50ZWdlcihyZXN1bHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0JICogUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbW9kKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0RlY2ltYWwgdmFsID0gKFhTRGVjaW1hbCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRGVjaW1hbC5jbGFzcyk7Ci0JCUJpZ0RlY2ltYWwgcmVzdWx0ID0gX3ZhbHVlLnJlbWFpbmRlcih2YWwuZ2V0VmFsdWUoKSk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKHJlc3VsdCkpOwotCX0KLQotCS8qKgotCSAqIE5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoaXMgWFNEZWNpbWFsCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHVuYXJ5X21pbnVzKCkgewotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IF92YWx1ZS5uZWdhdGUoKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RlY2ltYWwocmVzdWx0KSk7Ci0JfQotCi0JLy8gZnVuY3Rpb25zCi0JLyoqCi0JICogQWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIGFicygpIHsKLQkJcmV0dXJuIG5ldyBYU0RlY2ltYWwoX3ZhbHVlLmFicygpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG51bWJlciBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgY2VpbGluZygpIHsKLQkJQmlnRGVjaW1hbCBjZWlsaW5nID0gX3ZhbHVlLnNldFNjYWxlKDAsIFJvdW5kaW5nTW9kZS5DRUlMSU5HKTsKLQkJcmV0dXJuIG5ldyBYU0RlY2ltYWwoY2VpbGluZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZQotCSAqICAgICAgICAgbnVtYmVyIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBOdW1lcmljVHlwZSBmbG9vcigpIHsKLQkJQmlnRGVjaW1hbCBmbG9vciA9IF92YWx1ZS5zZXRTY2FsZSgwLCBSb3VuZGluZ01vZGUuRkxPT1IpOwotCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChmbG9vcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIHJvdW5kKCkgewotCQlCaWdEZWNpbWFsIHJvdW5kID0gX3ZhbHVlLnNldFNjYWxlKDAsIFJvdW5kaW5nTW9kZS5VUCk7Ci0JCXJldHVybiBuZXcgWFNEZWNpbWFsKHJvdW5kKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICogCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKCkgewotCQlyZXR1cm4gcm91bmRfaGFsZl90b19ldmVuKDApOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBwcmVjaXNpb24gQW4gaW50ZWdlciBwcmVjaXNpb24gCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKGludCBwcmVjaXNpb24pIHsKLQkJQmlnRGVjaW1hbCByb3VuZCA9IF92YWx1ZS5zZXRTY2FsZShwcmVjaXNpb24sIFJvdW5kaW5nTW9kZS5IQUxGX0VWRU4pOwotCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChyb3VuZCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RvdWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RvdWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGUxMjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEb3VibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI3Nzc3MCAtIGZvcm1hdCBvZiBYU0RvdWJsZSBmb3IgemVybyB2YWx1ZXMgaW5jb3JyZWN0LgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzk0MDYgLSBpbXByb3ZlbWVudHMgdG8gbmVnYXRpdmUgemVybyB2YWx1ZXMgZm9yIHhzOmRvdWJsZQotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gdmFyaW91cyBudW1lcmljIGZvcm1hdHRpbmcgZml4ZXMgYW5kIGNhbGN1bGF0aW9ucwotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgcm91bmRpbmcgZXJyb3JzLiAgICAgIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBCdWcgMjg2MDYyIC0gRml4IGlkaXYgZXJyb3IgY2FzZXMgYW5kIGluY3JlYXNlIHByZWNpc2lvbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguUm91bmRpbmdNb2RlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERvdWJsZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNEb3VibGUgZXh0ZW5kcyBOdW1lcmljVHlwZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfRE9VQkxFID0gInhzOmRvdWJsZSI7Ci0JcHJpdmF0ZSBEb3VibGUgX3ZhbHVlOwotCXByaXZhdGUgWFBhdGhEZWNpbWFsRm9ybWF0IGZvcm1hdCA9IG5ldyBYUGF0aERlY2ltYWxGb3JtYXQoCi0JCQkiMC4jIyMjIyMjIyMjIyMjIyMjRTAiKTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG51bWJlcgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBOdW1iZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTRG91YmxlKGRvdWJsZSB4KSB7Ci0JCV92YWx1ZSA9IG5ldyBEb3VibGUoeCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTRG91YmxlKCkgewotCQl0aGlzKDApOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIGEgU3RyaW5nIHJlcHJlc2VudGVkIG51bWJlcgotCSAqIAotCSAqIEBwYXJhbSBpbml0Ci0JICogICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNEb3VibGUoU3RyaW5nIGluaXQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQl0cnkgewotCQkJaWYgKGluaXQuZXF1YWxzKCItSU5GIikpIHsKLQkJCQlfdmFsdWUgPSBEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFk7Ci0JCQl9IGVsc2UgaWYgKGluaXQuZXF1YWxzKCJJTkYiKSkgewotCQkJCV92YWx1ZSA9IERvdWJsZS5QT1NJVElWRV9JTkZJTklUWTsKLQkJCX0gZWxzZSB7Ci0JCQkJX3ZhbHVlID0gbmV3IERvdWJsZShpbml0KTsKLQkJCX0KLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyCi0JICogCi0JICogQHBhcmFtIGkKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqIEByZXR1cm4gTmV3IFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIHN1cHBsaWVkCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RvdWJsZSBwYXJzZV9kb3VibGUoU3RyaW5nIGkpIHsKLQkJdHJ5IHsKLQkJCURvdWJsZSBkID0gbnVsbDsKLQkJCWlmIChpLmVxdWFscygiSU5GIikpIHsKLQkJCQlkID0gRG91YmxlLlBPU0lUSVZFX0lORklOSVRZOwotCQkJfSBlbHNlIGlmIChpLmVxdWFscygiLUlORiIpKSB7Ci0JCQkJZCA9IERvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsKLQkJCX0gZWxzZSB7Ci0JCQkJZCA9IG5ldyBEb3VibGUoaSk7Ci0JCQl9Ci0JCQlyZXR1cm4gbmV3IFhTRG91YmxlKGQuZG91YmxlVmFsdWUoKSk7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRvdWJsZSBudW1iZXIKLQkgKiBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRvdWJsZSBudW1iZXIuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIEEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb3VibGUgbnVtYmVyIHN1cHBsaWVkLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24gfHwgYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0JCQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JCVhTRG91YmxlIGQgPSBjYXN0RG91YmxlKGFhdCk7Ci0JCQotCQlpZiAoZCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlycy5hZGQoZCk7Ci0JCXJldHVybiByczsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55VHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyB8fAotCQkJYWF0IGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBYU0RvdWJsZSBjYXN0RG91YmxlKEFueVR5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4pIHsKLQkJCWlmIChhYXQuc3RyaW5nX3ZhbHVlKCkuZXF1YWxzKCJ0cnVlIikpIHsKLQkJCQlyZXR1cm4gbmV3IFhTRG91YmxlKG5ldyBEb3VibGUoIjEuMEUwIikpOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gbmV3IFhTRG91YmxlKG5ldyBEb3VibGUoIjAuMEUwIikpOwotCQkJfQotCQl9Ci0JCXJldHVybiBwYXJzZV9kb3VibGUoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCi0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpkb3VibGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfRE9VQkxFOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiZG91YmxlIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZG91YmxlIjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCWlmICh6ZXJvKCkpIHsKLQkJCXJldHVybiAiMCI7Ci0JCX0KLQotCQlpZiAobmVnYXRpdmVaZXJvKCkpIHsKLQkJCXJldHVybiAiLTAiOwotCQl9Ci0KLQkJaWYgKG5hbigpKSB7Ci0JCQlyZXR1cm4gIk5hTiI7Ci0JCX0KLQotCQlyZXR1cm4gZm9ybWF0LnhwYXRoRm9ybWF0KF92YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIE5hTgotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgTmFOLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gbmFuKCkgewotCQlyZXR1cm4gRG91YmxlLmlzTmFOKF92YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIGFuIGluZmluaXRlIG51bWJlciAobmVnYXRpdmUgb3IgcG9zaXRpdmUpCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBpbmZpbml0eS4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGluZmluaXRlKCkgewotCQlyZXR1cm4gRG91YmxlLmlzSW5maW5pdGUoX3ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgMAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHplcm8oKSB7Ci0JCXJldHVybiAoRG91YmxlLmNvbXBhcmUoX3ZhbHVlLCAwLjBFMCkgPT0gMCk7Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgLTAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIC0wLiBGYWxzZSBvdGhlcndpc2UuCi0JICogCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBib29sZWFuIG5lZ2F0aXZlWmVybygpIHsKLQkJcmV0dXJuIChEb3VibGUuY29tcGFyZShfdmFsdWUsIC0wLjBFMCkgPT0gMCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgZG91YmxlIGRvdWJsZV92YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5kb3VibGVWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLgotCSAqIEBwYXJhbSBhYQotCSAqICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotCSAqICAgICAgICAgICAgWFNEb3VibGUpCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSAyIHJlcHJlc2VudGF0aW9ucyByZXByZXNlbnQgdGhlIHNhbWUgbnVtYmVyLiBGYWxzZQotCSAqICAgICAgICAgb3RoZXJ3aXNlCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYWEsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGFhKTsKLQkJUmVzdWx0U2VxdWVuY2UgY3JzID0gY29uc3RydWN0b3IocnMpOwotCQkKLQkJaWYgKGNycy5lbXB0eSgpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0JCUFueVR5cGUgY2F0ID0gY3JzLmZpcnN0KCk7Ci0KLQkJWFNEb3VibGUgZCA9IChYU0RvdWJsZSkgY2F0OwotCQlpZiAoZC5uYW4oKSAmJiBuYW4oKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlEb3VibGUgdGhhdHZhbHVlID0gbmV3IERvdWJsZShkLmRvdWJsZV92YWx1ZSgpKTsKLQkJRG91YmxlIHRoaXN2YWx1ZSA9IG5ldyBEb3VibGUoZG91YmxlX3ZhbHVlKCkpOwotCQkKLQkJcmV0dXJuIHRoaXN2YWx1ZS5lcXVhbHModGhhdHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotCSAqICAgICAgICAgICAgWFNEb3VibGUpCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBzdXBwbGllZCB0eXBlIHJlcHJlc2VudHMgYSBudW1iZXIgc21hbGxlciB0aGFuIHRoaXMKLQkgKiAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGd0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQW55VHlwZSBjYXJnID0gY29udmVydEFyZyhhcmcpOwotCQkKLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEb3VibGUuY2xhc3MpOwotCQlyZXR1cm4gZG91YmxlX3ZhbHVlKCkgPiB2YWwuZG91YmxlX3ZhbHVlKCk7Ci0JfQotCi0JcHJvdGVjdGVkIEFueVR5cGUgY29udmVydEFyZyhBbnlUeXBlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYXJnKTsKLQkJcnMgPSBjb25zdHJ1Y3Rvcihycyk7Ci0JCUFueVR5cGUgY2FyZyA9IHJzLmZpcnN0KCk7Ci0JCXJldHVybiBjYXJnOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBDdXJyZW50bHkKLQkgKiBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIGV4aXN0cyBzbyB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gbXVzdCBiZQotCSAqIG9mIHR5cGUgWFNEb3VibGUuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotCSAqICAgICAgICAgICAgWFNEb3VibGUpCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBzdXBwbGllZCB0eXBlIHJlcHJlc2VudHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHRoaXMKLQkgKiAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGx0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQW55VHlwZSBjYXJnID0gY29udmVydEFyZyhhcmcpOwotCi0JCVhTRG91YmxlIHZhbCA9IChYU0RvdWJsZSkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRG91YmxlLmNsYXNzKTsKLQkJcmV0dXJuIGRvdWJsZV92YWx1ZSgpIDwgdmFsLmRvdWJsZV92YWx1ZSgpOwotCX0KLQotCS8vIG1hdGgKLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBhZGRpdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCUFueVR5cGUgYXQgPSBnZXRfc2luZ2xlX2FyZyhjYXJnKTsKLQkJCi0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNEb3VibGUpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBhdDsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRG91YmxlKGRvdWJsZV92YWx1ZSgpCi0JCQkJKyB2YWwuZG91YmxlX3ZhbHVlKCkpKTsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGFyZzsKLQkJSXRlcmF0b3IgaXQgPSBjYXJnLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCUFueVR5cGUgdHlwZSA9IChBbnlUeXBlKSBpdC5uZXh0KCk7Ci0JCQlpZiAodHlwZS5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6dW50eXBlZEF0b21pYyIpIHx8Ci0JCQkJdHlwZS5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6c3RyaW5nIikpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJfQotCQl9Ci0KLQkJY2FyZyA9IGNvbnN0cnVjdG9yKGNhcmcpOwotCQlyZXR1cm4gY2FyZzsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gc3VidHJhY3Rpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgc3VidHJhY3Rpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJCi0JCVhTRG91YmxlIHZhbCA9IChYU0RvdWJsZSkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRG91YmxlLmNsYXNzKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRG91YmxlKGRvdWJsZV92YWx1ZSgpCi0JCQkJLSB2YWwuZG91YmxlX3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwKLQkgKiB0aGUgUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRG91YmxlLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIG11bHRpcGxpY2F0aW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIG11bHRpcGxpY2F0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB0aW1lcyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEb3VibGUuY2xhc3MpOwotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRG91YmxlKGRvdWJsZV92YWx1ZSgpCi0JCQkJKiB2YWwuZG91YmxlX3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gZGl2aXNpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBkaXZpc2lvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RvdWJsZS5jbGFzcyk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoZG91YmxlX3ZhbHVlKCkKLQkJCQkvIHZhbC5kb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBpbnRlZ2VyIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgaW50ZWdlcgotCSAqICAgICAgICAgZGl2aXNpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGlkaXYoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCi0JCVhTRG91YmxlIHZhbCA9IChYU0RvdWJsZSkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRG91YmxlLmNsYXNzKTsKLQotCQlpZiAodGhpcy5uYW4oKSB8fCB2YWwubmFuKCkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IubnVtZXJpY19vdmVyZmxvdygiRGl2aWRlbmQgb3IgZGl2aXNvciBpcyBOYU4iKTsKLQotCQlpZiAodGhpcy5pbmZpbml0ZSgpKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLm51bWVyaWNfb3ZlcmZsb3coIkRpdmlkZW5kIGlzIGluZmluaXRlIik7Ci0KLQkJaWYgKHZhbC56ZXJvKCkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuZGl2X3plcm8obnVsbCk7Ci0KLQkJQmlnRGVjaW1hbCByZXN1bHQgPSBCaWdEZWNpbWFsLnZhbHVlT2YoKGRvdWJsZV92YWx1ZSgpIC8gdmFsLmRvdWJsZV92YWx1ZSgpKSk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNJbnRlZ2VyKHJlc3VsdC50b0JpZ0ludGVnZXIoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoCi0JICogQHJldHVybiBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1vZChSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEb3VibGUuY2xhc3MpOwotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRG91YmxlKGRvdWJsZV92YWx1ZSgpCi0JCQkJJSB2YWwuZG91YmxlX3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBOZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoaXMgWFNEZWNpbWFsCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHVuYXJ5X21pbnVzKCkgewotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRG91YmxlKC0xCi0JCQkJKiBkb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8vIGZ1bmN0aW9ucwotCS8qKgotCSAqIEFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIGFicygpIHsKLQkJcmV0dXJuIG5ldyBYU0RvdWJsZShNYXRoLmFicyhkb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlCi0JICogICAgICAgICBudW1iZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIGNlaWxpbmcoKSB7Ci0JCXJldHVybiBuZXcgWFNEb3VibGUoTWF0aC5jZWlsKGRvdWJsZV92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0JICogICAgICAgICBudW1iZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIGZsb29yKCkgewotCQlyZXR1cm4gbmV3IFhTRG91YmxlKE1hdGguZmxvb3IoZG91YmxlX3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICogCi0JICogQHJldHVybiBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBOdW1lcmljVHlwZSByb3VuZCgpIHsKLQkJQmlnRGVjaW1hbCB2YWx1ZSA9IG5ldyBCaWdEZWNpbWFsKF92YWx1ZSk7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSB2YWx1ZS5zZXRTY2FsZSgwLCBSb3VuZGluZ01vZGUuSEFMRl9VUCk7Ci0JCXJldHVybiBuZXcgWFNEb3VibGUocm91bmQuZG91YmxlVmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKCkgewotCi0JCXJldHVybiByb3VuZF9oYWxmX3RvX2V2ZW4oMCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZAotCSAqIHByZWNpc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcHJlY2lzaW9uCi0JICogICAgICAgICAgICBBbiBpbnRlZ2VyIHByZWNpc2lvbgotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKGludCBwcmVjaXNpb24pIHsKLQkJQmlnRGVjaW1hbCB2YWx1ZSA9IG5ldyBCaWdEZWNpbWFsKF92YWx1ZSk7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSB2YWx1ZS5zZXRTY2FsZShwcmVjaXNpb24sIFJvdW5kaW5nTW9kZS5IQUxGX0VWRU4pOwotCQlyZXR1cm4gbmV3IFhTRG91YmxlKHJvdW5kLmRvdWJsZVZhbHVlKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEdXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0R1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYjFkYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0R1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODIyMjMgLSBJbXBsZW1lbnRlZCBYU0R1cmF0aW9uIHR5cGUgZm9yIGNhc3RhYmxlIGNoZWNraW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEVxOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBHdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wTHQ7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgeHM6ZHVyYXRpb24gZGF0YSB0eXBlLiBPdGhlciBkdXJhdGlvbiBpbXBsZW1lbnRhdGlvbnMKLSAqIHNob3VsZCBpbmhlcml0IGZyb20gdGhpcyBpbXBsZW1lbnRhdGlvbi4KLSAqIAotICogQHNpbmNlIDEuMSBUaGlzIHVzZWQgdG8gYmUgYW4gYWJzdHJhY3QgY2xhc3MgYnV0IHdhcyBpbmNvcnJlY3RseSBpbXBsZW1lbnRlZAotICogICAgICAgIGFzIHN1Y2guCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0R1cmF0aW9uIGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxLCBDbXBMdCwgQ21wR3QsIENsb25lYWJsZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfRFVSQVRJT04gPSAieHM6ZHVyYXRpb24iOwotCXByb3RlY3RlZCBpbnQgX3llYXI7Ci0JcHJvdGVjdGVkIGludCBfbW9udGg7Ci0JcHJvdGVjdGVkIGludCBfZGF5czsKLQlwcm90ZWN0ZWQgaW50IF9ob3VyczsKLQlwcm90ZWN0ZWQgaW50IF9taW51dGVzOwotCXByb3RlY3RlZCBkb3VibGUgX3NlY29uZHM7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gX25lZ2F0aXZlOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIG1vcmUgdGhhbiAyNCBob3VycyBpcwotCSAqIHN1cHBsaWVkLCB0aGUgbnVtYmVyIG9mIGRheXMgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuIFRoZSBzYW1lIG9jY3VycyBmb3IKLQkgKiBtaW51dGVzIGFuZCBzZWNvbmRzCi0JICogCi0JICogQHBhcmFtIHllYXJzCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgeWVhcnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lLgotCSAqIEBwYXJhbSBtb250aHMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBtb250aHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lLgotCSAqIEBwYXJhbSBkYXlzCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgZGF5cyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcGFyYW0gaG91cnMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBob3VycyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcGFyYW0gbWludXRlcwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIG1pbnV0ZXMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIHNlY29uZHMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBuZWdhdGl2ZQotCSAqICAgICAgICAgICAgVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0JICogICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uKGludCB5ZWFycywgaW50IG1vbnRocywgaW50IGRheXMsIGludCBob3VycywgaW50IG1pbnV0ZXMsCi0JCQlkb3VibGUgc2Vjb25kcywgYm9vbGVhbiBuZWdhdGl2ZSkgewotCQlfeWVhciA9IHllYXJzOwotCQlfbW9udGggPSBtb250aHM7Ci0JCV9kYXlzID0gZGF5czsKLQkJX2hvdXJzID0gaG91cnM7Ci0JCV9taW51dGVzID0gbWludXRlczsKLQkJX3NlY29uZHMgPSBzZWNvbmRzOwotCQlfbmVnYXRpdmUgPSBuZWdhdGl2ZTsKLQotCQlpZiAoX21vbnRoID49IDEyKSB7Ci0JCQlfeWVhciArPSBfbW9udGggLyAxMjsKLQkJCV9tb250aCA9IF9tb250aCAlIDEyOwotCQl9Ci0KLQkJaWYgKF9zZWNvbmRzID49IDYwKSB7Ci0JCQlpbnQgaXNlYyA9IChpbnQpIF9zZWNvbmRzOwotCQkJZG91YmxlIHJlbSA9IF9zZWNvbmRzIC0gKGlzZWMpOwotCi0JCQlfbWludXRlcyArPSBpc2VjIC8gNjA7Ci0JCQlfc2Vjb25kcyA9IGlzZWMgJSA2MDsKLQkJCV9zZWNvbmRzICs9IHJlbTsKLQkJfQotCQlpZiAoX21pbnV0ZXMgPj0gNjApIHsKLQkJCV9ob3VycyArPSBfbWludXRlcyAvIDYwOwotCQkJX21pbnV0ZXMgPSBfbWludXRlcyAlIDYwOwotCQl9Ci0JCWlmIChfaG91cnMgPj0gMjQpIHsKLQkJCV9kYXlzICs9IF9ob3VycyAvIDI0OwotCQkJX2hvdXJzID0gX2hvdXJzICUgMjQ7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcwotCSAqIAotCSAqIEBwYXJhbSBzZWNzCi0JICogICAgICAgICAgICBOdW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uKGRvdWJsZSBzZWNzKSB7Ci0JCXRoaXMoMCwgMCwgMCwgMCwgMCwgTWF0aC5hYnMoc2VjcyksIHNlY3MgPCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byBhIGR1cmF0aW9uIG9mIG5vIHRpbWUgKDBkYXlzLCAwaG91cnMsIDBtaW51dGVzLCAwc2Vjb25kcykKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbigpIHsKLQkJdGhpcygwLCAwLCAwLCAwLCAwLCAwLjAsIGZhbHNlKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJkdXJhdGlvbiI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0RVUkFUSU9OOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlTdHJpbmcgcmV0ID0gIiI7Ci0JCWJvb2xlYW4gZGlkX3NvbWV0aGluZyA9IGZhbHNlOwotCQlTdHJpbmcgdHJldCA9ICIiOwotCi0JCWlmIChuZWdhdGl2ZSgpICYmICEoZGF5cygpID09IDAgJiYgaG91cnMoKSA9PSAwICYmIHNlY29uZHMoKSA9PSAwKSkKLQkJCXJldCArPSAiLSI7Ci0KLQkJcmV0ICs9ICJQIjsKLQotCQlpbnQgeWVhcnMgPSB5ZWFyKCk7Ci0JCWlmICh5ZWFycyAhPSAwKQotCQkJcmV0ICs9IHllYXJzICsgIlkiOwotCi0JCWludCBtb250aHMgPSBtb250aCgpOwotCQlpZiAobW9udGhzICE9IDApIHsKLQkJCXJldCArPSBtb250aHMgKyAiTSI7Ci0JCX0KLQotCQlpZiAoZGF5cygpICE9IDApIHsKLQkJCXJldCArPSBkYXlzKCkgKyAiRCI7Ci0JCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJfQotCi0JCS8vIGRvIHRoZSAidGltZSIgYml0Ci0JCWludCBob3VycyA9IGhvdXJzKCk7Ci0JCWludCBtaW51dGVzID0gbWludXRlcygpOwotCQlkb3VibGUgc2Vjb25kcyA9IHNlY29uZHMoKTsKLQkJCi0JCWlmIChob3VycyAhPSAwKSB7Ci0JCQl0cmV0ICs9IGhvdXJzICsgIkgiOwotCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCX0KLQkJaWYgKG1pbnV0ZXMgIT0gMCkgewotCQkJdHJldCArPSBtaW51dGVzICsgIk0iOwotCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCX0KLQkJaWYgKHNlY29uZHMgIT0gMCkgewotCQkJU3RyaW5nIGRvdWJTdHIgPSAoRG91YmxlLnZhbHVlT2Yoc2Vjb25kcykudG9TdHJpbmcoKSk7Ci0JCQlpZiAoZG91YlN0ci5lbmRzV2l0aCgiLjAiKSkgewotCQkJCS8vIHN0cmluZyB2YWx1ZSBvZiB4LjAgc2Vjb25kcyBpcyB4Uy4gZS5nLCA3LjBTIGlzIGNvbnZlcnRlZCB0bwotCQkJCS8vIDdTLgotCQkJCXRyZXQgKz0gZG91YlN0ci5zdWJzdHJpbmcoMCwgZG91YlN0ci5pbmRleE9mKCIuMCIpKSArICJTIjsKLQkJCX0gZWxzZSB7Ci0JCQkJdHJldCArPSBzZWNvbmRzICsgIlMiOwotCQkJfQotCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCX0gZWxzZSBpZiAoIWRpZF9zb21ldGhpbmcpIHsKLQkJCQl0cmV0ICs9ICIwUyI7Ci0JCX0KLQkJCi0JCWlmICgoeWVhcigpID09IDAgJiYgbW9udGgoKSA9PSAwKSB8fCAoaG91cnMgPiAwIHx8IG1pbnV0ZXMgPiAwIHx8IHNlY29uZHMgPiAwKSkgewotCQkJaWYgKHRyZXQubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJcmV0ICs9ICJUIiArIHRyZXQ7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGRheXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIGRheXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgZGF5cygpIHsKLQkJcmV0dXJuIF9kYXlzOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIG1pbnV0ZXMgKG1heCA2MCkgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0JICogc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOdW1iZXIgb2YgbWludXRlcyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBtaW51dGVzKCkgewotCQlyZXR1cm4gX21pbnV0ZXM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgaG91cnMgKG1heCAyNCkgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIGhvdXJzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IGhvdXJzKCkgewotCQlyZXR1cm4gX2hvdXJzOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgKG1heCA2MCkgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0JICogc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOdW1iZXIgb2Ygc2Vjb25kcyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICovCi0JcHVibGljIGRvdWJsZSBzZWNvbmRzKCkgewotCQlyZXR1cm4gX3NlY29uZHM7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGV5IGJvdGggcmVwcmVzZW50IHRoZSBkdXJhdGlvbiBvZiB0aW1lLiBGYWxzZSBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEdXJhdGlvbiB2YWwgPSAoWFNEdXJhdGlvbikgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywKLQkJCQlYU0R1cmF0aW9uLmNsYXNzKTsKLQotCQlyZXR1cm4gdmFsdWUoKSA9PSB2YWwudmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBsYXJnZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0JICogICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTRGF5VGltZUR1cmF0aW9uLmNsYXNzKTsKLQotCQlyZXR1cm4gdmFsdWUoKSA8IHZhbC52YWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIHNtYWxsZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0JICogICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTRGF5VGltZUR1cmF0aW9uLmNsYXNzKTsKLQotCQlyZXR1cm4gdmFsdWUoKSA+IHZhbC52YWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaAotCSAqIHRpbWUKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoIHRpbWUuCi0JICogICAgICAgICBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBuZWdhdGl2ZSgpIHsKLQkJcmV0dXJuIF9uZWdhdGl2ZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkIGFzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB3aXRoaW4gaXQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBzZWNvbmRzIG1ha2luZyB1cCB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKi8KLQlwdWJsaWMgZG91YmxlIHZhbHVlKCkgewotCQlkb3VibGUgcmV0ID0gZGF5cygpICogMjQgKiA2MCAqIDYwOwotCi0JCXJldCArPSBob3VycygpICogNjAgKiA2MDsKLQkJcmV0ICs9IG1pbnV0ZXMoKSAqIDYwOwotCQlyZXQgKz0gc2Vjb25kcygpOwotCi0JCWlmIChuZWdhdGl2ZSgpKQotCQkJcmV0ICo9IC0xOwotCQkKLQkJCi0KLQkJcmV0dXJuIHJldDsKLQl9Ci0JCi0JcHVibGljIGRvdWJsZSB0aW1lX3ZhbHVlKCkgewotCQlkb3VibGUgcmV0ID0gMDsKLQkJcmV0ICs9IGhvdXJzKCkgKiA2MCAqIDYwOwotCQlyZXQgKz0gbWludXRlcygpICogNjA7Ci0JCXJldCArPSBzZWNvbmRzKCk7Ci0KLQkJaWYgKG5lZ2F0aXZlKCkpCi0JCQlyZXQgKj0gLTE7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB0aW1lIGR1cmF0aW9uCi0JICogZnJvbSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0Ci0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgdGltZSBkdXJhdGlvbiBleHRyYWN0ZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlIHx8IGFhdCBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuIHx8IGFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlpZiAoIShpc0Nhc3RhYmxlKGFhdCkpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JCQotCQlYU0R1cmF0aW9uIGR1cmF0aW9uID0gY2FzdER1cmF0aW9uKGFhdCk7Ci0KLQkJaWYgKGR1cmF0aW9uID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCi0JCXJzLmFkZChkdXJhdGlvbik7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCXByaXZhdGUgWFNEdXJhdGlvbiBjYXN0RHVyYXRpb24oQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24pIHsKLQkJCVhTRHVyYXRpb24gZHVyYXRpb24gPSAoWFNEdXJhdGlvbikgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0R1cmF0aW9uKGR1cmF0aW9uLnllYXIoKSwgZHVyYXRpb24ubW9udGgoKSwgZHVyYXRpb24uZGF5cygpLCBkdXJhdGlvbi5ob3VycygpLCBkdXJhdGlvbi5taW51dGVzKCksIGR1cmF0aW9uLnNlY29uZHMoKSwgZHVyYXRpb24ubmVnYXRpdmUoKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZURURHVyYXRpb24oYWF0LnN0cmluZ192YWx1ZSgpKTsKLQl9Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBYU0RheVRpbWVEdXJhdGlvbiBieSBwYXJzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcmV0dXJuIE5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRHVyYXRpb24gcGFyc2VEVER1cmF0aW9uKFN0cmluZyBzdHIpIHsKLQkJYm9vbGVhbiBuZWdhdGl2ZSA9IGZhbHNlOwotCQlpbnQgeWVhcnMgPSAwOwotCQlpbnQgbW9udGhzID0gMDsKLQkJaW50IGRheXMgPSAwOwotCQlpbnQgaG91cnMgPSAwOwotCQlpbnQgbWludXRlcyA9IDA7Ci0JCWRvdWJsZSBzZWNvbmRzID0gMDsKLQotCQkvLyBzdHJpbmcgZm9sbG93aW5nIHRoZSBQCi0JCVN0cmluZyBwc3RyID0gIiI7Ci0JCVN0cmluZyB0c3RyID0gIiI7Ci0KLQkJLy8gZ2V0IHRoZSBuZWdhdGl2ZSBhbmQgcHN0cgotCQlpZiAoc3RyLnN0YXJ0c1dpdGgoIi1QIikpIHsKLQkJCW5lZ2F0aXZlID0gdHJ1ZTsKLQkJCXBzdHIgPSBzdHIuc3Vic3RyaW5nKDIsIHN0ci5sZW5ndGgoKSk7Ci0JCX0gZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIlAiKSkgewotCQkJbmVnYXRpdmUgPSBmYWxzZTsKLQkJCXBzdHIgPSBzdHIuc3Vic3RyaW5nKDEsIHN0ci5sZW5ndGgoKSk7Ci0JCX0gZWxzZQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJdHJ5IHsKLQkJCWludCBpbmRleCA9IHBzdHIuaW5kZXhPZignWScpOwotCQkJYm9vbGVhbiBkaWRfc29tZXRoaW5nID0gZmFsc2U7Ci0KLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCVN0cmluZyBkaWdpdCA9IHBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCQl5ZWFycyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXBzdHIgPSBwc3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHBzdHIubGVuZ3RoKCkpOwotCQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQkJfQotCi0JCQlpbmRleCA9IHBzdHIuaW5kZXhPZignTScpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gcHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCW1vbnRocyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXBzdHIgPSBwc3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHBzdHIubGVuZ3RoKCkpOwotCQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQkJfQotCi0JCQkvLyBnZXQgdGhlIGRheXMKLQkJCWluZGV4ID0gcHN0ci5pbmRleE9mKCdEJyk7Ci0KLQkJCWlmIChpbmRleCA9PSAtMSkgewotCQkJCWlmIChwc3RyLnN0YXJ0c1dpdGgoIlQiKSkgewotCQkJCQl0c3RyID0gcHN0ci5zdWJzdHJpbmcoMSwgcHN0ci5sZW5ndGgoKSk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSBwc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJZGF5cyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXRzdHIgPSBwc3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHBzdHIubGVuZ3RoKCkpOwotCi0JCQkJaWYgKHRzdHIuc3RhcnRzV2l0aCgiVCIpKSB7Ci0JCQkJCXRzdHIgPSB0c3RyLnN1YnN0cmluZygxLCB0c3RyLmxlbmd0aCgpKTsKLQkJCQl9IGVsc2UgewotCQkJCQl0c3RyID0gIiI7Ci0JCQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQkJCX0KLQkJCX0KLQotCQkJLy8gZG8gdGhlIFQgc3RyCi0KLQkJCS8vIGhvdXIKLQkJCWluZGV4ID0gdHN0ci5pbmRleE9mKCdIJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSB0c3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJaG91cnMgPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0KTsKLQkJCQl0c3RyID0gdHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCB0c3RyLmxlbmd0aCgpKTsKLQkJCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJCX0KLQkJCS8vIG1pbnV0ZQotCQkJaW5kZXggPSB0c3RyLmluZGV4T2YoJ00nKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCVN0cmluZyBkaWdpdCA9IHRzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCQltaW51dGVzID0gSW50ZWdlci5wYXJzZUludChkaWdpdCk7Ci0JCQkJdHN0ciA9IHRzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgdHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0JCQkvLyBzZWNvbmRzCi0JCQlpbmRleCA9IHRzdHIuaW5kZXhPZignUycpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gdHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCXNlY29uZHMgPSBEb3VibGUucGFyc2VEb3VibGUoZGlnaXQpOwotCQkJCXRzdHIgPSB0c3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHRzdHIubGVuZ3RoKCkpOwotCQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQkJfQotCQkJaWYgKCFkaWRfc29tZXRoaW5nKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGVycikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhTRHVyYXRpb24oeWVhcnMsIG1vbnRocywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsCi0JCQkJbmVnYXRpdmUpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewotCQlyZXR1cm4gbmV3IFhTRHVyYXRpb24oeWVhcigpLCBtb250aCgpLCBkYXlzKCksIGhvdXJzKCksIG1pbnV0ZXMoKSwKLQkJCQlzZWNvbmRzKCksIG5lZ2F0aXZlKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIHllYXJzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiB5ZWFycyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCB5ZWFyKCkgewotCQlyZXR1cm4gX3llYXI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgbW9udGhzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBtb250aHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgbW9udGgoKSB7Ci0JCXJldHVybiBfbW9udGg7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlTdHJpbmcgdmFsdWUgPSBhYXQuc3RyaW5nX3ZhbHVlKCk7IC8vIGdldCB0aGlzIG9uY2Ugc28gd2UgZG9uJ3QgcmVjcmVhdGUgZXZlcnl0aW1lLgotCQlTdHJpbmcgdHlwZSA9IGFhdC5zdHJpbmdfdHlwZSgpOwotCQlpZiAodHlwZS5lcXVhbHMoInhzOnN0cmluZyIpIHx8IHR5cGUuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikpIHsKLQkJCWlmIChpc0R1cmF0aW9uVmFsdWUodmFsdWUpKSB7Ci0JCQkJcmV0dXJuIHRydWU7ICAvLyBXZSBtaWdodCBiZSBhYmxlIHRvIGNhc3QgdGhpcy4KLQkJCX0KLQkJfQotCQkKLQkJLy8gV2UgY2FuIGNhc3QgZnJvbSBvdXJzZWxmIG9yIGRlcml2YXRpb25zIG9mIG91cnNlbHZlcy4KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24pIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNEdXJhdGlvblZhbHVlKFN0cmluZyB2YWx1ZSkgewotCQlyZXR1cm4gdmFsdWUuc3RhcnRzV2l0aCgiUCIpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoIi1QIik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRW50aXR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRW50aXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MWYyNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0VudGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgYnVnIDIyODIyMyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBCdWlsdCBpbiBEYXRhIFR5cGUgZm9yIHhzOkVudGl0eQotICogCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGNsYXNzIFhTRW50aXR5IGV4dGVuZHMgWFNOQ05hbWUgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19FTlRJVFkgPSAieHM6RU5USVRZIjsKLQotCXB1YmxpYyBYU0VudGl0eSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0JCi0JcHVibGljIFhTRW50aXR5KFN0cmluZyB2YWx1ZSkgewotCQlzdXBlcih2YWx1ZSk7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19FTlRJVFk7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIkVOVElUWSI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgd2l0aGluCi0JICogdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiAgVGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoaXMKLQkgKiBpcyByZWxheGVkIGZyb20gdGhlIFhNTCBTY2hlbWEgcmVxdWlyZW1lbnQuICBUaGUgRU5USVRZIGRvZXMKLQkgKiBub3QgaGF2ZSB0byBiZSBsb2NhdGVkIG9yIGV4cGFuZGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5kCi0JICogZXZhbHVhdGlvbiBmb3IgY2FzdGluZy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBFTlRJVFkKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCQotCi0JCXJzLmFkZChuZXcgWFNFbnRpdHkoYWF0LnN0cmluZ192YWx1ZSgpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0Zsb2F0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRmxvYXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5ZjM2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRmxvYXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3OTQwNiAtIGltcHJvdmVtZW50cyB0byBuZWdhdGl2ZSB6ZXJvIHZhbHVlcyBmb3IgeHM6ZmxvYXQKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gZml4ZWQgcm91bmRpbmcgZXJyb3JzLgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBmaXhlZCBjYXN0aW5nIGVycm9ycy4KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gQnVnIDI4NjA2MiAtIEZpeCBpZGl2IGVycm9yIGNhc2VzIGFuZCBpbmNyZWFzZSBwcmVjaXNpb24gIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjgxMDI4IC0gQWRkZWQgY29uc3RydWN0b3IgZnJvbSBzdHJpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5Sb3VuZGluZ01vZGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRmxvYXQgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTRmxvYXQgZXh0ZW5kcyBOdW1lcmljVHlwZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfRkxPQVQgPSAieHM6ZmxvYXQiOwotCXByaXZhdGUgRmxvYXQgX3ZhbHVlOwotCXByaXZhdGUgWFBhdGhEZWNpbWFsRm9ybWF0IGZvcm1hdCA9IG5ldyBYUGF0aERlY2ltYWxGb3JtYXQoIjAuIyMjIyMjI0UwIik7Ci0JLyoqCi0JICogSW5pdGlhdGVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG51bWJlcgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBUaGUgbnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0Zsb2F0KGZsb2F0IHgpIHsKLQkJX3ZhbHVlID0geDsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTRmxvYXQoKSB7Ci0JCXRoaXMoMCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgYSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyCi0JICogCi0JICogQHBhcmFtIGluaXQKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0Zsb2F0KFN0cmluZyBpbml0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJdHJ5IHsKLQkJCWlmIChpbml0LmVxdWFscygiLUlORiIpKSB7Ci0JCQkJX3ZhbHVlID0gRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFk7Ci0JCQl9IGVsc2UgaWYgKGluaXQuZXF1YWxzKCJJTkYiKSkgewotCQkJCV92YWx1ZSA9IEZsb2F0LlBPU0lUSVZFX0lORklOSVRZOwotCQkJfSBlbHNlIHsKLQkJCQlfdmFsdWUgPSBuZXcgRmxvYXQoaW5pdCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JfQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6ZmxvYXQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfRkxPQVQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJmbG9hdCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImZsb2F0IjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBudW1iZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlpZiAoemVybygpKSB7Ci0JCSAgIHJldHVybiAiMCI7Ci0JCX0KLQkJaWYgKG5lZ2F0aXZlWmVybygpKSB7Ci0JCSAgIHJldHVybiAiLTAiOwkKLQkJfQotCQkKLQkJaWYgKG5hbigpKSB7Ci0JCSAgIHJldHVybiAiTmFOIjsJCi0JCX0KLQkJCQkJCQkJCi0JCXJldHVybiBmb3JtYXQueHBhdGhGb3JtYXQoX3ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgTmFOCi0JICogCi0JICogQHJldHVybiBUcnVlIGlzIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBOYU4uIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIG5hbigpIHsKLQkJcmV0dXJuIEZsb2F0LmlzTmFOKF92YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIG5lZ2F0aXZlIG9yIHBvc2l0aXZlIGluZmluaXR5Ci0JICogCi0JICogQHJldHVybiBUcnVlIGlzIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBpbmZpbml0eS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gaW5maW5pdGUoKSB7Ci0JCXJldHVybiBGbG9hdC5pc0luZmluaXRlKF92YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHplcm8oKSB7Ci0JICAgcmV0dXJuIChGbG9hdC5jb21wYXJlKF92YWx1ZSwgMCkgPT0gMCk7Ci0JfQotCQotCS8qCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBYU0Zsb2F0IHJlcHJlc2VudHMgLTAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBYU0Zsb2F0IHJlcHJlc2VudHMgLTAuIEZhbHNlIG90aGVyd2lzZS4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gbmVnYXRpdmVaZXJvKCkgewotCSAgIHJldHVybiAoRmxvYXQuY29tcGFyZShfdmFsdWUsIC0wLjBmKSA9PSAwKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBmbG9hdCBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsb2F0Ci0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZmxvYXQgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fCBhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQkJCi0JCWlmICghKGFhdC5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6c3RyaW5nIikgfHwgYWF0IGluc3RhbmNlb2YgTm9kZVR5cGUgfHwKLQkJCWFhdC5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6dW50eXBlZEF0b21pYyIpIHx8Ci0JCQlhYXQuc3RyaW5nX3R5cGUoKS5lcXVhbHMoInhzOmJvb2xlYW4iKSB8fAotCQkJYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JCQotCi0JCXRyeSB7Ci0JCQlGbG9hdCBmID0gbnVsbDsKLQkJCWlmIChhYXQuc3RyaW5nX3ZhbHVlKCkuZXF1YWxzKCJJTkYiKSkgewotCQkJCWYgPSBGbG9hdC5QT1NJVElWRV9JTkZJTklUWTsKLQkJCX0gZWxzZSBpZiAoYWF0LnN0cmluZ192YWx1ZSgpLmVxdWFscygiLUlORiIpKSB7Ci0JCQkJZiA9IEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZOwotCQkJfSBlbHNlIGlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4pIHsKLQkJCQlpZiAoYWF0LnN0cmluZ192YWx1ZSgpLmVxdWFscygidHJ1ZSIpKSB7Ci0JCQkJCWYgPSBuZXcgRmxvYXQoIjEuMEUwIik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZiA9IG5ldyBGbG9hdCgiMC4wRTAiKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJICAgIGYgPSBuZXcgRmxvYXQoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCX0KLQkJCXJzLmFkZChuZXcgWFNGbG9hdChmLmZsb2F0VmFsdWUoKSkpOwotCQkJcmV0dXJuIHJzOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgZmxvYXQgdmFsdWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIGZsb2F0IHZhbHVlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBmbG9hdCBmbG9hdF92YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4KLQkgKiBAcGFyYW0gYWEKLQkgKiAgICAgICAgICAgIFRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGgKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG51bWJlci4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhYSwgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUFueVR5cGUgY2FyZyA9IGNvbnZlcnRBcmcoYWEpOwotCQlpZiAoIShjYXJnIGluc3RhbmNlb2YgWFNGbG9hdCkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCVhTRmxvYXQgZiA9IChYU0Zsb2F0KSBjYXJnOwotCQlpZiAobmFuKCkgJiYgZi5uYW4oKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlGbG9hdCB0aGF0dmFsdWUgPSBuZXcgRmxvYXQoZi5mbG9hdF92YWx1ZSgpKTsKLQkJRmxvYXQgdGhpc3ZhbHVlID0gbmV3IEZsb2F0KGZsb2F0X3ZhbHVlKCkpOwotCi0JCXJldHVybiB0aGlzdmFsdWUuZXF1YWxzKHRoYXR2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlBbnlUeXBlIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0Zsb2F0LmNsYXNzKTsKLQkJcmV0dXJuIGZsb2F0X3ZhbHVlKCkgPiB2YWwuZmxvYXRfdmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGRhdGF0eXBlIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gaXMgYSBncmVhdGVyIG51bWJlciB0aGFuIHRoZQotCSAqICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUFueVR5cGUgY2FyZyA9IGNvbnZlcnRBcmcoYXJnKTsKLQkJWFNGbG9hdCB2YWwgPSAoWFNGbG9hdCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRmxvYXQuY2xhc3MpOwotCQlyZXR1cm4gZmxvYXRfdmFsdWUoKSA8IHZhbC5mbG9hdF92YWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBhZGRpdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCUFueVR5cGUgYXQgPSBnZXRfc2luZ2xlX2FyZyhjYXJnKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0Zsb2F0KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNGbG9hdChmbG9hdF92YWx1ZSgpCi0JCQkJKyB2YWwuZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBzdWJ0cmFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnN0cnVjdG9yKGFyZyk7Ci0JCUFueVR5cGUgYXQgPSBnZXRfc2luZ2xlX2FyZyhjYXJnKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0Zsb2F0KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNGbG9hdChmbG9hdF92YWx1ZSgpCi0JCQkJLSB2YWwuZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBtdWx0aXBsaWNhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdGltZXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnN0cnVjdG9yKGFyZyk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0Zsb2F0LmNsYXNzKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Zsb2F0KGZsb2F0X3ZhbHVlKCkKLQkJCQkqIHZhbC5mbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgZGl2aXNpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0Zsb2F0LmNsYXNzKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Zsb2F0KGZsb2F0X3ZhbHVlKCkKLQkJCQkvIHZhbC5mbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGludGVnZXIKLQkgKiAgICAgICAgIGRpdmlzaW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJWFNGbG9hdCB2YWwgPSAoWFNGbG9hdCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRmxvYXQuY2xhc3MpOwotCi0JCWlmICh0aGlzLm5hbigpIHx8IHZhbC5uYW4oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5udW1lcmljX292ZXJmbG93KCJEaXZpZGVuZCBvciBkaXZpc29yIGlzIE5hTiIpOwotCi0JCWlmICh0aGlzLmluZmluaXRlKCkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IubnVtZXJpY19vdmVyZmxvdygiRGl2aWRlbmQgaXMgaW5maW5pdGUiKTsKLQotCQlpZiAodmFsLnplcm8oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5kaXZfemVybyhudWxsKTsKLQotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IEJpZ0RlY2ltYWwudmFsdWVPZigoZmxvYXRfdmFsdWUoKSAvIHZhbC5mbG9hdF92YWx1ZSgpKSk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNJbnRlZ2VyKHJlc3VsdC50b0JpZ0ludGVnZXIoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0JICogUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRmxvYXQuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtb2QoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQlYU0Zsb2F0IHZhbCA9IChYU0Zsb2F0KSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNGbG9hdC5jbGFzcyk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNGbG9hdChmbG9hdF92YWx1ZSgpCi0JCQkJJSB2YWwuZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE5lZ2F0ZXMgdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHVuYXJ5X21pbnVzKCkgewotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ci0JCQkJLmNyZWF0ZV9uZXcobmV3IFhTRmxvYXQoLTEgKiBmbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogQWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBOdW1lcmljVHlwZSBhYnMoKSB7Ci0JCXJldHVybiBuZXcgWFNGbG9hdChNYXRoLmFicyhmbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotCSAqICAgICAgICAgbnVtYmVyIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBOdW1lcmljVHlwZSBjZWlsaW5nKCkgewotCQlyZXR1cm4gbmV3IFhTRmxvYXQoKGZsb2F0KSBNYXRoLmNlaWwoZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0JICogICAgICAgICBudW1iZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIGZsb29yKCkgewotCQlyZXR1cm4gbmV3IFhTRmxvYXQoKGZsb2F0KSBNYXRoLmZsb29yKGZsb2F0X3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICogCi0JICogQHJldHVybiBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIHJvdW5kKCkgewotCQlCaWdEZWNpbWFsIHZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoZmxvYXRfdmFsdWUoKSk7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSB2YWx1ZS5zZXRTY2FsZSgwLCBSb3VuZGluZ01vZGUuSEFMRl9VUCk7Ci0JCXJldHVybiBuZXcgWFNGbG9hdChyb3VuZC5mbG9hdFZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKCkgewotCQlyZXR1cm4gcm91bmRfaGFsZl90b19ldmVuKDApOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBwcmVjaXNpb24gQW4gaW50ZWdlciBwcmVjaXNpb24gCi0JICogQHJldHVybiBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKGludCBwcmVjaXNpb24pIHsKLQkJQmlnRGVjaW1hbCB2YWx1ZSA9IG5ldyBCaWdEZWNpbWFsKF92YWx1ZSk7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSB2YWx1ZS5zZXRTY2FsZShwcmVjaXNpb24sIFJvdW5kaW5nTW9kZS5IQUxGX0VWRU4pOwotCQlyZXR1cm4gbmV3IFhTRmxvYXQocm91bmQuZmxvYXRWYWx1ZSgpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIEFueVR5cGUgY29udmVydEFyZyhBbnlUeXBlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYXJnKTsKLQkJcnMgPSBjb25zdHJ1Y3Rvcihycyk7Ci0JCUFueVR5cGUgY2FyZyA9IHJzLmZpcnN0KCk7Ci0JCXJldHVybiBjYXJnOwotCX0KLQkKLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGFyZzsKLQkJSXRlcmF0b3IgaXQgPSBjYXJnLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCUFueVR5cGUgdHlwZSA9IChBbnlUeXBlKSBpdC5uZXh0KCk7Ci0JCQlpZiAodHlwZS5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6dW50eXBlZEF0b21pYyIpIHx8Ci0JCQkJdHlwZS5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6c3RyaW5nIikpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJfQotCQl9Ci0KLQkJY2FyZyA9IGNvbnN0cnVjdG9yKGNhcmcpOwotCQlyZXR1cm4gY2FyZzsKLQl9CQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dEYXkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNHRGF5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZDY4NzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dEYXkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIENvcnJlY3QgcGFyc2luZyBvZiBEYXRlIHRvIGdldCBkYXkgY29ycmVjdGx5LgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgyMjIzIC0gZml4ZWQgaXNzdWUgd2l0aCBjYXN0aW5nLgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERheSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNHRGF5IGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfREFZID0gInhzOmdEYXkiOwotCXByaXZhdGUgQ2FsZW5kYXIgX2NhbGVuZGFyOwotCXByaXZhdGUgYm9vbGVhbiBfdGltZXpvbmVkOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXkKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IHRvIGJlIHN0b3JlZAotCSAqIEBwYXJhbSB0egotCSAqICAgICAgICAgICAgVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF5Ci0JICovCi0JcHVibGljIFhTR0RheShDYWxlbmRhciBjYWwsIFhTRHVyYXRpb24gdHopIHsKLQkJX2NhbGVuZGFyID0gY2FsOwotCQlpZiAodHogIT0gbnVsbCkgewotCQkJX3RpbWV6b25lZCA9IHRydWU7Ci0JCQlfdHogPSB0ejsKLQkJfQotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZGF5Ci0JICovCi0JcHVibGljIFhTR0RheSgpIHsKLQkJdGhpcyhuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJnRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZ0RheSI7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF5IGFuZCBjb25zdHJ1Y3RzIGEgbmV3IFhTR0RheQotCSAqIHJlcHJlc2VudGF0aW9uIG9mIGl0LgotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKQotCSAqIEByZXR1cm4gVGhlIFhTR0RheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNHRGF5IHBhcnNlX2dEYXkoU3RyaW5nIHN0cikgewotCQkKLQkJU3RyaW5nIHN0YXJ0ZGF0ZSA9ICIxOTcyLTEyLSI7Ci0JCVN0cmluZyBzdGFydHRpbWUgPSAiVDAwOjAwOjAwIjsKLQotCQlpbnQgaW5kZXggPSBzdHIubGFzdEluZGV4T2YoJysnLCBzdHIubGVuZ3RoKCkpOwotCQkKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJaW5kZXggPSBzdHIubGFzdEluZGV4T2YoJy0nKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJaW5kZXggPSBzdHIubGFzdEluZGV4T2YoJ1onLCBzdHIubGVuZ3RoKCkpOwotCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCWludCB6SW5kZXggPSBzdHIubGFzdEluZGV4T2YoJ1onLCBzdHIubGVuZ3RoKCkpOwotCQkJaWYgKHpJbmRleCA9PSAtMSkgewotCQkJCWlmIChpbmRleCA+IDQpCi0JCQkJCXpJbmRleCA9IGluZGV4OwotCQkJfQotCQkJaWYgKHpJbmRleCA9PSAtMSkgewotCQkJCXpJbmRleCA9IHN0ci5sYXN0SW5kZXhPZignKycpOwotCQkJfQotCQkJCi0JCQlTdHJpbmdbXSBzcGxpdCA9IHN0ci5zcGxpdCgiLSIpOwotCQkJc3RhcnRkYXRlICs9IHNwbGl0WzNdLnJlcGxhY2UoIloiLCAiIik7Ci0JCQkKLQkJCWlmIChzdHIuaW5kZXhPZignVCcpICE9IC0xKSB7Ci0JCQkJaWYgKHNwbGl0Lmxlbmd0aCA+IDQpIHsKLQkJCQkJU3RyaW5nW10gdGltZXNwbGl0ID0gc3BsaXRbNF0uc3BsaXQoIjoiKTsKLQkJCQkJaWYgKHRpbWVzcGxpdC5sZW5ndGggPCAzKSB7Ci0JCQkJCQlzdGFydHRpbWUgPSAiVCI7Ci0JCQkJCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihzdGFydHRpbWUpOwotCQkJCQkJZm9yIChpbnQgY250ID0gMDsgY250IDwgdGltZXNwbGl0Lmxlbmd0aDsgY250KyspIHsKLQkJCQkJCQlidWYuYXBwZW5kKHRpbWVzcGxpdFtjbnRdICsgIjoiKTsKLQkJCQkJCX0KLQkJCQkJCWJ1Zi5hcHBlbmQoIjAwIik7Ci0JCQkJCQlzdGFydHRpbWUgPSBidWYudG9TdHJpbmcoKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXN0YXJ0dGltZSArPSB0aW1lc3BsaXRbMF0gKyAiOiIgKyB0aW1lc3BsaXRbMV0gKyAiOiIgKyB0aW1lc3BsaXRbMl07Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlzdGFydGRhdGUgPSBzdGFydGRhdGUudHJpbSgpOwotCQkJc3RhcnRkYXRlICs9IHN0YXJ0dGltZTsKLQotCQkJaWYgKHpJbmRleCAhPSAtMSkgewotCQkJCQotCQkJCXN0YXJ0ZGF0ZSArPSBzdHIuc3Vic3RyaW5nKHpJbmRleCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdGFydGRhdGUgKz0gc3RyICsgc3RhcnR0aW1lOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IFhTRGF0ZVRpbWUucGFyc2VEYXRlVGltZShzdGFydGRhdGUpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHRGF5KGR0LmNhbGVuZGFyKCksIGR0LnR6KCkpOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdEYXkgaW4gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ0RheSBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBkYXkKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkJCi0JCVhTR0RheSB2YWwgPSBjYXN0R0RheShhYXQpOwotCi0JCWlmICh2YWwgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcnMuYWRkKHZhbCk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVGltZSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlIHx8IGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTR0RheSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnTW9udGhEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdNb250aCIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z1llYXIiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyTW9udGgiKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQkKLQlwcml2YXRlIFhTR0RheSBjYXN0R0RheShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNHRGF5KSB7Ci0JCQlYU0dEYXkgZ2RheSA9IChYU0dEYXkpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHRGF5KGdkYXkuY2FsZW5kYXIoKSwgZ2RheS50eigpKTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSkgewotCQkJWFNEYXRlIGRhdGUgPSAoWFNEYXRlKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR0RheShkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHRGF5KGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpOwotCQl9Ci0JCXJldHVybiBwYXJzZV9nRGF5KGFhdC5zdHJpbmdfdmFsdWUoKSk7IAotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyCi0JICovCi0JcHVibGljIGludCBkYXkoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gdGltZXpvbmVkKCkgewotCQlyZXR1cm4gX3RpbWV6b25lZDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBkYXkKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIGRheQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlTdHJpbmcgcmV0ID0gIi0tLSI7Ci0KLQkJQ2FsZW5kYXIgYWRqdXN0Rm9ydGltZXpvbmUgPSBjYWxlbmRhcigpOwotCQkKLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSwgMik7Ci0JCQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCWludCBocnMgPSB0eigpLmhvdXJzKCk7Ci0JCQlpbnQgbWluID0gdHooKS5taW51dGVzKCk7Ci0JCQlkb3VibGUgc2VjcyA9IHR6KCkuc2Vjb25kcygpOwotCQkJaWYgKGhycyA9PSAwICYmIG1pbiA9PSAwICYmIHNlY3MgPT0gMCkgewotCQkJICByZXQgKz0gIloiOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkgIFN0cmluZyB0Wm9uZVN0ciA9ICIiOwotCQkJICBpZiAodHooKS5uZWdhdGl2ZSgpKSB7Ci0JCQkJdFpvbmVTdHIgKz0gIi0iOyAgCi0JCQkgIH0KLQkJCSAgZWxzZSB7Ci0JCQkJdFpvbmVTdHIgKz0gIisiOyAKLQkJCSAgfQotCQkJICB0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQoaHJzLCAyKTsgIAotCQkJICB0Wm9uZVN0ciArPSAiOiI7Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChtaW4sIDIpOwotCQkJICAKLQkJCSAgcmV0ICs9IHRab25lU3RyOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmdEYXkiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfR19EQVk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotCSAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dEYXkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNHRGF5IHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgZGF5LiBGYWxzZQotCSAqICAgICAgICAgb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTR0RheSB2YWwgPSAoWFNHRGF5KSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU0dEYXkuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCQkKLQkJcmV0dXJuIHRoaXNjYWwuZXF1YWxzKHRoYXRjYWwpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uIHR6KCkgewotCQlyZXR1cm4gX3R6OwotCX0JCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR01vbnRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR01vbnRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZDgzYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gRml4ZWQgcGFyc2luZyBvZiBnTW9udGggdmFsdWVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ01vbnRoIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0dNb250aCBleHRlbmRzIENhbGVuZGFyVHlwZSBpbXBsZW1lbnRzIENtcEVxIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19HX01PTlRIID0gInhzOmdNb250aCI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG1vbnRoCi0JICogCi0JICogQHBhcmFtIGNhbAotCSAqICAgICAgICAgICAgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIHRvIGJlIHN0b3JlZAotCSAqIEBwYXJhbSB0egotCSAqICAgICAgICAgICAgVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9udGgKLQkgKi8KLQlwdWJsaWMgWFNHTW9udGgoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHR6KSB7Ci0JCV9jYWxlbmRhciA9IGNhbDsKLQkJaWYgKHR6ICE9IG51bGwpIHsKLQkJCV90aW1lem9uZWQgPSB0cnVlOwotCQkJX3R6ID0gdHo7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IG1vbnRoCi0JICovCi0JcHVibGljIFhTR01vbnRoKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImdNb250aCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImdNb250aCI7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9udGggYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHTW9udGgKLQkgKiByZXByZXNlbnRhdGlvbiBvZiBpdC4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKQotCSAqIEByZXR1cm4gVGhlIFhTR01vbnRoIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0dNb250aCBwYXJzZV9nTW9udGgoU3RyaW5nIHN0cikgewotCi0JCVN0cmluZyBzdGFydGRhdGUgPSAiMTk3Mi0iOwotCQlTdHJpbmcgc3RhcnR0aW1lID0gIlQwMDowMDowMCI7Ci0KLQkJaW50IGluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCcrJywgc3RyLmxlbmd0aCgpKTsKLQkJCi0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCctJyk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQlpbnQgekluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJCWlmICh6SW5kZXggPT0gLTEpIHsKLQkJCQlpZiAoaW5kZXggPiAzKSB7Ci0JCQkJCXpJbmRleCA9IGluZGV4OwotCQkJCX0KLQkJCX0KLQkJCQotCQkJU3RyaW5nW10gc3BsaXQgPSBzdHIuc3BsaXQoIi0iKTsKLQkJCXN0YXJ0ZGF0ZSArPSBzcGxpdFsyXS5yZXBsYWNlKCJaIiwgIiIpICsgIi0wMSI7Ci0JCQkKLQkJCWlmIChzdHIuaW5kZXhPZignVCcpICE9IC0xKSB7IAotCQkJCWlmIChzcGxpdC5sZW5ndGggPiAzKSB7Ci0JCQkJCVN0cmluZ1tdIHRpbWVzcGxpdCA9IHNwbGl0WzNdLnNwbGl0KCI6Iik7Ci0JCQkJCWlmICh0aW1lc3BsaXQubGVuZ3RoIDwgMykgewotCQkJCQkJc3RhcnR0aW1lID0gIlQiOwotCQkJCQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoc3RhcnR0aW1lKTsKLQkJCQkJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHRpbWVzcGxpdC5sZW5ndGg7IGNudCsrKSB7Ci0JCQkJCQkJYnVmLmFwcGVuZCh0aW1lc3BsaXRbY250XSArICI6Iik7Ci0JCQkJCQl9Ci0JCQkJCQlidWYuYXBwZW5kKCIwMCIpOwotCQkJCQkJc3RhcnR0aW1lID0gYnVmLnRvU3RyaW5nKCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzdGFydHRpbWUgKz0gdGltZXNwbGl0WzBdICsgIjoiICsgdGltZXNwbGl0WzFdICsgIjoiICsgdGltZXNwbGl0WzJdOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJc3RhcnRkYXRlID0gc3RhcnRkYXRlLnRyaW0oKTsKLQkJCXN0YXJ0ZGF0ZSArPSBzdGFydHRpbWU7Ci0KLQkJCWlmICh6SW5kZXggIT0gLTEpIHsKLQkJCQlzdGFydGRhdGUgKz0gc3RyLnN1YnN0cmluZyh6SW5kZXgpOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3RhcnRkYXRlICs9IHN0ciArIHN0YXJ0dGltZTsKLQkJfQotCi0JCVhTRGF0ZVRpbWUgZHQgPSBYU0RhdGVUaW1lLnBhcnNlRGF0ZVRpbWUoc3RhcnRkYXRlKTsKLQkJaWYgKGR0ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXR1cm4gbmV3IFhTR01vbnRoKGR0LmNhbGVuZGFyKCksIGR0LnR6KCkpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ01vbnRoIGluIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdNb250aCBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBtb250aAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8IAotCQkJYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCQlYU0dNb250aCB2YWwgPSBjYXN0R01vbnRoKGFhdCk7Ci0KLQkJaWYgKHZhbCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlycy5hZGQodmFsKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnTW9udGhEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyIikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnWWVhck1vbnRoIikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1RpbWUpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lIHx8IAotCQkJYWF0IGluc3RhbmNlb2YgWFNHTW9udGgpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgWFNHTW9udGggY2FzdEdNb250aChBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNHTW9udGgpIHsKLQkJCVhTR01vbnRoIGdtID0gKFhTR01vbnRoKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR01vbnRoKGdtLmNhbGVuZGFyKCksIGdtLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHTW9udGgoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR01vbnRoKGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpOwotCQl9Ci0JCQotCQlyZXR1cm4gcGFyc2VfZ01vbnRoKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgbW9udGgoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDE7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gdGltZXpvbmVkKCkgewotCQlyZXR1cm4gX3RpbWV6b25lZDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGgKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICItLSI7Ci0KLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChtb250aCgpLCAyKTsKLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCQotCQkJaW50IGhycyA9IHR6KCkuaG91cnMoKTsKLQkJCWludCBtaW4gPSB0eigpLm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gdHooKS5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkgIHJldCArPSAiWiI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkgIGlmICh0eigpLm5lZ2F0aXZlKCkpIHsKLQkJCQl0Wm9uZVN0ciArPSAiLSI7ICAKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQl0Wm9uZVN0ciArPSAiKyI7IAotCQkJICB9Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOyAgCi0JCQkgIHRab25lU3RyICs9ICI6IjsKLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1pbiwgMik7Ci0JCQkgIAotCQkJICByZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6Z01vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0dfTU9OVEg7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkCi0JICovCi0JcHVibGljIENhbGVuZGFyIGNhbGVuZGFyKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLQkgKiByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHTW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNHTW9udGggdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSBtb250aC4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0dNb250aCB2YWwgPSAoWFNHTW9udGgpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNHTW9udGguY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmVxdWFscyh0aGF0Y2FsKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9CQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aERheS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aERheS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjIzM2I5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNHTW9udGhEYXkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIEZpeCBwYXJzaW5nIG9mIGdNb250aERheSB0byB2YWxpZCBkYXRlCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODIyMjMgLSBmaXggdGltZXpvbmUgYWRqdXN0bWVudCBjcmVhdGlvbi4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkIGNhc3RpbmcgaXNzdWUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTW9udGhEYXkgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTR01vbnRoRGF5IGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfTU9OVEhfREFZID0gInhzOmdNb250aERheSI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQkKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG1vbnRoIGFuZCBkYXkKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSB0byBiZSBzdG9yZWQKLQkgKiBAcGFyYW0gdHoKLQkgKiAgICAgICAgICAgIFRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vbnRoIGFuZCBkYXkKLQkgKi8KLQlwdWJsaWMgWFNHTW9udGhEYXkoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHR6KSB7Ci0JCV9jYWxlbmRhciA9IGNhbDsKLQkJaWYgKHR6ICE9IG51bGwpIHsKLQkJCV90aW1lem9uZWQgPSB0cnVlOwotCQkJX3R6ID0gdHo7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IG1vbnRoIGFuZCBkYXkKLQkgKi8KLQlwdWJsaWMgWFNHTW9udGhEYXkoKSB7Ci0JCXRoaXMobmV3IEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiZ01vbnRoRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZ01vbnRoRGF5IjsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtb250aCBhbmQgZGF5IGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0JICogWFNHTW9udGhEYXkgcmVwcmVzZW50YXRpb24gb2YgaXQuCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSAoYW5kIG9wdGlvbmFsCi0JICogICAgICAgICAgICB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0dNb250aERheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNHTW9udGhEYXkgcGFyc2VfZ01vbnRoRGF5KFN0cmluZyBzdHIpIHsKLQotCQlTdHJpbmcgc3RhcnRkYXRlID0gIjE5NzItIjsKLQkJU3RyaW5nIHN0YXJ0dGltZSA9ICJUMDA6MDA6MDAiOwotCi0JCWludCBpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignKycsIHN0ci5sZW5ndGgoKSk7Ci0JCQkJCi0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCctJyk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQlpbnQgekluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJCWlmICh6SW5kZXggPT0gLTEpIHsKLQkJCQlpZiAoaW5kZXggPiA1KQotCQkJCQl6SW5kZXggPSBpbmRleDsKLQkJCX0KLQkJCWlmICh6SW5kZXggPT0gLTEpIHsKLQkJCQl6SW5kZXggPSBzdHIubGFzdEluZGV4T2YoJysnKTsKLQkJCX0KLQotCQkJCi0JCQlTdHJpbmdbXSBzcGxpdCA9IHN0ci5zcGxpdCgiLSIpOwotCQkJc3RhcnRkYXRlICs9IHNwbGl0WzJdLnJlcGxhY2UoIloiLCAiIikgKyAiLSIgKyBzcGxpdFszXS5yZXBsYWNlKCJaIiwgIiIpLnN1YnN0cmluZygwLCAyKTsKLQkJCQotCQkJaWYgKHNwbGl0Lmxlbmd0aCA+IDQpIHsKLQkJCQlTdHJpbmdbXSB0aW1lc3BsaXQgPSBzcGxpdFs0XS5zcGxpdCgiOiIpOwotCQkJCWlmICh0aW1lc3BsaXQubGVuZ3RoIDwgMykgewotCQkJCQlzdGFydHRpbWUgPSAiVCI7Ci0JCQkJCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHN0YXJ0dGltZSk7Ci0JCQkJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHRpbWVzcGxpdC5sZW5ndGg7IGNudCsrKSB7Ci0JCQkJCQlidWYuYXBwZW5kKHRpbWVzcGxpdFtjbnRdICsgIjoiKTsKLQkJCQkJfQotCQkJCQlidWYuYXBwZW5kKCIwMCIpOwotCQkJCQlzdGFydHRpbWUgPSBidWYudG9TdHJpbmcoKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzdGFydHRpbWUgKz0gdGltZXNwbGl0WzBdICsgIjoiICsgdGltZXNwbGl0WzFdICsgIjoiICsgdGltZXNwbGl0WzJdOwotCQkJCX0KLQkJCX0KLQotCQkJc3RhcnRkYXRlID0gc3RhcnRkYXRlLnRyaW0oKTsKLQkJCXN0YXJ0ZGF0ZSArPSBzdGFydHRpbWU7Ci0KLQkJCQotCQkJaWYgKHpJbmRleCAhPSAtMSkgewotCQkJCXN0YXJ0ZGF0ZSArPSBzdHIuc3Vic3RyaW5nKHpJbmRleCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdGFydGRhdGUgKz0gc3RhcnR0aW1lOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IFhTRGF0ZVRpbWUucGFyc2VEYXRlVGltZShzdGFydGRhdGUpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHTW9udGhEYXkoZHQuY2FsZW5kYXIoKSwgZHQudHooKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnTW9udGhEYXkgaW4KLQkgKiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ01vbnRoRGF5IGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIG1vbnRoIGFuZCBkYXkKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fCAKLQkJCWFhdCBpbnN0YW5jZW9mIFhTVGltZSB8fCBpc0dEYXRhVHlwZShhYXQpIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JCQotCQlYU0dNb250aERheSB2YWwgPSBjYXN0R01vbnRoRGF5KGFhdCk7Ci0KLQkJaWYgKHZhbCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlycy5hZGQodmFsKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnTW9udGgiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyIikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnWWVhck1vbnRoIikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1RpbWUpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lIHx8IAotCQkJYWF0IGluc3RhbmNlb2YgWFNHTW9udGhEYXkpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgWFNHTW9udGhEYXkgY2FzdEdNb250aERheShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNHTW9udGhEYXkpIHsKLQkJCVhTR01vbnRoRGF5IGdtZCA9IChYU0dNb250aERheSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0dNb250aERheShnbWQuY2FsZW5kYXIoKSwgZ21kLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHTW9udGhEYXkoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR01vbnRoRGF5KGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpOwotCQl9Ci0JCQotCQlyZXR1cm4gcGFyc2VfZ01vbnRoRGF5KGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgbW9udGgoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDE7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXIKLQkgKi8KLQlwdWJsaWMgaW50IGRheSgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIGFuZCBkYXkKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIGFuZCBkYXkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICItLSI7Ci0KLQkJQ2FsZW5kYXIgYWRqdXN0Rm9ydGltZXpvbmUgPSBjYWxlbmRhcigpOwotCQkKLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChtb250aCgpLCAyKTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpLCAyKTsKLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCQotCQkJaW50IGhycyA9IHR6KCkuaG91cnMoKTsKLQkJCWludCBtaW4gPSB0eigpLm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gdHooKS5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkgIHJldCArPSAiWiI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkgIGlmICh0eigpLm5lZ2F0aXZlKCkpIHsKLQkJCQl0Wm9uZVN0ciArPSAiLSI7ICAKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQl0Wm9uZVN0ciArPSAiKyI7IAotCQkJICB9Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOyAgCi0JCQkgIHRab25lU3RyICs9ICI6IjsKLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1pbiwgMik7Ci0JCQkgIAotCQkJICByZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6Z01vbnRoRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0dfTU9OVEhfREFZOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotCSAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dNb250aERheQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBYU0dNb250aERheSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG1vbnRoIGFuZCBkYXkuCi0JICogICAgICAgICBGYWxzZSBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNHTW9udGhEYXkgdmFsID0gKFhTR01vbnRoRGF5KSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTR01vbnRoRGF5LmNsYXNzKTsKLQotCQlyZXR1cm4gY2FsZW5kYXIoKS5lcXVhbHModmFsLmNhbGVuZGFyKCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKSB7Ci0JCXJldHVybiBfdHo7Ci0JfQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dZZWFyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4NmQyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIGZpeCBjYXN0aW5nIGlzc3Vlcy4gCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ01vbnRoIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0dZZWFyIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfWUVBUiA9ICJ4czpnWWVhciI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggdG8gYmUgc3RvcmVkCi0JICogQHBhcmFtIHR6Ci0JICogICAgICAgICAgICBUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb250aAotCSAqLwotCXB1YmxpYyBYU0dZZWFyKENhbGVuZGFyIGNhbCwgWFNEdXJhdGlvbiB0eikgewotCQlfY2FsZW5kYXIgPSBjYWw7Ci0JCWlmICh0eiAhPSBudWxsKSB7Ci0JCQlfdGltZXpvbmVkID0gdHJ1ZTsKLQkJCV90eiA9IHR6OwotCQl9Ci0JCQotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgeWVhcgotCSAqLwotCXB1YmxpYyBYU0dZZWFyKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImdZZWFyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZ1llYXIiOwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHllYXIgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHWWVhcgotCSAqIHJlcHJlc2VudGF0aW9uIG9mIGl0LgotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0dZZWFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0dZZWFyIHBhcnNlX2dZZWFyKFN0cmluZyBzdHIpIHsKLQotCi0JCVN0cmluZyB5ZWFyID0gIiI7Ci0JCVN0cmluZyBtb250aERheXRpbWUgPSAiLTAxLTAxVDAwOjAwOjAwLjAiOwotCQkKLQotCQlpbnQgaW5kZXggPSBzdHIuaW5kZXhPZignKycsIDEpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCctJywgMSk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJ1onLCAxKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQl5ZWFyID0gc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQl5ZWFyICs9IG1vbnRoRGF5dGltZTsKLQkJCXllYXIgKz0gc3RyLnN1YnN0cmluZyhpbmRleCwgc3RyLmxlbmd0aCgpKTsKLQkJfSBlbHNlIHsKLQkJCXllYXIgPSBzdHIgKyBtb250aERheXRpbWU7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKHllYXIpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHWWVhcihkdC5jYWxlbmRhcigpLCBkdC50eigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdZZWFyIGluIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdZZWFyIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXIKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0JCQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQkKLQkJWFNHWWVhciB2YWwgPSBjYXN0R1llYXIoYWF0KTsKLQotCQlpZiAodmFsID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCi0JCXJzLmFkZCh2YWwpOwotCi0JCXJldHVybiByczsKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnTW9udGhEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdNb250aCIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z1llYXJNb250aCIpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBhYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSB8fCAKLQkJCWFhdCBpbnN0YW5jZW9mIFhTR1llYXIpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgWFNHWWVhciBjYXN0R1llYXIoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTR1llYXIpIHsKLQkJCVhTR1llYXIgZ3kgPSAoWFNHWWVhcikgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0dZZWFyKGd5LmNhbGVuZGFyKCksIGd5LnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHWWVhcihkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHWWVhcihkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlX2dZZWFyKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgeWVhcigpIHsKLQkJaW50IHkgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOwotCQlpZiAoX2NhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKQotCQkJeSAqPSAtMTsKLQotCQlyZXR1cm4geTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCi0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoeWVhcigpLCA0KTsKLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCQotCQkJaW50IGhycyA9IHR6KCkuaG91cnMoKTsKLQkJCWludCBtaW4gPSB0eigpLm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gdHooKS5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkgIHJldCArPSAiWiI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkgIGlmICh0eigpLm5lZ2F0aXZlKCkpIHsKLQkJCQl0Wm9uZVN0ciArPSAiLSI7ICAKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQl0Wm9uZVN0ciArPSAiKyI7IAotCQkJICB9Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOyAgCi0JCQkgIHRab25lU3RyICs9ICI6IjsKLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1pbiwgMik7Ci0JCQkgIAotCQkJICByZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6Z1llYXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfR19ZRUFSOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotCSAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dZZWFyCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFhTR1llYXIgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSB5ZWFyLiBGYWxzZQotCSAqICAgICAgICAgb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTR1llYXIgdmFsID0gKFhTR1llYXIpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTR1llYXIuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmVxdWFscyh0aGF0Y2FsKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uIHR6KCkgewotCQlyZXR1cm4gX3R6OwotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXJNb250aC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dZZWFyTW9udGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYxMTQxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXJNb250aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgyMjIzIC0gZml4ZWQgY2FzdGluZyBpc3N1ZXMuIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFllYXJNb250aCBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNHWWVhck1vbnRoIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfWUVBUl9NT05USCA9ICJ4czpnWWVhck1vbnRoIjsKLQlwcml2YXRlIENhbGVuZGFyIF9jYWxlbmRhcjsKLQlwcml2YXRlIGJvb2xlYW4gX3RpbWV6b25lZDsKLQlwcml2YXRlIFhTRHVyYXRpb24gX3R6OwotCi0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB5ZWFyIGFuZCBtb250aAotCSAqIAotCSAqIEBwYXJhbSBjYWwKLQkgKiAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCB0byBiZSBzdG9yZWQKLQkgKiBAcGFyYW0gdHoKLQkgKiAgICAgICAgICAgIFRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHllYXIgYW5kIG1vbnRoCi0JICovCi0JcHVibGljIFhTR1llYXJNb250aChDYWxlbmRhciBjYWwsIFhTRHVyYXRpb24gdHopIHsKLQkJX2NhbGVuZGFyID0gY2FsOwotCQlpZiAodHogIT0gbnVsbCkgewotCQkJX3RpbWV6b25lZCA9IHRydWU7Ci0JCQlfdHogPSB0ejsKLQkJfQotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgeWVhciBhbmQgbW9udGgKLQkgKi8KLQlwdWJsaWMgWFNHWWVhck1vbnRoKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImdZZWFyTW9udGgiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJnWWVhck1vbnRoIjsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB5ZWFyIGFuZCBtb250aCBhbmQgY29uc3RydWN0cyBhIG5ldwotCSAqIFhTR1llYXJNb250aCByZXByZXNlbnRhdGlvbiBvZiBpdC4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCAoYW5kIG9wdGlvbmFsCi0JICogICAgICAgICAgICB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0dZZWFyTW9udGggcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTR1llYXJNb250aCBwYXJzZV9nWWVhck1vbnRoKFN0cmluZyBzdHIpIHsKLQotCQlTdHJpbmcgeWVhck1vbnRoID0gIiI7Ci0JCVN0cmluZyBkYXlUaW1lID0gIi0wMVQwMDowMDowMC4wIjsKLQotCQlpbnQgaW5kZXggPSBzdHIuaW5kZXhPZignKycsIDEpOwotCQlpZiAoaW5kZXggPT0gLTEpIHsKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJy0nLCAxKTsKLQkJCWlmIChpbmRleCA9PSAtMSkKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJy0nLCBpbmRleCArIDEpOwotCQl9Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJ1onLCAxKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQl5ZWFyTW9udGggPSBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCXllYXJNb250aCArPSBkYXlUaW1lOwotCQkJeWVhck1vbnRoICs9IHN0ci5zdWJzdHJpbmcoaW5kZXgsIHN0ci5sZW5ndGgoKSk7Ci0JCX0gZWxzZSB7Ci0JCQl5ZWFyTW9udGggPSBzdHIgKyBkYXlUaW1lOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IFhTRGF0ZVRpbWUucGFyc2VEYXRlVGltZSh5ZWFyTW9udGgpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHWWVhck1vbnRoKGR0LmNhbGVuZGFyKCksIGR0LnR6KCkpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ1llYXJNb250aCBpbgotCSAqIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnWWVhck1vbnRoIGlzIHRvIGJlCi0JICogICAgICAgICAgICBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB5ZWFyIGFuZCBtb250aAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU1RpbWUgfHwgaXNHRGF0YVR5cGUoYWF0KSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuIHx8IGFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQkKLQkJWFNHWWVhck1vbnRoIHZhbCA9IGNhc3RHWWVhck1vbnRoKGFhdCk7IAotCi0JCWlmICh2YWwgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcnMuYWRkKHZhbCk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0dEYXRhVHlwZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlTdHJpbmcgdHlwZSA9IGFhdC5zdHJpbmdfdHlwZSgpOwotCQlpZiAodHlwZS5lcXVhbHMoInhzOmdNb250aERheSIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z0RheSIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z01vbnRoIikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnWWVhciIpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTR1llYXJNb250aCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCQkKLQl9Ci0JCi0JcHJpdmF0ZSBYU0dZZWFyTW9udGggY2FzdEdZZWFyTW9udGgoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTR1llYXJNb250aCkgewotCQkJWFNHWWVhck1vbnRoIGd5bSA9IChYU0dZZWFyTW9udGgpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHWWVhck1vbnRoKGd5bS5jYWxlbmRhcigpLCBneW0udHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUpIHsKLQkJCVhTRGF0ZSBkYXRlID0gKFhTRGF0ZSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0dZZWFyTW9udGgoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR1llYXJNb250aChkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlX2dZZWFyTW9udGgoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyCi0JICovCi0JcHVibGljIGludCB5ZWFyKCkgewotCQlpbnQgeSA9IF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuWUVBUik7Ci0JCWlmIChfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkVSQSkgPT0gR3JlZ29yaWFuQ2FsZW5kYXIuQkMpCi0JCQl5ICo9IC0xOwotCi0JCXJldHVybiB5OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgbW9udGgoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDE7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gdGltZXpvbmVkKCkgewotCQlyZXR1cm4gX3RpbWV6b25lZDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyIGFuZCBtb250aAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgeWVhciBhbmQgbW9udGgKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCi0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoeWVhcigpLCA0KTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1vbnRoKCksIDIpOwotCi0JCWlmICh0aW1lem9uZWQoKSkgewotCQkJCi0JCQlpbnQgaHJzID0gdHooKS5ob3VycygpOwotCQkJaW50IG1pbiA9IHR6KCkubWludXRlcygpOwotCQkJZG91YmxlIHNlY3MgPSB0eigpLnNlY29uZHMoKTsKLQkJCWlmIChocnMgPT0gMCAmJiBtaW4gPT0gMCAmJiBzZWNzID09IDApIHsKLQkJCSAgcmV0ICs9ICJaIjsKLQkJCX0KLQkJCWVsc2UgewotCQkJICBTdHJpbmcgdFpvbmVTdHIgPSAiIjsKLQkJCSAgaWYgKHR6KCkubmVnYXRpdmUoKSkgewotCQkJCXRab25lU3RyICs9ICItIjsgIAotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCXRab25lU3RyICs9ICIrIjsgCi0JCQkgIH0KLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KGhycywgMik7ICAKLQkJCSAgdFpvbmVTdHIgKz0gIjoiOwotCQkJICB0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQobWluLCAyKTsKLQkJCSAgCi0JCQkgIHJldCArPSB0Wm9uZVN0cjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpnWWVhck1vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0dfWUVBUl9NT05USDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotCSAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dZZWFyTW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNHWWVhck1vbnRoIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgeWVhciBhbmQgbW9udGguCi0JICogICAgICAgICBGYWxzZSBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNHWWVhck1vbnRoIHZhbCA9IChYU0dZZWFyTW9udGgpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNHWWVhck1vbnRoLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9CQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0hleEJpbmFyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0hleEJpbmFyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWIwZTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNIZXhCaW5hcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MTA1NCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjI4MjIzIC0gZml4ZWQgY2FzdGluZyBpc3N1ZS4gIE5lZWRlZCB0byBlbmNvZGUgdGhlIHZhbHVlLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYudXRpbC5CYXNlNjQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5kdi51dGlsLkhleEJpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wRXE7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgeHM6aGV4QmluYXJ5IGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0hleEJpbmFyeSBleHRlbmRzIEN0clR5cGUgaW1wbGVtZW50cyBDbXBFcSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfSEVYX0JJTkFSWSA9ICJ4czpoZXhCaW5hcnkiOwotCXByaXZhdGUgU3RyaW5nIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvCi0JICovCi0JcHVibGljIFhTSGV4QmluYXJ5KFN0cmluZyB4KSB7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU0hleEJpbmFyeSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmhleEJpbmFyeSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19IRVhfQklOQVJZOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiaGV4QmluYXJ5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiaGV4QmluYXJ5IjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpCi0JICogCi0JICogQHJldHVybiBUaGUgaGV4QmluYXJ5IHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlLnRvVXBwZXJDYXNlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBoZXhCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotCSAqIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCkKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBoZXhCaW5hcnkgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGhleEJpbmFyeSB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBoZXhCaW5hcnkgdmFsdWUgCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIGhleEJpbmFyeSB2YWx1ZSAKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8IGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJU3RyaW5nIHN0cl92YWx1ZSA9IGFhdC5zdHJpbmdfdmFsdWUoKTsKLQkJCi0JCWlmICghKGFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8Ci0JCQkJICBhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fAotCQkJCSAgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljIHx8Ci0JCQkJICBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSkpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyB8fCBhYXQgaW5zdGFuY2VvZiBYU1N0cmluZykgewotCQkJU3RyaW5nW10gbm9uSGV4VmFsdWVzID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJbm9uSGV4VmFsdWVzID0gc3RyX3ZhbHVlLnNwbGl0KCJbMC05YS1mQS1GXSIpOwotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCX0KLQkJCQotCQkJU3RyaW5nW10gYmluVmFsdWVzID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJYmluVmFsdWVzID0gc3RyX3ZhbHVlLnNwbGl0KCJbMC0xXSIpOwotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCX0KLQkJCQotCQkJaWYgKG5vbkhleFZhbHVlcy5sZW5ndGggPiAwIHx8IGJpblZhbHVlcy5sZW5ndGggPT0gMCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkRm9yQ2FzdENvbnN0cnVjdG9yKCk7Ci0JCQl9CQkJCi0JCX0KLQotCQkKLQkJYnl0ZVtdIGRlY29kZWRWYWx1ZSA9IG51bGw7Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkpIHsKLQkJCWRlY29kZWRWYWx1ZSA9IEJhc2U2NC5kZWNvZGUoc3RyX3ZhbHVlKTsKLQkJCWRlY29kZWRWYWx1ZSA9IEhleEJpbi5lbmNvZGUoZGVjb2RlZFZhbHVlKS5nZXRCeXRlcygpOwotCQl9IGVsc2UgewotCQkJZGVjb2RlZFZhbHVlID0gc3RyX3ZhbHVlLmdldEJ5dGVzKCk7Ci0gCQl9Ci0JCQotCQlpZiAoZGVjb2RlZFZhbHVlICE9IG51bGwpIHsKLQkJICBycy5hZGQobmV3IFhTSGV4QmluYXJ5KG5ldyBTdHJpbmcoZGVjb2RlZFZhbHVlKSkpOwotCQl9Ci0JCWVsc2UgewotCQkgIC8vIGludmFsaWQgaGV4QmluYXJ5IHN0cmluZwotCQkgIHRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7CQotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCi0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0JICogbXVzdCBiZSBvZiB0eXBlIGhleEJpbmFyeQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbiBhcmUgc2FtZS4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqICAgICAgICAgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0gICAgICBTdHJpbmcgdmFsVG9Db21wYXJlID0gYXJnLnN0cmluZ192YWx1ZSgpOwotICAgICAgCi0gICAgICBieXRlW10gdmFsdWUxID0gSGV4QmluLmRlY29kZShfdmFsdWUpOwotICAgICAgYnl0ZVtdIHZhbHVlMiA9IEhleEJpbi5kZWNvZGUodmFsVG9Db21wYXJlKTsKLSAgICAgIGlmICh2YWx1ZTIgPT0gbnVsbCkgewotICAgIAlyZXR1cm4gZmFsc2U7ICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgaW50IGxlbiA9IHZhbHVlMS5sZW5ndGg7Ci0gICAgICBpZiAobGVuICE9IHZhbHVlMi5sZW5ndGgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmICh2YWx1ZTFbaV0gIT0gdmFsdWUyW2ldKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiB0cnVlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0lELmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSUQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJlNmZmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSUQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIGJ1ZyAyMjgyMjMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKgotICogSW1wbGVtZW50cyB0aGUgeHM6SUQgZGF0YSB0eXBlLgotICogCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0lEIGV4dGVuZHMgWFNOQ05hbWUgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0lEID0gInhzOklEIjsKLQotCXB1YmxpYyBYU0lEKFN0cmluZyB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQotCXB1YmxpYyBYU0lEKCkgewotCQlzdXBlcigpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19JRDsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiSUQiOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQotCQlycy5hZGQobmV3IFhTSUQoYWF0LnN0cmluZ192YWx1ZSgpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0lEUkVGLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSURSRUYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3YmYzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSURSRUYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIGJ1ZyAyMjgyMjMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKgotICogSW1wbGVtZW50cyB0aGUgeHM6SURSRUYgZGF0YSB0eXBlLgotICogCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0lEUkVGIGV4dGVuZHMgWFNOQ05hbWUgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0lEUkVGID0gInhzOklEUkVGIjsKLQotCXB1YmxpYyBYU0lEUkVGKFN0cmluZyB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQotCXB1YmxpYyBYU0lEUkVGKCkgewotCQlzdXBlcigpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19JRFJFRjsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiSURSRUYiOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQotCQlycy5hZGQobmV3IFhTSURSRUYoYWF0LnN0cmluZ192YWx1ZSgpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0ludC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0ludC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzFmZTAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMNCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc1MTA1IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6aW50IGRhdGEgdHlwZQ0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOw0KLQ0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ow0KLQ0KLXB1YmxpYyBjbGFzcyBYU0ludCBleHRlbmRzIFhTTG9uZyB7DQotCQ0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfSU5UID0gInhzOmludCI7DQotDQotCS8qKg0KLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDANCi0JICovDQotCXB1YmxpYyBYU0ludCgpIHsNCi0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7DQotCX0NCi0JDQotCS8qKg0KLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBpbnQgdmFsdWUNCi0JICogDQotCSAqIEBwYXJhbSB4DQotCSAqICAgICAgICAgICAgSW50IHRvIGJlIHN0b3JlZA0KLQkgKi8NCi0JcHVibGljIFhTSW50KEJpZ0ludGVnZXIgeCkgew0KLQkJc3VwZXIoeCk7DQotCX0NCi0JDQotCS8qKg0KLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQ0KLQkgKiANCi0JICogQHJldHVybiAieHM6aW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lDQotCSAqLw0KLQlAT3ZlcnJpZGUNCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsNCi0JCXJldHVybiBYU19JTlQ7DQotCX0NCi0JDQotCS8qKg0KLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQ0KLQkgKiANCi0JICogQHJldHVybiAiaW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lDQotCSAqLw0KLQlAT3ZlcnJpZGUNCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7DQotCQlyZXR1cm4gImludCI7DQotCX0NCi0JDQotCS8qKg0KLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdpbnQnIGluIHRoZQ0KLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQ0KLQkgKiANCi0JICogQHBhcmFtIGFyZw0KLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBpbnQgaXMgdG8gYmUgZXh0cmFjdGVkDQotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdpbnQnIHN1cHBsaWVkDQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yDQotCSAqLw0KLQlAT3ZlcnJpZGUNCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7DQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7DQotDQotCQlpZiAoYXJnLmVtcHR5KCkpDQotCQkJcmV0dXJuIHJzOw0KLQ0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQNCi0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGFuIGludC4NCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7DQotDQotCQl0cnkgew0KLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LnN0cmluZ192YWx1ZSgpKTsNCi0JCQkNCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcNCi0JCQlCaWdJbnRlZ2VyIG1pbiA9IEJpZ0ludGVnZXIudmFsdWVPZigtMjE0NzQ4MzY0OEwpOw0KLQkJCUJpZ0ludGVnZXIgbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKDIxNDc0ODM2NDdMKTsJCQkNCi0NCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7DQotCQkJICAgLy8gaW52YWxpZCBpbnB1dA0KLQkJCSAgIER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7CQ0KLQkJCX0NCi0JCQkNCi0JCQlycy5hZGQobmV3IFhTSW50KGJpZ0ludCkpOw0KLQkJCQ0KLQkJCXJldHVybiByczsNCi0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7DQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsNCi0JCX0NCi0NCi0JfQ0KLQkNCi19DQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0ludGVnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJbnRlZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlOTA2YzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0ludGVnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlLiBVc2luZyBKYXZhCi0gKiAgICAgICAgICAgICAgICAgICAgICBCaWdJbnRlZ2VyIGNsYXNzIHRvIGVuaGFuY2UgbnVtZXJpY2FsIHJhbmdlIHRvIC1JTkYgLT4gK0lORi4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeCBjb21wYXJpc2lvbiB0byB6ZXJvLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgyMjIzIC0gZml4IGNhc3RpbmcgaXNzdWVzLgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjYyNzY1IC0gZml4IHR5cGUgdGVzdHMKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTAyOCAtIEFkZGVkIGNvbnN0cnVjdG9yIGZyb20gc3RyaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLm1hdGguUm91bmRpbmdNb2RlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIEludGVnZXIgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTSW50ZWdlciBleHRlbmRzIFhTRGVjaW1hbCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfSU5URUdFUiA9ICJ4czppbnRlZ2VyIjsKLQlwcml2YXRlIEJpZ0ludGVnZXIgX3ZhbHVlOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTSW50ZWdlcigpIHsKLQkJdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGludGVnZXIKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgSW50ZWdlciB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNJbnRlZ2VyKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcihuZXcgQmlnRGVjaW1hbCh4KSk7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgaW50ZWdlcgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBJbnRlZ2VyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0ludGVnZXIoU3RyaW5nIHgpIHsKLQkJc3VwZXIobmV3IEJpZ0RlY2ltYWwoeCkpOwotCQlfdmFsdWUgPSBuZXcgQmlnSW50ZWdlcih4KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfSU5URUdFUjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJpbnRlZ2VyIjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWUudG9TdHJpbmcoKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayB3aGV0aGVyIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGlzIDAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaXMgdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgaXMgMC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gemVybygpIHsKLQkJcmV0dXJuIChfdmFsdWUuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTykgPT0gMCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBpbnRlZ2VyIGluIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgaW50ZWdlciBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYW4gaW50ZWdlci4KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fCBhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQkJCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQkJCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IGNhc3RJbnRlZ2VyKGFhdCk7Ci0JCQlycy5hZGQobmV3IFhTSW50ZWdlcihiaWdJbnQpKTsKLQkJCXJldHVybiByczsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkTGV4aWNhbFZhbHVlKCk7Ci0JCX0KLQotCX0KLQkKLQlwcml2YXRlIEJpZ0ludGVnZXIgY2FzdEludGVnZXIoQW55VHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbikgewotCQkJaWYgKGFhdC5zdHJpbmdfdmFsdWUoKS5lcXVhbHMoInRydWUiKSkgewotCQkJCXJldHVybiBCaWdJbnRlZ2VyLk9ORTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIEJpZ0ludGVnZXIuWkVSTzsKLQkJCX0KLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGVjaW1hbCB8fCBhYXQgaW5zdGFuY2VvZiBYU0Zsb2F0IHx8Ci0JCQkJYWF0IGluc3RhbmNlb2YgWFNEb3VibGUpIHsKLQkJCQlCaWdEZWNpbWFsIGJpZ0RlYyA9ICBuZXcgQmlnRGVjaW1hbChhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCXJldHVybiBiaWdEZWMudG9CaWdJbnRlZ2VyKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXcgQmlnSW50ZWdlcihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlUeXBlIGFhdCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBhYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQlpZiAoaXNMZXhpY2FsVmFsdWUoYWF0LnN0cmluZ192YWx1ZSgpKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0xleGljYWxWYWx1ZShTdHJpbmcgdmFsdWUpIHsKLQkJCi0JCXRyeSB7Ci0JCQluZXcgQmlnSW50ZWdlcih2YWx1ZSk7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gVGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBCaWdJbnRlZ2VyIGludF92YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBpbnRlZ2VyIHN0b3JlZCB0byB0aGF0IHN1cHBsaWVkCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIEludGVnZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2ludChCaWdJbnRlZ2VyIHgpIHsKLQkJX3ZhbHVlID0geDsKLQkJc2V0X2RvdWJsZSh4LmludFZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIGFkZGl0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJQW55VHlwZSBhdCA9IGdldF9zaW5nbGVfYXJnKGNhcmcpOwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIFhTSW50ZWdlcikpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkKLQkJWFNJbnRlZ2VyIHZhbCA9IChYU0ludGVnZXIpYXQ7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyAKLQkJCQkgICAgICAgICAgICAgICAgICAgWFNJbnRlZ2VyKGludF92YWx1ZSgpLmFkZCh2YWwuaW50X3ZhbHVlKCkpKSk7Ci0JCQotCX0KLQotCQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgY29udmVydFJlc3VsdFNlcXVlbmNlKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gYXJnOwotCQlJdGVyYXRvciBpdCA9IGNhcmcuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQW55VHlwZSB0eXBlID0gKEFueVR5cGUpIGl0Lm5leHQoKTsKLQkJCWlmICh0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikgfHwKLQkJCQl0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czpzdHJpbmciKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQkJfQotCQl9Ci0JCWNhcmcgPSBjb25zdHJ1Y3RvcihjYXJnKTsKLQkJcmV0dXJuIGNhcmc7Ci0JfQkKLQkKLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIHN1YnRyYWN0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtaW51cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCVhTSW50ZWdlciB2YWwgPSAoWFNJbnRlZ2VyKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNJbnRlZ2VyLmNsYXNzKTsKLQkJCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgCi0JCQkJICAgICAgICAgICAgICAgICBYU0ludGVnZXIoaW50X3ZhbHVlKCkuc3VidHJhY3QodmFsLmludF92YWx1ZSgpKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgbXVsdGlwbGljYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHRpbWVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0ludGVnZXIgdmFsID0gKFhTSW50ZWdlcikgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTSW50ZWdlci5jbGFzcyk7Ci0JCQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IAotCQkJCSAgICAgICAgICAgICAgICAgWFNJbnRlZ2VyKGludF92YWx1ZSgpLm11bHRpcGx5KHZhbC5pbnRfdmFsdWUoKSkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1vZChSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNJbnRlZ2VyIHZhbCA9IChYU0ludGVnZXIpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0ludGVnZXIuY2xhc3MpOwotCQlCaWdJbnRlZ2VyIHJlc3VsdCA9IGludF92YWx1ZSgpLnJlbWFpbmRlcih2YWwuaW50X3ZhbHVlKCkpOyAKLQkJCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNJbnRlZ2VyKHJlc3VsdCkpOwotCX0KLQotCS8qKgotCSAqIE5lZ2F0ZXMgdGhlIGludGVnZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgWFNJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHVuYXJ5X21pbnVzKCkgewotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ci0JCQkJLmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihpbnRfdmFsdWUoKS5tdWx0aXBseShCaWdJbnRlZ2VyLnZhbHVlT2YoLTEpKSkpOwotCX0KLQotCS8qKgotCSAqIEFic29sdXRlcyB0aGUgaW50ZWdlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBYU0ludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSBvZiB0aGUgaW50ZWdlciBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgYWJzKCkgewotCQlyZXR1cm4gbmV3IFhTSW50ZWdlcihpbnRfdmFsdWUoKS5hYnMoKSk7Ci0JfQotCQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbCNndChvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUFueVR5cGUgY2FyZyA9IGNvbnZlcnRBcmcoYXJnKTsKLSAgICAgICAgWFNJbnRlZ2VyIHZhbCA9IChYU0ludGVnZXIpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0ludGVnZXIuY2xhc3MpOwotICAgICAgICAKLSAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQgPSBpbnRfdmFsdWUoKS5jb21wYXJlVG8odmFsLmludF92YWx1ZSgpKTsKLQkJCi0JCXJldHVybiBjb21wYXJlUmVzdWx0ID4gMDsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIEFueVR5cGUgY29udmVydEFyZyhBbnlUeXBlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYXJnKTsKLQkJcnMgPSBjb25zdHJ1Y3Rvcihycyk7Ci0JCUFueVR5cGUgY2FyZyA9IHJzLmZpcnN0KCk7Ci0JCXJldHVybiBjYXJnOwotCX0KLQkKLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWwjbHQob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlBbnlUeXBlIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0gICAgICAgIFhTSW50ZWdlciB2YWwgPSAoWFNJbnRlZ2VyKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNJbnRlZ2VyLmNsYXNzKTsKLSAgICAgICAgCi0gICAgICAgIGludCBjb21wYXJlUmVzdWx0ID0gaW50X3ZhbHVlKCkuY29tcGFyZVRvKHZhbC5pbnRfdmFsdWUoKSk7Ci0JCQotCQlyZXR1cm4gY29tcGFyZVJlc3VsdCA8IDA7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBkaXYoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQkKLQkJWFNEZWNpbWFsIHZhbCA9IChYU0RlY2ltYWwpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RlY2ltYWwuY2xhc3MpOwotCi0JCWlmICh2YWwuemVybygpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuZGl2X3plcm8obnVsbCk7Ci0JCX0KLQkJCi0JCUJpZ0RlY2ltYWwgcmVzdWx0ID0gZ2V0VmFsdWUoKS5kaXZpZGUodmFsLmdldFZhbHVlKCksIDE4LCBSb3VuZGluZ01vZGUuSEFMRl9FVkVOKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RlY2ltYWwocmVzdWx0KSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTG9uZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0xvbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUwNDU1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTG9uZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycw0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ5NTIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOmxvbmcgZGF0YSANCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7DQotDQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7DQotDQotcHVibGljIGNsYXNzIFhTTG9uZyBleHRlbmRzIFhTSW50ZWdlciB7DQotCQ0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTE9ORyA9ICJ4czpsb25nIjsNCi0NCi0JLyoqDQotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMA0KLQkgKi8NCi0JcHVibGljIFhTTG9uZygpIHsNCi0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7DQotCX0NCi0JDQotCS8qKg0KLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBsb25nIHZhbHVlDQotCSAqIA0KLQkgKiBAcGFyYW0geA0KLQkgKiAgICAgICAgICAgIExvbmcgdG8gYmUgc3RvcmVkDQotCSAqLw0KLQlwdWJsaWMgWFNMb25nKEJpZ0ludGVnZXIgeCkgew0KLQkJc3VwZXIoeCk7DQotCX0NCi0JDQotCS8qKg0KLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQ0KLQkgKiANCi0JICogQHJldHVybiAieHM6bG9uZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQ0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7DQotCQlyZXR1cm4gWFNfTE9ORzsNCi0JfQ0KLQkNCi0JLyoqDQotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lDQotCSAqIA0KLQkgKiBAcmV0dXJuICJsb25nIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lDQotCSAqLw0KLQlAT3ZlcnJpZGUNCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7DQotCQlyZXR1cm4gImxvbmciOw0KLQl9DQotCQ0KLQkvKioNCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBsb25nIGluIHRoZQ0KLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQ0KLQkgKiANCi0JICogQHBhcmFtIGFyZw0KLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBsb25nIGlzIHRvIGJlIGV4dHJhY3RlZA0KLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbG9uZycgc3VwcGxpZWQNCi0JICogQHRocm93cyBEeW5hbWljRXJyb3INCi0JICovDQotCUBPdmVycmlkZQ0KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsNCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsNCi0NCi0JCWlmIChhcmcuZW1wdHkoKSkNCi0JCQlyZXR1cm4gcnM7DQotDQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudA0KLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSBsb25nLg0KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsNCi0NCi0JCXRyeSB7DQotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuc3RyaW5nX3ZhbHVlKCkpOw0KLQkJCQ0KLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZw0KLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKC05MjIzMzcyMDM2ODU0Nzc1ODA4TCk7DQotCQkJQmlnSW50ZWdlciBtYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoOTIyMzM3MjAzNjg1NDc3NTgwN0wpOwkJCQ0KLQ0KLQkJCWlmIChiaWdJbnQuY29tcGFyZVRvKG1pbikgPCAwIHx8IGJpZ0ludC5jb21wYXJlVG8obWF4KSA+IDApIHsNCi0JCQkgICAvLyBpbnZhbGlkIGlucHV0DQotCQkJICAgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsJDQotCQkJfQ0KLQkJCQ0KLQkJCXJzLmFkZChuZXcgWFNMb25nKGJpZ0ludCkpOw0KLQkJCQ0KLQkJCXJldHVybiByczsNCi0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7DQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsNCi0JCX0NCi0NCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTkNOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTkNOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NGE1YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05DTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBOQ05hbWUgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTTkNOYW1lIGV4dGVuZHMgWFNTdHJpbmcgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19OQ19OQU1FID0gInhzOk5DTmFtZSI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFN0cmluZyB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNOQ05hbWUoU3RyaW5nIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU05DTmFtZSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOk5DTmFtZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19OQ19OQU1FOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiTkNOYW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiTkNOYW1lIjsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIE5DTmFtZSB3aXRoaW4KLQkgKiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBOQ05hbWUKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBOQ05hbWUgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCi0JCXJzLmFkZChuZXcgWFNOQ05hbWUoYWF0LnN0cmluZ192YWx1ZSgpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOZWdhdGl2ZUludGVnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOZWdhdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ4ODc0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTmVnYXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MDIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOm5lZ2F0aXZlSW50ZWdlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU05lZ2F0aXZlSW50ZWdlciBleHRlbmRzIFhTTm9uUG9zaXRpdmVJbnRlZ2VyIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTkVHQVRJVkVfSU5URUdFUiA9ICJ4czpuZWdhdGl2ZUludGVnZXIiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAtMQotCSAqLwotCXB1YmxpYyBYU05lZ2F0aXZlSW50ZWdlcigpIHsKLQkgIHRoaXMoQmlnSW50ZWdlci52YWx1ZU9mKC0xKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG5lZ2F0aXZlSW50ZWdlciB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBuZWdhdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTTmVnYXRpdmVJbnRlZ2VyKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpuZWdhdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfTkVHQVRJVkVfSU5URUdFUjsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJuZWdhdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJuZWdhdGl2ZUludGVnZXIiOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIG5lZ2F0aXZlSW50ZWdlcgotCSAqIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBuZWdhdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ25lZ2F0aXZlSW50ZWdlcicgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgbm9uUG9zaXRpdmVJbnRlZ2VyLgotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkKLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZwotCQkJLy8gbWluIHZhbHVlIGlzLCAtSU5GCi0JCQkvLyBtYXggdmFsdWUgaXMgLTEKLQkJCUJpZ0ludGVnZXIgbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKC0xTCk7CQkJCi0KLQkJCWlmIChiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwkKLQkJCX0KLQkJCQotCQkJcnMuYWRkKG5ldyBYU05lZ2F0aXZlSW50ZWdlcihiaWdJbnQpKTsKLQkJCQotCQkJcmV0dXJuIHJzOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9uTmVnYXRpdmVJbnRlZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9uTmVnYXRpdmVJbnRlZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Y2UwZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vbk5lZ2F0aXZlSW50ZWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjA5IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uLCBvZiB4czpub25OZWdhdGl2ZUludGVnZXIKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB0eXBlLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgYWJzIHZhbHVlIHRlc3RzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgWFNOb25OZWdhdGl2ZUludGVnZXIgZXh0ZW5kcyBYU0ludGVnZXIgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19OT05fTkVHQVRJVkVfSU5URUdFUiA9ICJ4czpub25OZWdhdGl2ZUludGVnZXIiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTTm9uTmVnYXRpdmVJbnRlZ2VyKCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBub25OZWdhdGl2ZUludGVnZXIgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgbm9uTmVnYXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU05vbk5lZ2F0aXZlSW50ZWdlcihCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX05PTl9ORUdBVElWRV9JTlRFR0VSOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gIm5vbk5lZ2F0aXZlSW50ZWdlciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIm5vbk5lZ2F0aXZlSW50ZWdlciI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbm9uTmVnYXRpdmVJbnRlZ2VyCi0JICogaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5vbk5lZ2F0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbm9uTmVnYXRpdmVJbnRlZ2VyJyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSBub25OZWdhdGl2ZUludGVnZXIuCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQkvLyBtaW4gdmFsdWUgaXMsIDAKLQkJCS8vIG1heCB2YWx1ZSBpcyBJTkYKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKDBMKTsJCQkKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDApIHsKLQkJCSAgIC8vIGludmFsaWQgaW5wdXQKLQkJCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7CQotCQkJfQotCQkJCi0JCQlycy5hZGQobmV3IFhTTm9uTmVnYXRpdmVJbnRlZ2VyKGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb25Qb3NpdGl2ZUludGVnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb25Qb3NpdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk0MTJkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9uUG9zaXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc1OTkgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOm5vblBvc2l0aXZlSW50ZWdlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU05vblBvc2l0aXZlSW50ZWdlciBleHRlbmRzIFhTSW50ZWdlciB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX05PTl9QT1NJVElWRV9JTlRFR0VSID0gInhzOm5vblBvc2l0aXZlSW50ZWdlciI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAKLQkgKi8KLQlwdWJsaWMgWFNOb25Qb3NpdGl2ZUludGVnZXIoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG5vblBvc2l0aXZlSW50ZWdlciB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBub25Qb3NpdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTTm9uUG9zaXRpdmVJbnRlZ2VyKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpub25Qb3NpdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfTk9OX1BPU0lUSVZFX0lOVEVHRVI7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAibm9uUG9zaXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAibm9uUG9zaXRpdmVJbnRlZ2VyIjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBub25Qb3NpdGl2ZUludGVnZXIKLQkgKiBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbm9uUG9zaXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdub25Qb3NpdGl2ZUludGVnZXInIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIG5vblBvc2l0aXZlSW50ZWdlci4KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCS8vIG1pbiB2YWx1ZSBpcywgLUlORgotCQkJLy8gbWF4IHZhbHVlIGlzIDAKLQkJCUJpZ0ludGVnZXIgbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKDBMKTsJCQkKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWF4KSA+IDApIHsKLQkJCSAgIC8vIGludmFsaWQgaW5wdXQKLQkJCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7CQotCQkJfQotCQkJCi0JCQlycy5hZGQobmV3IFhTTm9uUG9zaXRpdmVJbnRlZ2VyKGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb3RhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vdGF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYTRhMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vdGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSBidWcgMjgyMjIzIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBYU05vdGF0aW9uIGV4dGVuZHMgQ3RyVHlwZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTk9UQVRJT04gPSAieHM6Tk9UQVRJT04iOwotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX05PVEFUSU9OOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcigiWFBTVDAwODAiLCAiQ2FuJ3QgQ2FzdCB0byBOT1RBVElPTiIpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIk5PVEFUSU9OIjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNQb3NpdGl2ZUludGVnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNQb3NpdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ2NWZhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTUG9zaXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MzIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOnBvc2l0aXZlSW50ZWdlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU1Bvc2l0aXZlSW50ZWdlciBleHRlbmRzIFhTTm9uTmVnYXRpdmVJbnRlZ2VyIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfUE9TSVRJVkVfSU5URUdFUiA9ICJ4czpwb3NpdGl2ZUludGVnZXIiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAxCi0JICovCi0JcHVibGljIFhTUG9zaXRpdmVJbnRlZ2VyKCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMSkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBwb3NpdGl2ZUludGVnZXIgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgcG9zaXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU1Bvc2l0aXZlSW50ZWdlcihCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6cG9zaXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1BPU0lUSVZFX0lOVEVHRVI7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAicG9zaXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAicG9zaXRpdmVJbnRlZ2VyIjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBwb3NpdGl2ZUludGVnZXIKLQkgKiBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgcG9zaXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdwb3NpdGl2ZUludGVnZXInIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIHBvc2l0aXZlSW50ZWdlci4KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCS8vIG1pbiB2YWx1ZSBpcyAxCi0JCQkvLyBtYXggdmFsdWUgaXMgSU5GCi0JCQlCaWdJbnRlZ2VyIG1pbiA9IEJpZ0ludGVnZXIudmFsdWVPZigxKTsKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDApIHsKLQkJCSAgIC8vIGludmFsaWQgaW5wdXQKLQkJCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7CQotCQkJfQotCQkJCi0JCQlycy5hZGQobmV3IFhTUG9zaXRpdmVJbnRlZ2VyKGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNTaG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Nob3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ODdjZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Nob3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MDggLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpzaG9ydCBkYXRhIHR5cGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIFhTU2hvcnQgZXh0ZW5kcyBYU0ludCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1NIT1JUID0gInhzOnNob3J0IjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU1Nob3J0KCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBzaG9ydCB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBTaG9ydCB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNTaG9ydChCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6c2hvcnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfU0hPUlQ7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAic2hvcnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJzaG9ydCI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgJ3Nob3J0JyBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBzaG9ydCBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnc2hvcnQnIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIHNob3J0LgotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkKLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZwotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoLTMyNzY4TCk7Ci0JCQlCaWdJbnRlZ2VyIG1heCA9IEJpZ0ludGVnZXIudmFsdWVPZigzMjc2N0wpOwkJCQotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwkKLQkJCX0KLQkJCQotCQkJcnMuYWRkKG5ldyBYU1Nob3J0KGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNTdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNTdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlYTFkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW1wcm92ZWQgY29tcGFyaXNvbiBvZiB4czpzdHJpbmcgd2l0aCBvdGhlciBYRE0gdHlwZXMKLSAqICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg2MDYxICAgY29ycmVjdCBoYW5kbGluZyBvZiBxdW90ZWQgc3RyaW5nIAotICogIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wR3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5GbkNvbXBhcmU7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3RyaW5nIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU1N0cmluZyBleHRlbmRzIEN0clR5cGUgaW1wbGVtZW50cyBDbXBFcSwgQ21wR3QsIENtcEx0IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19TVFJJTkcgPSAieHM6c3RyaW5nIjsKLQlwcml2YXRlIFN0cmluZyBfdmFsdWU7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgdG8gaW5pdGlhbGlzZSB0bwotCSAqLwotCXB1YmxpYyBYU1N0cmluZyhTdHJpbmcgeCkgewotCQlfdmFsdWUgPSB4OwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIG51bGwKLQkgKi8KLQlwdWJsaWMgWFNTdHJpbmcoKSB7Ci0JCXRoaXMobnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpzdHJpbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfU1RSSU5HOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAic3RyaW5nIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAic3RyaW5nIjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmluZyBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpCi0JICogCi0JICogQHJldHVybiBUaGUgU3RyaW5nIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RyaW5nIHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLQkgKiBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZ192YWx1ZSgpCi0JICogCi0JICogQHJldHVybiBUaGUgU3RyaW5nIHN0b3JlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdmFsdWUoKSB7Ci0JCXJldHVybiBzdHJpbmdfdmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFN0cmluZyBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIFN0cmluZwotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy9BbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlycy5hZGQobmV3IFhTU3RyaW5nKGFhdC5zdHJpbmdfdmFsdWUoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvLyBjb21wYXJpc29ucwotCi0JLy8gNjY2IGluZGljYXRlcyBkZWF0aCBbY29tcGFyZSByZXR1cm5lZCBlbXB0eSBzZXFdCi0JcHJpdmF0ZSBpbnQgZG9fY29tcGFyZShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIFhYWDogVGhpcyBjYW4ndCBoYXBwZW4sIEkgZ3Vlc3MKLQkJaWYgKGFyZyA9PSBudWxsKSByZXR1cm4gNjY2OwotCi0JCVhTU3RyaW5nIGNvbXBhcmFuZCA9IGFyZyBpbnN0YW5jZW9mIFhTU3RyaW5nID8gKFhTU3RyaW5nKWFyZyA6IG5ldyBYU1N0cmluZyhhcmcuc3RyaW5nX3ZhbHVlKCkpOwotCQkKLQkJQmlnSW50ZWdlciByZXN1bHQgPSBGbkNvbXBhcmUuY29tcGFyZV9zdHJpbmcoZGMuZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpLCB0aGlzLCBjb21wYXJhbmQsIGRjKTsKLQotCQlyZXR1cm4gcmVzdWx0LmludFZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotCSAqIG11c3QgYmUgb2YgdHlwZSBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpbnQgY21wID0gZG9fY29tcGFyZShhcmcsIGNvbnRleHQpOwotCi0JCS8vIFhYWCBpbSBub3Qgc3VyZSB3aGF0IHRvIGRvIGhlcmUhISEgYmVjYXVzZSBlcSBoYXMgdG8gcmV0dXJuCi0JCS8vIHNvbWV0aGluZyBpIGZpbmsuLi4uCi0JCWlmIChjbXAgPT0gNjY2KQotCQkJYXNzZXJ0IGZhbHNlOwotCi0JCXJldHVybiBjbXAgPT0gMDsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoIG11c3QgYmUgb2YKLQkgKiB0eXBlIFN0cmluZwotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBTdHJpbmcgaXMgbGV4b2dyYXBoaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGF0Ci0JICogICAgICAgICBzdXBwbGllZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWludCBjbXAgPSBkb19jb21wYXJlKGFyZywgY29udGV4dCk7Ci0KLQkJYXNzZXJ0IGNtcCAhPSA2NjY7Ci0KLQkJcmV0dXJuIGNtcCA+IDA7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaCBtdXN0IGJlIG9mCi0JICogdHlwZSBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoaXMgU3RyaW5nIGlzIGxleG9ncmFwaGljYWxseSBsZXNzIHRoYW4gdGhhdCBzdXBwbGllZC4KLQkgKiAgICAgICAgIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpbnQgY21wID0gZG9fY29tcGFyZShhcmcsIGNvbnRleHQpOwotCi0JCWFzc2VydCBjbXAgIT0gNjY2OwotCi0JCXJldHVybiBjbXAgPCAwOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1RpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjOGJlNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1RpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24gZGF0YSB0eXBlLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0aW9uIG9mIGNhc3RpbmcgdG8gdGltZS4gCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI2Mjc2NSAtIGZpeCB0eXBlIHRlc3RzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EdXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgVGltZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNUaW1lIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LCBDbXBHdCwKLQotTWF0aE1pbnVzLCBNYXRoUGx1cywKLQotQ2xvbmVhYmxlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19USU1FID0gInhzOnRpbWUiOwotCXByaXZhdGUgQ2FsZW5kYXIgX2NhbGVuZGFyOwotCXByaXZhdGUgYm9vbGVhbiBfdGltZXpvbmVkOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byB0aGUgc3VwcGxpZWQgdGltZSBhbmQgdGltZXpvbmUKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSB0byBiZSBzdG9yZWQKLQkgKiBAcGFyYW0gdHoKLQkgKiAgICAgICAgICAgIFRoZSB0aW1lem9uZSAocG9zc2libHkgbnVsbCkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGltZQotCSAqLwotCXB1YmxpYyBYU1RpbWUoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHR6KSB7Ci0JCV9jYWxlbmRhciA9IGNhbDsKLQotCQlfdHogPSB0ejsKLQkJaWYgKHR6ID09IG51bGwpCi0JCQlfdGltZXpvbmVkID0gZmFsc2U7Ci0JCWVsc2UKLQkJCV90aW1lem9uZWQgPSB0cnVlOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIHRoZSBjdXJyZW50IHRpbWUKLQkgKi8KLQlwdWJsaWMgWFNUaW1lKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGNvcHkgb2YgdGhlIHRpbWUgKGFuZCB0aW1lem9uZSkgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgY29weSBvZiB0aGUgdGltZSBhbmQgdGltZXpvbmUKLQkgKiBAdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7Ci0JCUNhbGVuZGFyIGMgPSAoQ2FsZW5kYXIpIGNhbGVuZGFyKCkuY2xvbmUoKTsKLQkJWFNEdXJhdGlvbiB0ID0gdHooKTsKLQotCQlpZiAodCAhPSBudWxsKQotCQkJdCA9IChYU0R1cmF0aW9uKSB0LmNsb25lKCk7Ci0KLQkJcmV0dXJuIG5ldyBYU1RpbWUoYywgdCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ0aW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidGltZSI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBTdHJpbmcgcmVwcmVzZW50ZWQgc3VwcGxpZWQgdGltZQotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRlZCB0aW1lIGFuZCB0aW1lem9uZSB0byBiZSBzdG9yZWQKLQkgKiBAcmV0dXJuIE5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBzdXBwbGllZCB0aW1lCi0JICovCi0JcHVibGljIHN0YXRpYyBDYWxlbmRhclR5cGUgcGFyc2VfdGltZShTdHJpbmcgc3RyKSB7Ci0KLQkJU3RyaW5nIHN0YXJ0ZGF0ZSA9ICIxOTgzLTExLTI5VCI7Ci0JCQotCQlYU0RhdGVUaW1lIGR0ID0gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKHN0YXJ0ZGF0ZSArIHN0cik7Ci0JCWlmIChkdCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIG5ldyBYU1RpbWUoZHQuY2FsZW5kYXIoKSwgZHQudHooKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB0aW1lIGZyb20gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSB0aW1lCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgdGltZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCQotCQlDYWxlbmRhclR5cGUgdCA9IGNhc3RUaW1lKGFhdCk7Ci0KLQkJaWYgKHQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcnMuYWRkKHQpOwotCi0JCXJldHVybiByczsKLQl9IAotCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVGltZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIENhbGVuZGFyVHlwZSBjYXN0VGltZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlYU1RpbWUgdGltZSA9IChYU1RpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNUaW1lKHRpbWUuY2FsZW5kYXIoKSwgdGltZS50eigpKTsKLQkJfQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTVGltZShkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlX3RpbWUoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQl9Ci0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBob3VyIHN0b3JlZCBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgaG91ciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IGhvdXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG1pbnV0ZSBzdG9yZWQgYXMgYW4gaW50ZWdlcgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG1pbnV0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IG1pbnV0ZSgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlOVVRFKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNlY29uZHMgc3RvcmVkIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBzZWNvbmQgc3RvcmVkCi0JICovCi0JcHVibGljIGRvdWJsZSBzZWNvbmQoKSB7Ci0JCWRvdWJsZSBzID0gX2NhbGVuZGFyLmdldChDYWxlbmRhci5TRUNPTkQpOwotCi0JCWRvdWJsZSBtcyA9IF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpOwotCi0JCW1zIC89IDEwMDA7Ci0KLQkJcyArPSBtczsKLQkJcmV0dXJuIHM7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhlIHRpbWUgc3RvcmVkIGhhcyBhIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdGltZSBoYXMgYSB0aW1lem9uZSBhc3NvY2lhdGVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCQkKLQkJQ2FsZW5kYXIgYWRqdXN0Rm9ydGltZXpvbmUgPSBjYWxlbmRhcigpOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSksIDIpOwotCQkKLQkJcmV0ICs9ICI6IjsKLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuTUlOVVRFKSwgMik7Ci0JCQotCi0JCXJldCArPSAiOiI7Ci0JCWludCBpc2Vjb25kID0gKGludCkgc2Vjb25kKCk7Ci0JCWRvdWJsZSBzZWMgPSBzZWNvbmQoKTsKLQotCQlpZiAoKHNlYyAtIChpc2Vjb25kKSkgPT0gMC4wKQotCQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChpc2Vjb25kLCAyKTsKLQkJZWxzZSB7Ci0JCQlpZiAoc2VjIDwgMTAuMCkKLQkJCQlyZXQgKz0gIjAiICsgc2VjOwotCQkJZWxzZQotCQkJCXJldCArPSBzZWM7Ci0JCX0KLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCWludCBocnMgPSBfdHouaG91cnMoKTsKLQkJCWludCBtaW4gPSBfdHoubWludXRlcygpOwotCQkJZG91YmxlIHNlY3MgPSBfdHouc2Vjb25kcygpOwotCQkJaWYgKGhycyA9PSAwICYmIG1pbiA9PSAwICYmIHNlY3MgPT0gMCkgewotCQkJICByZXQgKz0gIloiOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkgIFN0cmluZyB0Wm9uZVN0ciA9ICIiOwotCQkJICBpZiAoX3R6Lm5lZ2F0aXZlKCkpIHsKLQkJCQl0Wm9uZVN0ciArPSAiLSI7ICAKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQl0Wm9uZVN0ciArPSAiKyI7IAotCQkJICB9Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOyAgCi0JCQkgIHRab25lU3RyICs9ICI6IjsKLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1pbiwgMik7Ci0JCQkgIAotCQkJICByZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dGltZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19USU1FOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRpbWUgc3RvcmVkIGFzIGEgZHVyYXRpb24gb2YKLQkgKiB0aW1lCi0JICogCi0JICogQHJldHVybiBUaGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZSB0aW1lIHN0b3JlZCBhbmQgdGhlIGFjdHVhbCB0aW1lCi0JICogICAgICAgICBhZnRlciB0aGUgdGltZXpvbmUgaXMgdGFrZW4gaW50byBhY2NvdW50Ci0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKSB7Ci0JCXJldHVybiBfdHo7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gKLQkgKiAKLQkgKiBAcmV0dXJuIHRpbWUgc3RvcmVkIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gKLQkgKi8KLQlwdWJsaWMgZG91YmxlIHZhbHVlKCkgewotCQlyZXR1cm4gY2FsZW5kYXIoKS5nZXRUaW1lSW5NaWxsaXMoKSAvIDEwMDAuMDsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIGJvdGggWFNUaW1lJ3MgcmVwcmVzZW50IHRoZSBzYW1lIHRpbWUuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1RpbWUgdmFsID0gKFhTVGltZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNUaW1lLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBYU1RpbWUgcmVwcmVzZW50YXRpb24KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNUaW1lIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNudHMgYSBwb2ludCBpbiB0aW1lIGFmdGVyIHRoYXQKLQkgKiAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1RpbWUgdmFsID0gKFhTVGltZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNUaW1lLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQkJcmV0dXJuIHRoaXNjYWwuYmVmb3JlKHRoYXRjYWwpOwotCX0KLQkKLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc250cyBhIHBvaW50IGluIHRpbWUgYmVmb3JlIHRoYXQKLQkgKiAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTVGltZSB2YWwgPSAoWFNUaW1lKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU1RpbWUuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmFmdGVyKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgdGltZSBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIHJlcHJlc2VudGF0aW9uLiBUaGlzIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgZWl0aGVyIHR5cGUKLQkgKiBYU1RpbWUgKGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlCi0JICogdHdvIHRpbWVzKSBvciBhIFhTRGF5VGltZUR1cmF0aW9uIChpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgdGhlIHRpbWUKLQkgKiB3aGVuIHRoaXMgZHVyYXRpb24gaXMgc3VidHJhY3RlZCBmcm9tIHRoZSB0aW1lIHN0b3JlZCkuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIHN1YnRyYWN0IChlaXRoZXIgWFNUaW0gb3IKLQkgKiAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbikKLQkgKiBAcmV0dXJuIEEgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIHN1YnRyYWN0aW9uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQkJCi0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNUaW1lKSAmJiAhKGF0IGluc3RhbmNlb2YgWFNEYXlUaW1lRHVyYXRpb24pKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gbWludXNYU1RpbWVEdXJhdGlvbihhdCk7Ci0JCX0KLQkJCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RheVRpbWVEdXJhdGlvbihhdCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNEYXlUaW1lRHVyYXRpb24oQW55VHlwZSBhdCkgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBhdDsKLQotCQlYU1RpbWUgcmVzID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlcyA9IChYU1RpbWUpIGNsb25lKCk7Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGVycikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQl0cnkgewotCQkJWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sQ2FsID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKEdyZWdvcmlhbkNhbGVuZGFyKWNhbGVuZGFyKCkpOwotCQkJRHVyYXRpb24gZHRkdXJhdGlvbiA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0R1cmF0aW9uKHZhbC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQl4bWxDYWwuYWRkKGR0ZHVyYXRpb24ubmVnYXRlKCkpOwotCQkJcmVzID0gbmV3IFhTVGltZSh4bWxDYWwudG9HcmVnb3JpYW5DYWxlbmRhcigpLCByZXMudHooKSk7Ci0JCX0gY2F0Y2ggKERhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleCkgewotCQkJCi0JCX0KLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNUaW1lRHVyYXRpb24oQW55VHlwZSBhdCkgewotCQlYU1RpbWUgdmFsID0gKFhTVGltZSkgYXQ7Ci0JCUR1cmF0aW9uIGR0ZHVyYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJQ2FsZW5kYXIgdGhpc0NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQkJQ2FsZW5kYXIgdGhhdENhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0JCQlsb25nIGR1cmF0aW9uID0gdGhpc0NhbC5nZXRUaW1lSW5NaWxsaXMoKSAtIHRoYXRDYWwuZ2V0VGltZUluTWlsbGlzKCk7Ci0JCQlkdGR1cmF0aW9uID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RHVyYXRpb24oZHVyYXRpb24pOwotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KFhTRGF5VGltZUR1cmF0aW9uLnBhcnNlRFREdXJhdGlvbihkdGR1cmF0aW9uLnRvU3RyaW5nKCkpKTsKLQkJfSBjYXRjaCAoRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBiZXR3ZWVuIHRoaXMgdGltZSBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZCB0aW1lCi0JICogZHVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgQSBYRFREYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8KLQkgKiAgICAgICAgICAgIGFkZAotCSAqIEByZXR1cm4gQSBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhpcyBhZGRpdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRGF5VGltZUR1cmF0aW9uLmNsYXNzKTsKLQotCQl0cnkgewotCQkJZG91YmxlIG1zID0gdmFsLnRpbWVfdmFsdWUoKSAqIDEwMDAuMDsKLQotCQkJWFNUaW1lIHJlcyA9IChYU1RpbWUpIGNsb25lKCk7Ci0KLQkJCXJlcy5jYWxlbmRhcigpLmFkZChDYWxlbmRhci5NSUxMSVNFQ09ORCwgKGludCkgbXMpOwotCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZXJyKSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZEJ5dGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZEJ5dGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiOWE1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRCeXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2NTAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOnVuc2lnbmVkQnl0ZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU1Vuc2lnbmVkQnl0ZSBleHRlbmRzIFhTVW5zaWduZWRTaG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1VOU0lHTkVEX0JZVEUgPSAieHM6dW5zaWduZWRCeXRlIjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU1Vuc2lnbmVkQnl0ZSgpIHsKLQkgIHRoaXMoQmlnSW50ZWdlci52YWx1ZU9mKDApKTsKLQl9Ci0JCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgdW5zaWduZWRCeXRlIHZhbHVlCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIHVuc2lnbmVkQnl0ZSB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNVbnNpZ25lZEJ5dGUoQmlnSW50ZWdlciB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOnVuc2lnbmVkQnl0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19VTlNJR05FRF9CWVRFOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gInVuc2lnbmVkQnl0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gInVuc2lnbmVkQnl0ZSI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRCeXRlCi0JICogaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkQnl0ZSBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAndW5zaWduZWRCeXRlJyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSB1bnNpZ25lZEJ5dGUuCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQkvLyBtaW4gdmFsdWUgaXMgMAotCQkJLy8gbWF4IHZhbHVlIGlzIDI1NQotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMCk7Ci0JCQlCaWdJbnRlZ2VyIG1heCA9IEJpZ0ludGVnZXIudmFsdWVPZigyNTVMKTsKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDAgfHwgYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJzLmFkZChuZXcgWFNVbnNpZ25lZEJ5dGUoYmlnSW50KSk7Ci0JCQkKLQkJCXJldHVybiByczsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkSW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRJbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyYTZmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRJbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzY0MiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiwgb2YgeHM6dW5zaWduZWRJbnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB0eXBlLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgYWJzIHZhbHVlIHRlc3RzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgWFNVbnNpZ25lZEludCBleHRlbmRzIFhTVW5zaWduZWRMb25nIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfVU5TSUdORURfSU5UID0gInhzOnVuc2lnbmVkSW50IjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU1Vuc2lnbmVkSW50KCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZEludCB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICB1bnNpZ25lZEludCB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNVbnNpZ25lZEludChCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dW5zaWduZWRJbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfVU5TSUdORURfSU5UOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gInVuc2lnbmVkSW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidW5zaWduZWRJbnQiOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkSW50Ci0JICogaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkSW50IGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZEludCcgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgdW5zaWduZWRJbnQuCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQkvLyBtaW4gdmFsdWUgaXMgMAotCQkJLy8gbWF4IHZhbHVlIGlzIDQyOTQ5NjcyOTUKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKDApOwotCQkJQmlnSW50ZWdlciBtYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoNDI5NDk2NzI5NUwpOwotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwkKLQkJCX0KLQkJCQotCQkJcnMuYWRkKG5ldyBYU1Vuc2lnbmVkSW50KGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZExvbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZExvbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2NzAyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRMb25nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MjkgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOnVuc2lnbmVkTG9uZwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU1Vuc2lnbmVkTG9uZyBleHRlbmRzIFhTTm9uTmVnYXRpdmVJbnRlZ2VyIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfVU5TSUdORURfTE9ORyA9ICJ4czp1bnNpZ25lZExvbmciOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTVW5zaWduZWRMb25nKCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZExvbmcgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgdW5zaWduZWRMb25nIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU1Vuc2lnbmVkTG9uZyhCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dW5zaWduZWRMb25nIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1VOU0lHTkVEX0xPTkc7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAidW5zaWduZWRMb25nIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidW5zaWduZWRMb25nIjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZExvbmcKLQkgKiBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRMb25nIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZExvbmcnIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIHVuc2lnbmVkTG9uZy4KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCS8vIG1pbiB2YWx1ZSBpcyAwCi0JCQkvLyBtYXggdmFsdWUgaXMgMTg0NDY3NDQwNzM3MDk1NTE2MTUKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKDApOwotCQkJQmlnSW50ZWdlciBtYXggPSBuZXcgQmlnSW50ZWdlcigiMTg0NDY3NDQwNzM3MDk1NTE2MTUiKTsKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDAgfHwgYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJzLmFkZChuZXcgWFNVbnNpZ25lZExvbmcoYmlnSW50KSk7Ci0JCQkKLQkJCXJldHVybiByczsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkU2hvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZFNob3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MzNlN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkU2hvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzY0NSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiwgb2YgeHM6dW5zaWduZWRTaG9ydAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU1Vuc2lnbmVkU2hvcnQgZXh0ZW5kcyBYU1Vuc2lnbmVkSW50IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfVU5TSUdORURfU0hPUlQgPSAieHM6dW5zaWduZWRTaG9ydCI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAKLQkgKi8KLQlwdWJsaWMgWFNVbnNpZ25lZFNob3J0KCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZFNob3J0IHZhbHVlCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIHVuc2lnbmVkU2hvcnQgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTVW5zaWduZWRTaG9ydChCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dW5zaWduZWRTaG9ydCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19VTlNJR05FRF9TSE9SVDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ1bnNpZ25lZFNob3J0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidW5zaWduZWRTaG9ydCI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRTaG9ydAotCSAqIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZFNob3J0IGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZFNob3J0JyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSB1bnNpZ25lZFNob3J0LgotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkKLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZwotCQkJLy8gbWluIHZhbHVlIGlzIDAKLQkJCS8vIG1heCB2YWx1ZSBpcyA2NTUzNQotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMCk7Ci0JCQlCaWdJbnRlZ2VyIG1heCA9IEJpZ0ludGVnZXIudmFsdWVPZig2NTUzNUwpOwotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwkKLQkJCX0KLQkJCQotCQkJcnMuYWRkKG5ldyBYU1Vuc2lnbmVkU2hvcnQoYmlnSW50KSk7Ci0JCQkKLQkJCXJldHVybiByczsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1VudHlwZWRBdG9taWMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnR5cGVkQXRvbWljLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NjgxZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1VudHlwZWRBdG9taWMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBjb3JyZWN0ZWQgaW1wbGVtZW50YXRpb24gb2YgWFNVbnR5cGVkQXRvbWljIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVbnR5cGVkQXRvbWljIGRhdGF0eXBlIHdoaWNoIGlzIHVzZWQgdG8gcmVwcmVzZW50Ci0gKiB1bnR5cGVkIGF0b21pYyBub2Rlcy4KLSAqLwotcHVibGljIGNsYXNzIFhTVW50eXBlZEF0b21pYyBleHRlbmRzIEN0clR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19VTlRZUEVEX0FUT01JQyA9ICJ4czp1bnR5cGVkQXRvbWljIjsKLQlwcml2YXRlIFN0cmluZyBfdmFsdWU7Ci0KLQkKLQlwdWJsaWMgWFNVbnR5cGVkQXRvbWljKCkgewotCQl0aGlzKG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoZSB1bnR5cGVkIGF0b21pYwotCSAqICAgICAgICAgICAgbm9kZQotCSAqLwotCXB1YmxpYyBYU1VudHlwZWRBdG9taWMoU3RyaW5nIHgpIHsKLQkJX3ZhbHVlID0geDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOnVudHlwZWRBdG9taWMiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfVU5UWVBFRF9BVE9NSUM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIHVudHlwZWQgYXRvbWljCi0JICogbm9kZQotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIHVudHlwZWQgYXRvbWljIG5vZGUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQotCQlycy5hZGQobmV3IFhTVW50eXBlZEF0b21pYyhhYXQuc3RyaW5nX3ZhbHVlKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidW50eXBlZEF0b21pYyI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1llYXJNb250aER1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTWWVhck1vbnRoRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzMjlkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTWWVhck1vbnRoRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc5MzczIC0gaW1wcm92ZW1lbnRzIHRvIG11bHRpcGx5IG9wZXJhdGlvbiBvbiB4czp5ZWFyTW9udGhEdXJhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uIGRhdGEgdHlwZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgWWVhck1vbnRoRHVyYXRpb24gZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTWWVhck1vbnRoRHVyYXRpb24gZXh0ZW5kcyBYU0R1cmF0aW9uIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LAotCQlDbXBHdCwgTWF0aFBsdXMsIE1hdGhNaW51cywgTWF0aFRpbWVzLCBNYXRoRGl2IHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1lFQVJfTU9OVEhfRFVSQVRJT04gPSAieHM6eWVhck1vbnRoRHVyYXRpb24iOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIHRoZSBudW1iZXIgb2YgbW9udGhzCi0JICogc3VwcGxpZWQgaXMgbW9yZSB0aGFuIDEyLCB0aGUgbnVtYmVyIG9mIHllYXJzIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgotCSAqIAotCSAqIEBwYXJhbSB5ZWFyCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgeWVhcnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIG1vbnRoCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgbW9udGhzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBuZWdhdGl2ZQotCSAqICAgICAgICAgICAgVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0JICogICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBYU1llYXJNb250aER1cmF0aW9uKGludCB5ZWFyLCBpbnQgbW9udGgsIGJvb2xlYW4gbmVnYXRpdmUpIHsKLQkJc3VwZXIoeWVhciwgbW9udGgsIDAsIDAsIDAsIDAsIG5lZ2F0aXZlKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1vbnRocwotCSAqIAotCSAqIEBwYXJhbSBtb250aHMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBtb250aHMgaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLQkgKi8KLQlwdWJsaWMgWFNZZWFyTW9udGhEdXJhdGlvbihpbnQgbW9udGhzKSB7Ci0JCXRoaXMoMCwgTWF0aC5hYnMobW9udGhzKSwgbW9udGhzIDwgMCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gYSBkdXJhdGlvbiBvZiBubyB0aW1lICgweWVhcnMgYW5kIDBtb250aHMpCi0JICovCi0JcHVibGljIFhTWWVhck1vbnRoRHVyYXRpb24oKSB7Ci0JCXRoaXMoMCwgMCwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgWFNZZWFyTW9udGhEdXJhdGlvbiBieSBwYXJzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcmV0dXJuIE5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqICAgICAgICAgc3VwcGxpZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRHVyYXRpb24gcGFyc2VZTUR1cmF0aW9uKFN0cmluZyBzdHIpIHsKLQkJYm9vbGVhbiBuZWdhdGl2ZSA9IGZhbHNlOwotCQlpbnQgeWVhciA9IDA7Ci0JCWludCBtb250aCA9IDA7Ci0KLQkJaW50IHN0YXRlID0gMDsgLy8gMCBiZWdpbm5pbmcKLQkJLy8gMSB5ZWFyCi0JCS8vIDIgbW9udGgKLQkJLy8gMyBkb25lCi0JCS8vIDQgZXhwZWN0aW5nIFAKLQkJLy8gNSBleHBlY3RpbmcgWSBvciBNCi0JCS8vIDYgZXhwZWN0aW5nIE0gb3IgZW5kCi0JCS8vIDcgZXhwZWN0aW5nIGVuZAotCi0JCVN0cmluZyBkaWdpdHMgPSAiIjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykgewotCQkJY2hhciB4ID0gc3RyLmNoYXJBdChpKTsKLQotCQkJc3dpdGNoIChzdGF0ZSkgewotCQkJLy8gYmVnaW5uaW5nCi0JCQljYXNlIDA6Ci0JCQkJaWYgKHggPT0gJy0nKSB7Ci0JCQkJCW5lZ2F0aXZlID0gdHJ1ZTsKLQkJCQkJc3RhdGUgPSA0OwotCQkJCX0gZWxzZSBpZiAoeCA9PSAnUCcpCi0JCQkJCXN0YXRlID0gNTsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDQ6Ci0JCQkJaWYgKHggPT0gJ1AnKQotCQkJCQlzdGF0ZSA9IDU7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSA1OgotCQkJCWlmICgnMCcgPD0geCAmJiB4IDw9ICc5JykKLQkJCQkJZGlnaXRzICs9IHg7Ci0JCQkJZWxzZSBpZiAoeCA9PSAnWScpIHsKLQkJCQkJaWYgKGRpZ2l0cy5sZW5ndGgoKSA9PSAwKQotCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJCXllYXIgPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0cyk7Ci0JCQkJCWRpZ2l0cyA9ICIiOwotCQkJCQlzdGF0ZSA9IDY7Ci0JCQkJfSBlbHNlIGlmICh4ID09ICdNJykgewotCQkJCQlpZiAoZGlnaXRzLmxlbmd0aCgpID09IDApCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQkJbW9udGggPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0cyk7Ci0JCQkJCXN0YXRlID0gNzsKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgNjoKLQkJCQlpZiAoJzAnIDw9IHggJiYgeCA8PSAnOScpCi0JCQkJCWRpZ2l0cyArPSB4OwotCQkJCWVsc2UgaWYgKHggPT0gJ00nKSB7Ci0JCQkJCWlmIChkaWdpdHMubGVuZ3RoKCkgPT0gMCkKLQkJCQkJCXJldHVybiBudWxsOwotCQkJCQltb250aCA9IEludGVnZXIucGFyc2VJbnQoZGlnaXRzKTsKLQkJCQkJc3RhdGUgPSA3OwotCi0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDc6Ci0JCQkJcmV0dXJuIG51bGw7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJYXNzZXJ0IGZhbHNlOwotCQkJCXJldHVybiBudWxsOwotCi0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhTWWVhck1vbnRoRHVyYXRpb24oeWVhciwgbW9udGgsIG5lZ2F0aXZlKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAieWVhck1vbnRoRHVyYXRpb24iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ5ZWFyTW9udGhEdXJhdGlvbiI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB0aW1lIGR1cmF0aW9uCi0JICogZnJvbSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0Ci0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgdGltZSBkdXJhdGlvbiBleHRyYWN0ZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQkJCi0JCVhTRHVyYXRpb24geW1kID0gY2FzdFllYXJNb250aER1cmF0aW9uKGFhdCk7Ci0KLQkJaWYgKHltZCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlycy5hZGQoeW1kKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCXByaXZhdGUgWFNEdXJhdGlvbiBjYXN0WWVhck1vbnRoRHVyYXRpb24oQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24pIHsKLQkJCVhTRHVyYXRpb24gZHVyYXRpb24gPSAoWFNEdXJhdGlvbikgYWF0OwotCQkJcmV0dXJuIG5ldyBYU1llYXJNb250aER1cmF0aW9uKGR1cmF0aW9uLnllYXIoKSwgZHVyYXRpb24ubW9udGgoKSwgZHVyYXRpb24ubmVnYXRpdmUoKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZVlNRHVyYXRpb24oYWF0LnN0cmluZ192YWx1ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2gKLQkgKiB0aW1lCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaCB0aW1lLgotCSAqICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gbmVnYXRpdmUoKSB7Ci0JCXJldHVybiBfbmVnYXRpdmU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlTdHJpbmcgc3RydmFsID0gIiI7Ci0KLQkJaWYgKG5lZ2F0aXZlKCkpCi0JCQlzdHJ2YWwgKz0gIi0iOwotCi0JCXN0cnZhbCArPSAiUCI7Ci0KLQkJaW50IHllYXJzID0geWVhcigpOwotCQlpZiAoeWVhcnMgIT0gMCkKLQkJCXN0cnZhbCArPSB5ZWFycyArICJZIjsKLQotCQlpbnQgbW9udGhzID0gbW9udGgoKTsKLQkJaWYgKG1vbnRocyA9PSAwKSB7Ci0JCQlpZiAoeWVhcnMgPT0gMCkKLQkJCQlzdHJ2YWwgKz0gbW9udGhzICsgIk0iOwotCQl9IGVsc2UKLQkJCXN0cnZhbCArPSBtb250aHMgKyAiTSI7Ci0KLQkJcmV0dXJuIHN0cnZhbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOnllYXJNb250aER1cmF0aW9uIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1lFQVJfTU9OVEhfRFVSQVRJT047Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCBhcyB0aGUgbnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gaXQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBtb250aHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqLwotCXB1YmxpYyBpbnQgbW9udGhWYWx1ZSgpIHsKLQkJaW50IHJldCA9IHllYXIoKSAqIDEyICsgbW9udGgoKTsKLQotCQlpZiAobmVnYXRpdmUoKSkKLQkJCXJldCAqPSAtMTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgZHVyYXRpb24gb2YgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcgaW5zdGFuY2VvZiBYU0RheVRpbWVEdXJhdGlvbikgewotCQkJWFNEYXlUaW1lRHVyYXRpb24gZGF5VGltZUR1cmF0aW9uID0gKFhTRGF5VGltZUR1cmF0aW9uKWFyZzsKLQkJCXJldHVybiAobW9udGhWYWx1ZSgpID09IDAgJiYgZGF5VGltZUR1cmF0aW9uLnZhbHVlKCkgPT0gMC4wKTsKLQkJfSBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKSB7Ci0JCQlYU1llYXJNb250aER1cmF0aW9uIHllYXJNb250aER1cmF0aW9uID0gKFhTWWVhck1vbnRoRHVyYXRpb24pYXJnOwotCQkJcmV0dXJuIG1vbnRoVmFsdWUoKSA9PSB5ZWFyTW9udGhEdXJhdGlvbi5tb250aFZhbHVlKCk7Ci0JCX0KLQkJWFNEdXJhdGlvbiB2YWwgPSAoWFNEdXJhdGlvbikgTnVtZXJpY1R5cGUKLQkJCQkuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNEdXJhdGlvbi5jbGFzcyk7Ci0JCXJldHVybiBzdXBlci5lcSh2YWwsIGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIGxhcmdlciBkdXJhdGlvbiB0aGFuIHRoYXQKLQkgKiAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTWWVhck1vbnRoRHVyYXRpb24gdmFsID0gKFhTWWVhck1vbnRoRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MpOwotCi0JCXJldHVybiBtb250aFZhbHVlKCkgPCB2YWwubW9udGhWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIHNtYWxsZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0JICogICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1llYXJNb250aER1cmF0aW9uIHZhbCA9IChYU1llYXJNb250aER1cmF0aW9uKSBOdW1lcmljVHlwZQotCQkJCS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU1llYXJNb250aER1cmF0aW9uLmNsYXNzKTsKLQotCQlyZXR1cm4gbW9udGhWYWx1ZSgpID4gdmFsLm1vbnRoVmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0JICogZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGFkZAotCSAqIEByZXR1cm4gTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLQkgKiAgICAgICAgIGFmdGVyIHRoZSBhZGRpdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHBsdXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNZZWFyTW9udGhEdXJhdGlvbiB2YWwgPSAoWFNZZWFyTW9udGhEdXJhdGlvbikgTnVtZXJpY1R5cGUKLQkJCQkuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNZZWFyTW9udGhEdXJhdGlvbi5jbGFzcyk7Ci0KLQkJaW50IHJlcyA9IG1vbnRoVmFsdWUoKSArIHZhbC5tb250aFZhbHVlKCk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU1llYXJNb250aER1cmF0aW9uKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gc3VidHJhY3QKLQkgKiBAcmV0dXJuIE5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uCi0JICogICAgICAgICBhZnRlciB0aGUgc3VidHJhY3Rpb24KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtaW51cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1llYXJNb250aER1cmF0aW9uIHZhbCA9IChYU1llYXJNb250aER1cmF0aW9uKSBOdW1lcmljVHlwZQotCQkJCS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU1llYXJNb250aER1cmF0aW9uLmNsYXNzKTsKLQotCQlpbnQgcmVzID0gbW9udGhWYWx1ZSgpIC0gdmFsLm1vbnRoVmFsdWUoKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTWWVhck1vbnRoRHVyYXRpb24ocmVzKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbikKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBtdWx0aXBseSBieQotCSAqIEByZXR1cm4gTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLQkgKiAgICAgICAgIGFmdGVyIHRoZSBtdWx0aXBsaWNhdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHRpbWVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNvbnZlcnRlZFJTID0gYXJnOwkJCi0JCWlmIChhcmcuc2l6ZSgpID09IDEpIHsKLQkJCUFueVR5cGUgYXJnVmFsdWUgPSBhcmcuZmlyc3QoKTsKLSAgICAgICAgICAgIGlmIChhcmdWYWx1ZSBpbnN0YW5jZW9mIFhTRGVjaW1hbCkgewotICAgICAgICAgICAgCWNvbnZlcnRlZFJTID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRG91YmxlKGFyZ1ZhbHVlLnN0cmluZ192YWx1ZSgpKSk7CQotICAgICAgICAgICAgfQotCQl9Ci0JCQotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShjb252ZXJ0ZWRSUywKLQkJCQlYU0RvdWJsZS5jbGFzcyk7Ci0KLQkJaWYgKHZhbC5uYW4oKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLm5hbigpOwotCQl9Ci0JCQotCQlpZiAodmFsLmluZmluaXRlKCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5vdmVyZmxvd0RhdGVUaW1lKCk7Ci0JCX0KLQkJCi0JCWludCByZXMgPSAoaW50KSBNYXRoLnJvdW5kKG1vbnRoVmFsdWUoKSAqIHZhbC5kb3VibGVfdmFsdWUoKSk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU1llYXJNb250aER1cmF0aW9uKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBkaXZpc2lvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gZGl2aWRlIGJ5Ci0JICogQHJldHVybiBOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotCSAqICAgICAgICAgYWZ0ZXIgdGhlIGRpdmlzaW9uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU0RvdWJsZSkgewotCQkJWFNEb3VibGUgZHQgPSAoWFNEb3VibGUpIGF0OwotCi0JCQlpbnQgcmV0ID0gMDsKLQotCQkJaWYgKCFkdC56ZXJvKCkpCi0JCQkJcmV0ID0gKGludCkgTWF0aC5yb3VuZChtb250aFZhbHVlKCkgLyBkdC5kb3VibGVfdmFsdWUoKSk7Ci0KLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNZZWFyTW9udGhEdXJhdGlvbigKLQkJCQkJcmV0KSk7Ci0JCX0gZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBYU0RlY2ltYWwpIHsKLQkJCVhTRGVjaW1hbCBkdCA9IChYU0RlY2ltYWwpIGF0OwotCQkJCi0JCQlpbnQgcmV0ID0gMDsKLQkJCQotCQkJaWYgKCFkdC56ZXJvKCkpCi0JCQkJcmV0ID0gKGludCkgTWF0aC5yb3VuZChtb250aFZhbHVlKCkgLyBkdC5nZXRWYWx1ZSgpLmRvdWJsZVZhbHVlKCkpOwotCQkJCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTWWVhck1vbnRoRHVyYXRpb24oCi0JCQkJCXJldCkpOwkKLQkJfSBlbHNlIGlmIChhdCBpbnN0YW5jZW9mIFhTWWVhck1vbnRoRHVyYXRpb24pIHsKLQkJCVhTWWVhck1vbnRoRHVyYXRpb24gbWQgPSAoWFNZZWFyTW9udGhEdXJhdGlvbikgYXQ7Ci0KLQkJCWRvdWJsZSByZXMgPSAoZG91YmxlKSBtb250aFZhbHVlKCkgLyBtZC5tb250aFZhbHVlKCk7Ci0KLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKEJpZ0RlY2ltYWwudmFsdWVPZihyZXMpKSk7Ci0JCX0gZWxzZSB7Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL3VzZXJkZWZpbmVkL1VzZXJEZWZpbmVkQ3RyTGlicmFyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy91c2VyZGVmaW5lZC9Vc2VyRGVmaW5lZEN0ckxpYnJhcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4MDY1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL3VzZXJkZWZpbmVkL1VzZXJEZWZpbmVkQ3RyTGlicmFyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMudXNlcmRlZmluZWQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ29uc3RydWN0b3JGTDsKLQotcHVibGljIGNsYXNzIFVzZXJEZWZpbmVkQ3RyTGlicmFyeSBleHRlbmRzIENvbnN0cnVjdG9yRkwgewotCi0JcHVibGljIFVzZXJEZWZpbmVkQ3RyTGlicmFyeShTdHJpbmcgbnMpIHsKLQkJc3VwZXIobnMpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9Db2RlUG9pbnRJdGVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9Db2RlUG9pbnRJdGVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGNjZTg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvQ29kZVBvaW50SXRlcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzOwotCi1wdWJsaWMgaW50ZXJmYWNlIENvZGVQb2ludEl0ZXJhdG9yIGV4dGVuZHMgQ2xvbmVhYmxlCi17Ci0gICAgLyoqCi0gICAgICogU2VudGluZWwgdmFsdWUgcmV0dXJuZWQgZnJvbSBpdGVyYXRvciB3aGVuIHRoZSBlbmQgaXMgcmVhY2hlZC4KLSAgICAgKiBUaGUgdmFsdWUgaXMgLTEgd2hpY2ggd2lsbCBuZXZlciBiZSBhIHZhbGlkIGNvZGVwb2ludC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET05FID0gLTE7Ci0KLSAgICAvKioKLSAgICAgKiBSZXNldHMgdGhlIHBvc2l0aW9uIHRvIDAgYW5kIHJldHVybnMgdGhlIGZpcnN0IGNvZGUgcG9pbnQuCi0gICAgICogQHJldHVybiB0aGUgZmlyc3QgY29kZSBwb2ludCBpbiB0aGUgdGV4dCwgb3IgRE9ORSBpZiB0aGUgdGV4dCBpcyBlbXB0eQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZmlyc3QoKTsKLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIHRvIHRoZSBsYXN0IHBvc3NpYmxlIHBvc2l0aW9uIChvciAwIGlmIHRoZSB0ZXh0IGlzIGVtcHR5KQotICAgICAqIGFuZCByZXR1cm5zIHRoZSBjb2RlIHBvaW50IGF0IHRoYXQgcG9zaXRpb24uCi0gICAgICogQHJldHVybiB0aGUgbGFzdCBjb2RlIHBvaW50IGluIHRoZSB0ZXh0LCBvciBET05FIGlmIHRoZSB0ZXh0IGlzIGVtcHR5Ci0gICAgICogQHNlZSAjZ2V0RW5kSW5kZXgoKQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgbGFzdCgpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgY29kZSBwb2ludCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgZ2V0SW5kZXgoKSkuCi0gICAgICogQHJldHVybiB0aGUgY29kZSBwb2ludCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBvciBET05FIGlmIHRoZSBjdXJyZW50Ci0gICAgICogcG9zaXRpb24gaXMgb2ZmIHRoZSBlbmQgb2YgdGhlIHRleHQuCi0gICAgICogQHNlZSAjZ2V0SW5kZXgoKQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgY3VycmVudCgpOwotCi0gICAgLyoqCi0gICAgICogSW5jcmVtZW50cyB0aGUgaXRlcmF0b3IncyBjb2RlIHBvaW50IGluZGV4IGJ5IG9uZSBhbmQgcmV0dXJucyB0aGUgY29kZSBwb2ludAotICAgICAqIGF0IHRoZSBuZXcgaW5kZXguICBJZiB0aGUgcmVzdWx0aW5nIGluZGV4IGlzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgdGhlCi0gICAgICogaW5kZXggaXMgbm90IGluY3JlbWVudGVkLCBhbmQgRE9ORSBpcyByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBuZXcgcG9zaXRpb24gb3IgRE9ORSBpZiB0aGUgbmV3Ci0gICAgICogcG9zaXRpb24gaXMgYWZ0ZXIgdGhlIHRleHQgcmFuZ2UuCi0gICAgICovCi0gICAgcHVibGljIGludCBuZXh0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBEZWNyZW1lbnRzIHRoZSBpdGVyYXRvcidzIGluZGV4IGJ5IG9uZSBhbmQgcmV0dXJucyB0aGUgY2hhcmFjdGVyCi0gICAgICogYXQgdGhlIG5ldyBpbmRleC4gSWYgdGhlIGN1cnJlbnQgaW5kZXggaXMgMCwgdGhlIGluZGV4Ci0gICAgICogcmVtYWlucyBhdCAwIGFuZCBhIHZhbHVlIG9mIERPTkUgaXMgcmV0dXJuZWQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBuZXcgcG9zaXRpb24gKG9yIERPTkUgaWYgdGhlIGN1cnJlbnQKLSAgICAgKiBwb3NpdGlvbiBpcyAwKQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgcHJldmlvdXMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaW5kZXggKGFzIGEgY29kZXBvaW50LCBub3QgYSBzdHJpbmcgaW5kZXgpLgotICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgaW5kZXguCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRJbmRleCgpOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgY29weSBvZiB0aGlzIGNvZGUgcG9pbnQgaXRlcmF0b3IKLSAgICAgKiBAcmV0dXJuIEEgY29weSBvZiB0aGlzCi0gICAgICovCi0gICAgcHVibGljIE9iamVjdCBjbG9uZSgpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL0NvbXBhcmFibGVUeXBlUHJvbW90ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvQ29tcGFyYWJsZVR5cGVQcm9tb3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzczNDg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvQ29tcGFyYWJsZVR5cGVQcm9tb3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBKZXNwZXIgU3RlZW4gTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZTsKLQotcHVibGljIGNsYXNzIENvbXBhcmFibGVUeXBlUHJvbW90ZXIgZXh0ZW5kcyBTY2FsYXJUeXBlUHJvbW90ZXIgewotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tDb21iaW5hdGlvbihDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gbmV3VHlwZSkgewotCi0JCUNsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0YXJnZXRUeXBlID0gZ2V0VGFyZ2V0VHlwZSgpOwotCQlpZiAobmV3VHlwZSA9PSBYU1N0cmluZy5jbGFzcyB8fCBuZXdUeXBlID09IFhTVGltZS5jbGFzcyB8fCB0YXJnZXRUeXBlID09IFhTU3RyaW5nLmNsYXNzIHx8IHRhcmdldFR5cGUgPT0gWFNUaW1lLmNsYXNzKSB7Ci0JCQlyZXR1cm4gdGFyZ2V0VHlwZSA9PSBuZXdUeXBlOwkKLQkJfQotCQlpZiAobmV3VHlwZSA9PSBYU0RhdGUuY2xhc3MgJiYgdGFyZ2V0VHlwZSA9PSBYU0RhdGVUaW1lLmNsYXNzKSByZXR1cm4gdHJ1ZTsgLy8gbGVhdmUgYWxvbmUKLQkJaWYgKG5ld1R5cGUgPT0gWFNEYXRlVGltZS5jbGFzcyAmJiB0YXJnZXRUeXBlICE9IFhTRGF0ZVRpbWUuY2xhc3MpIHsKLQkJCWlmICh0YXJnZXRUeXBlID09IFhTRGF0ZS5jbGFzcykgewotCQkJCXNldFRhcmdldFR5cGUoWFNEYXRlVGltZS5jbGFzcyk7Ci0JCQl9IGVsc2UgcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJcmV0dXJuIHN1cGVyLmNoZWNrQ29tYmluYXRpb24obmV3VHlwZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiBzdWJzdGl0dXRlKENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0eXBlVG9Db25zaWRlcikgewotCQlpZiAodHlwZVRvQ29uc2lkZXIgPT0gWFNBbnlVUkkuY2xhc3MgfHwgdHlwZVRvQ29uc2lkZXIgPT0gWFNTdHJpbmcuY2xhc3MpIHsKLQkJCXJldHVybiBYU1N0cmluZy5jbGFzczsKLQkJfQotCQlpZiAodHlwZVRvQ29uc2lkZXIgPT0gWFNEYXRlVGltZS5jbGFzcyB8fCB0eXBlVG9Db25zaWRlciA9PSBYU0RhdGUuY2xhc3MgfHwgdHlwZVRvQ29uc2lkZXIgPT0gWFNUaW1lLmNsYXNzKSB7Ci0JCQlyZXR1cm4gdHlwZVRvQ29uc2lkZXI7Ci0JCX0KLQotCQlyZXR1cm4gc3VwZXIuc3Vic3RpdHV0ZSh0eXBlVG9Db25zaWRlcik7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9MaXRlcmFsVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvTGl0ZXJhbFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZjc1ZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9MaXRlcmFsVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIFN0ZWVuIE3vv71sbGVyIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzOwotCi0vKioKLSAqIFN0cmluZyBsaXRlcmFsIHV0aWxpdGllcwotICogCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTGl0ZXJhbFV0aWxzIHsKLQkKLQkvKioKLQkgKiBVbnF1b3RlcyBhIHF1b3RlZCBzdHJpbmcsIGNoYW5naW5nIGRvdWJsZSBxdW90ZXMgaW50byBzaW5nbGUgcXVvdGVzIGFzIHdlbGwuCi0gICAgICogRXhhbXBsZXMgKHN0cmluZyBkZWxpbWl0ZWQgYnkgPiBhbmQgPCk6Ci0gICAgICogID4iQSI8IGJlY29tZXMgPkE8IAotICAgICAqICA+J0InPCBiZWNvbWVzID5CPCAKLQkgKiAgPiJBIiJCIjwgYmVjb21lcyA+QSJCPAotCSAqICA+IkEiIkIiPCBiZWNvbWVzID5BIkI8Ci0JICogID4nQScnJydCJzwgYmVjb21lcyA+QScnQjwKLQkgKiAgPiJBJycnJ0IiPCBiZWNvbWVzID5BJycnJ0I8Ci0JICogQHBhcmFtIHF1b3RlZFN0cmluZyBBIHF1b3RlZCBzdHJpbmcgcG9zc2libHkgY29udGFpbmluZyBlc2NhcGVkIHF1b3RlcwotCSAqIEByZXR1cm4gdW5xdW90ZWQgYW5kIHVuZXNjYXBlZCBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB1bnF1b3RlKFN0cmluZyBxdW90ZWRTdHJpbmcpIHsKLQkJaW50IGlucHV0TGVuZ3RoID0gcXVvdGVkU3RyaW5nLmxlbmd0aCgpOwotCQljaGFyIHF1b3RlQ2hhciA9IHF1b3RlZFN0cmluZy5jaGFyQXQoMCk7Ci0JCWlmIChxdW90ZWRTdHJpbmcuaW5kZXhPZihxdW90ZUNoYXIsIDEpID09IGlucHV0TGVuZ3RoLTEpIHsKLQkJCS8vIFRoZSB0cml2aWFsIGNhc2Ugd2hlcmUgdGhlcmUncyBubyBxdW90ZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3RyaW5nLgotCQkJcmV0dXJuIHF1b3RlZFN0cmluZy5zdWJzdHJpbmcoMSwgaW5wdXRMZW5ndGgtMSk7Ci0JCX0KLQkJCi0JCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCQlmb3IgKGludCBpID0gMTsgaSA8IGlucHV0TGVuZ3RoLTE7ICsraSkgewotCQkJY2hhciBjaCA9IHF1b3RlZFN0cmluZy5jaGFyQXQoaSk7Ci0JCQlzYi5hcHBlbmQoY2gpOwotCQkJaWYgKGNoID09IHF1b3RlQ2hhcikgKytpOyAvLyBTa2lwIHBhc3Qgc2Vjb25kIHF1b3RlIGNoYXIgKGVuc3VyZWQgYnkgdGhlIGxleGVyKQotCQl9Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvTnVtZXJpY1R5cGVQcm9tb3Rlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9OdW1lcmljVHlwZVByb21vdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MjQ4ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9OdW1lcmljVHlwZVByb21vdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEplc3BlciBTdGVlbiBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGF2Zy9taW4vbWF4L3N1bSB3b3JrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljOwotCi1wdWJsaWMgY2xhc3MgTnVtZXJpY1R5cGVQcm9tb3RlciBleHRlbmRzIFR5cGVQcm9tb3RlciB7Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja0NvbWJpbmF0aW9uKENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiBuZXdUeXBlKSB7Ci0JCS8vIE5vdGU6IERvdWJsZSBvciBmbG9hdCB3aWxsIG92ZXJyaWRlIGV2ZXJ5dGhpbmcKLQkJaWYgKG5ld1R5cGUgPT0gWFNEb3VibGUuY2xhc3MgfHwgZ2V0VGFyZ2V0VHlwZSgpID09IFhTRG91YmxlLmNsYXNzKSB7Ci0JCQlzZXRUYXJnZXRUeXBlKFhTRG91YmxlLmNsYXNzKTsKLQkJfSBlbHNlIGlmIChuZXdUeXBlID09IFhTRmxvYXQuY2xhc3MgfHwgZ2V0VGFyZ2V0VHlwZSgpID09IFhTRmxvYXQuY2xhc3MpIHsKLQkJCXNldFRhcmdldFR5cGUoWFNGbG9hdC5jbGFzcyk7Ci0JCS8vIElmIHdlJ3JlIHN0aWxsIHdpdGggaW50ZWdlcnMsIHN0aWNrIHdpdGggaXQKLQkJfSBlbHNlIGlmIChuZXdUeXBlID09IFhTSW50ZWdlci5jbGFzcyAmJiBnZXRUYXJnZXRUeXBlKCkgPT0gWFNJbnRlZ2VyLmNsYXNzKSB7Ci0JCQlzZXRUYXJnZXRUeXBlKFhTSW50ZWdlci5jbGFzcyk7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBPdGhlcndpc2UsIHN3aXRjaCB0byBkZWNpbWFscwotCQkJc2V0VGFyZ2V0VHlwZShYU0RlY2ltYWwuY2xhc3MpOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlBdG9taWNUeXBlIGRvUHJvbW90ZShBbnlBdG9taWNUeXBlIHZhbHVlKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGdldFRhcmdldFR5cGUoKSA9PSBYU0Zsb2F0LmNsYXNzKSB7Ci0JCQlyZXR1cm4gbmV3IFhTRmxvYXQodmFsdWUuc3RyaW5nX3ZhbHVlKCkpOwotCQl9IGVsc2UgaWYgKGdldFRhcmdldFR5cGUoKSA9PSBYU0RvdWJsZS5jbGFzcykgewotCQkJcmV0dXJuIG5ldyBYU0RvdWJsZSh2YWx1ZS5zdHJpbmdfdmFsdWUoKSk7Ci0JCX0gZWxzZSBpZiAoZ2V0VGFyZ2V0VHlwZSgpID09IFhTSW50ZWdlci5jbGFzcykgewotCQkJcmV0dXJuIG5ldyBYU0ludGVnZXIodmFsdWUuc3RyaW5nX3ZhbHVlKCkpOwotCQl9IGVsc2UgaWYgKGdldFRhcmdldFR5cGUoKSA9PSBYU0RlY2ltYWwuY2xhc3MpIHsKLQkJCXJldHVybiBuZXcgWFNEZWNpbWFsKHZhbHVlLnN0cmluZ192YWx1ZSgpKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IHN1YnN0aXR1dGUoQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IHR5cGVUb0NvbnNpZGVyKSB7Ci0JCWlmICh0eXBlVG9Db25zaWRlciA9PSBYU1VudHlwZWRBdG9taWMuY2xhc3MpIHJldHVybiBYU0RvdWJsZS5jbGFzczsKLQkJaWYgKGlzRGVyaXZlZEZyb20odHlwZVRvQ29uc2lkZXIsIFhTRmxvYXQuY2xhc3MpKSByZXR1cm4gWFNGbG9hdC5jbGFzczsKLQkJaWYgKGlzRGVyaXZlZEZyb20odHlwZVRvQ29uc2lkZXIsIFhTRG91YmxlLmNsYXNzKSkgcmV0dXJuIFhTRG91YmxlLmNsYXNzOwotCQlpZiAoaXNEZXJpdmVkRnJvbSh0eXBlVG9Db25zaWRlciwgWFNJbnRlZ2VyLmNsYXNzKSkgcmV0dXJuIFhTSW50ZWdlci5jbGFzczsKLQkJaWYgKGlzRGVyaXZlZEZyb20odHlwZVRvQ29uc2lkZXIsIFhTRGVjaW1hbC5jbGFzcykpIHJldHVybiBYU0RlY2ltYWwuY2xhc3M7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0Rlcml2ZWRGcm9tKENsYXNzPD8gZXh0ZW5kcyBBbnlUeXBlPiB0eXBlVG9Db25zaWRlciwgQ2xhc3M8PyBleHRlbmRzIEFueVR5cGU+IHN1cGVyVHlwZSkgewotCQlyZXR1cm4gc3VwZXJUeXBlLmlzQXNzaWduYWJsZUZyb20odHlwZVRvQ29uc2lkZXIpOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvU2NhbGFyVHlwZVByb21vdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1NjYWxhclR5cGVQcm9tb3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTc3ZDgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvU2NhbGFyVHlwZVByb21vdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEplc3BlciBTdGVlbiBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RheVRpbWVEdXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNZZWFyTW9udGhEdXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFNjYWxhclR5cGVQcm9tb3RlciBleHRlbmRzIE51bWVyaWNUeXBlUHJvbW90ZXIgewotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tDb21iaW5hdGlvbihDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gbmV3VHlwZSkgewotCi0JCUNsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0YXJnZXRUeXBlID0gZ2V0VGFyZ2V0VHlwZSgpOwotCQlpZiAodGFyZ2V0VHlwZSA9PSBYU0RheVRpbWVEdXJhdGlvbi5jbGFzcyB8fCB0YXJnZXRUeXBlID09IFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MpIHsKLQkJCXJldHVybiB0YXJnZXRUeXBlID09IG5ld1R5cGU7CQotCQl9Ci0JCXJldHVybiBzdXBlci5jaGVja0NvbWJpbmF0aW9uKG5ld1R5cGUpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gc3Vic3RpdHV0ZShDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gdHlwZVRvQ29uc2lkZXIpIHsKLQkJaWYgKHR5cGVUb0NvbnNpZGVyID09IFhTRGF5VGltZUR1cmF0aW9uLmNsYXNzIHx8IHR5cGVUb0NvbnNpZGVyID09IFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MpIHsKLQkJCXJldHVybiB0eXBlVG9Db25zaWRlcjsKLQkJfQotCi0JCXJldHVybiBzdXBlci5zdWJzdGl0dXRlKHR5cGVUb0NvbnNpZGVyKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1N0cmluZ0NvZGVQb2ludEl0ZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1N0cmluZ0NvZGVQb2ludEl0ZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MDliM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9TdHJpbmdDb2RlUG9pbnRJdGVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczsKLQotcHVibGljIGZpbmFsIGNsYXNzIFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIGltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IKLXsKLSAgICBwcml2YXRlIFN0cmluZyB0ZXh0OwotICAgIHByaXZhdGUgaW50IGVuZDsKLSAgICAvLyBpbnZhcmlhbnQ6IDAgPD0gcG9zIDw9IGVuZAotICAgIHByaXZhdGUgaW50IHBvczsKLQlwcml2YXRlIGludCBjcFBvczsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gaXRlcmF0b3Igd2l0aCBhbiBpbml0aWFsIGluZGV4IG9mIDAuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKFN0cmluZyB0ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOwotICAgICAgICAKLSAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgICAgICAgdGhpcy5lbmQgPSB0ZXh0Lmxlbmd0aCgpOwotICAgICAgICBpZiAoZW5kID4gMCAmJiBDaGFyYWN0ZXIuaXNIaWdoU3Vycm9nYXRlKHRleHQuY2hhckF0KGVuZC0xKSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIFVURi0xNiBzZXF1ZW5jZSBlbmRpbmcgd2l0aCBhIGhpZ2ggc3Vycm9nYXRlIik7Ci0gICAgICAgCi0gICAgICAgIHRoaXMucG9zID0gMDsKLSAgICAgICAgdGhpcy5jcFBvcyA9IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzZXQgdGhpcyBpdGVyYXRvciB0byBwb2ludCB0byBhIG5ldyBzdHJpbmcuICBUaGlzIHBhY2thZ2UtdmlzaWJsZQotICAgICAqIG1ldGhvZCBpcyB1c2VkIGJ5IG90aGVyIGphdmEudGV4dCBjbGFzc2VzIHRoYXQgd2FudCB0byBhdm9pZCBhbGxvY2F0aW5nCi0gICAgICogbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIG9iamVjdHMgZXZlcnkgdGltZSB0aGVpciBzZXRUZXh0IG1ldGhvZAotICAgICAqIGlzIGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSAgdGV4dCAgIFRoZSBTdHJpbmcgdG8gYmUgaXRlcmF0ZWQgb3ZlcgotICAgICAqIEBzaW5jZSAxLjIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KSB7Ci0gICAgICAgIGlmICh0ZXh0ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgICAgICAgdGhpcy5lbmQgPSB0ZXh0Lmxlbmd0aCgpOwotICAgICAgICB0aGlzLnBvcyA9IDA7Ci0gICAgICAgIHRoaXMuY3BQb3MgPSAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IuZmlyc3QoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjZmlyc3QKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGZpcnN0KCkKLSAgICB7Ci0gICAgICAgIHBvcyA9IDA7Ci0gICAgICAgIGNwUG9zID0gMDsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLmxhc3QoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjbGFzdAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgbGFzdCgpCi0gICAgewotICAgICAgICBwb3MgPSBlbmQ7Ci0gICAgICAgIGNwUG9zID0gQ2hhcmFjdGVyLmNvZGVQb2ludENvdW50KHRleHQsIDAsIHBvcyk7Ci0gICAgICAgIHJldHVybiBwcmV2aW91cygpOwotICAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLmN1cnJlbnQoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjY3VycmVudAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgY3VycmVudCgpCi0gICAgewotICAgICAgICBpZiAocG9zIDwgZW5kKSB7Ci0gICAgICAgICAgICBjaGFyIGNoMSA9ICB0ZXh0LmNoYXJBdChwb3MpOwotICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5pc0hpZ2hTdXJyb2dhdGUoY2gxKSkgcmV0dXJuIENoYXJhY3Rlci50b0NvZGVQb2ludChjaDEsIHRleHQuY2hhckF0KHBvcysxKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2gxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIERPTkU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLm5leHQoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjbmV4dAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgbmV4dCgpCi0gICAgewotICAgICAgICBpZiAocG9zIDwgZW5kIC0gMSkgewotICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzTG93U3Vycm9nYXRlKHRleHQuY2hhckF0KHBvcykpKSBwb3MrKzsKLSAgICAgICAgICAgIGNwUG9zKys7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAJcG9zID0gZW5kOwotICAgICAgICAgICAgcmV0dXJuIERPTkU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLnByZXZpb3VzKCkgZm9yIFN0cmluZy4KLSAgICAgKiBAc2VlIENvZGVQb2ludEl0ZXJhdG9yI3ByZXZpb3VzCi0gICAgICovCi0gICAgcHVibGljIGludCBwcmV2aW91cygpCi0gICAgewotICAgICAgICBpZiAocG9zID4gMCkgewotICAgICAgICAgICAgcG9zLS07Ci0gICAgICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzTG93U3Vycm9nYXRlKHRleHQuY2hhckF0KHBvcykpKSBwb3MtLTsgCi0gICAgICAgICAgICBjcFBvcy0tOwotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBET05FOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5nZXRJbmRleCgpIGZvciBTdHJpbmcuCi0gICAgICogQHNlZSBDb2RlUG9pbnRJdGVyYXRvciNnZXRJbmRleAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNwUG9zOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXBhcmVzIHRoZSBlcXVhbGl0eSBvZiB0d28gU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0cy4KLSAgICAgKiBAcGFyYW0gb2JqIHRoZSBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvYmplY3QgdG8gYmUgY29tcGFyZWQgd2l0aC4KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIG9iaiBpcyB0aGUgc2FtZSBhcyB0aGlzCi0gICAgICogU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0OyBmYWxzZSBvdGhlcndpc2UuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0gICAgewotICAgICAgICBpZiAodGhpcyA9PSBvYmopCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIHRoYXQgPSAoU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IpIG9iajsKLQotICAgICAgICBpZiAoaGFzaENvZGUoKSAhPSB0aGF0Lmhhc2hDb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghdGV4dC5lcXVhbHModGhhdC50ZXh0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHBvcyAhPSB0aGF0LnBvcyB8fCBlbmQgIT0gdGhhdC5lbmQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXB1dGVzIGEgaGFzaGNvZGUgZm9yIHRoaXMgaXRlcmF0b3IuCi0gICAgICogQHJldHVybiBBIGhhc2ggY29kZQotICAgICAqLwotICAgIEBPdmVycmlkZQotCXB1YmxpYyBpbnQgaGFzaENvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRleHQuaGFzaENvZGUoKSBeIHBvcyBeIGVuZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGl0ZXJhdG9yLgotICAgICAqIEByZXR1cm4gQSBjb3B5IG9mIHRoaXMKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvdGhlcgotICAgICAgICAgICAgPSAoU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IpIHN1cGVyLmNsb25lKCk7Ci0gICAgICAgICAgICByZXR1cm4gb3RoZXI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvVHlwZVByb21vdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1R5cGVQcm9tb3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWQ3NDNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvVHlwZVByb21vdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEplc3BlciBTdGVlbiBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGF2Zy9taW4vbWF4L3N1bSB3b3JrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLQotLyoqCi0gKiBHZW5lcmljIHR5cGUgcHJvbW90ZXIgZm9yIGhhbmRsaW5nIHN1YnR5cGUgc3Vic3RpdHV0aW9uIGFuZCB0eXBlIHByb21vdGlvbnMgZm9yIGZ1bmN0aW9ucyBhbmQgb3BlcmF0b3JzLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHlwZVByb21vdGVyIHsKLQlwcml2YXRlIENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0YXJnZXRUeXBlID0gbnVsbDsKLQotCWFic3RyYWN0IHB1YmxpYyBBbnlBdG9taWNUeXBlIGRvUHJvbW90ZShBbnlBdG9taWNUeXBlIHZhbHVlKSB0aHJvd3MgRHluYW1pY0Vycm9yOwkKLQotCXB1YmxpYyBmaW5hbCBBbnlBdG9taWNUeXBlIHByb21vdGUoQW55VHlwZSB2YWx1ZSkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIFRoaXMgaXMgYSBzaG9ydCBjdXQsIHJlYWxseQotCQlpZiAodmFsdWUuZ2V0Q2xhc3MoKSA9PSBnZXRUYXJnZXRUeXBlKCkpIHJldHVybiAoQW55QXRvbWljVHlwZSl2YWx1ZTsKLQotCQlyZXR1cm4gZG9Qcm9tb3RlKGF0b21pemUodmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdHlwZVRvQ29uc2lkZXIgVGhlIAotCSAqIEByZXR1cm4gVGhlIHN1cGVydHlwZSB0byB0cmVhdCBpdCBhcyAoaS5lLiBpZiBhIHhzOm5vbk5lZ2F0aXZlSW50ZWdlciBpcyB0cmVhdGVkIGFzIHhzOm51bWJlcikKLQkgKi8KLQlhYnN0cmFjdCBwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IHN1YnN0aXR1dGUoQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IHR5cGVUb0NvbnNpZGVyKTsJCi0KLQlhYnN0cmFjdCBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja0NvbWJpbmF0aW9uKENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiBuZXdUeXBlKTsKLQkJCi0JcHVibGljIHZvaWQgY29uc2lkZXJUeXBlKENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0eXBlVG9Db25zaWRlcikgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiBiYXNlVHlwZSA9IHN1YnN0aXR1dGUodHlwZVRvQ29uc2lkZXIpOwotCQkKLQkJaWYgKGJhc2VUeXBlID09IG51bGwpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5hcmd1bWVudF90eXBlX2Vycm9yKHR5cGVUb0NvbnNpZGVyKTsKLQkJfQotCQkKLQkJaWYgKHRhcmdldFR5cGUgPT0gbnVsbCkgewotCQkJdGFyZ2V0VHlwZSA9IGJhc2VUeXBlOwotCQl9IGVsc2UgewotCQkJaWYgKCEgY2hlY2tDb21iaW5hdGlvbihiYXNlVHlwZSkpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuYXJndW1lbnRfdHlwZV9lcnJvcih0eXBlVG9Db25zaWRlcik7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgY29uc2lkZXJUeXBlcyhDb2xsZWN0aW9uPENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPj4gdHlwZXNUb0NvbnNpZGVyKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJZm9yIChDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gdHlwZSA6IHR5cGVzVG9Db25zaWRlcikgewotCQkJY29uc2lkZXJUeXBlKHR5cGUpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNvbnNpZGVyU2VxdWVuY2UoUmVzdWx0U2VxdWVuY2Ugc2VxdWVuY2VUb0NvbnNpZGVyKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXF1ZW5jZVRvQ29uc2lkZXIuc2l6ZSgpOyArK2kpIHsKLQkJCUFueVR5cGUgaXRlbSA9IHNlcXVlbmNlVG9Db25zaWRlci5nZXQoaSk7Ci0JCQljb25zaWRlclZhbHVlKGl0ZW0pOwotCQl9Ci0JfQotCQotCXB1YmxpYyBDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gZ2V0VGFyZ2V0VHlwZSgpIHsKLQkJcmV0dXJuIHRhcmdldFR5cGU7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldFR5cGUoQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IGNsYXNzMSkgewotCQl0aGlzLnRhcmdldFR5cGUgPSBjbGFzczE7Ci0JfQotCi0JcHVibGljIEFueUF0b21pY1R5cGUgYXRvbWl6ZShBbnlUeXBlIGF0KSB7Ci0JCWlmIChhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQlyZXR1cm4gKEFueUF0b21pY1R5cGUpKChOb2RlVHlwZSlhdCkudHlwZWRfdmFsdWUoKS5maXJzdCgpOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIChBbnlBdG9taWNUeXBlKWF0OwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNvbnNpZGVyVmFsdWUoQW55VHlwZSBhdCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWNvbnNpZGVyVHlwZShhdG9taXplKGF0KS5nZXRDbGFzcygpKTsKLQl9Ci0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3N5bS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3ltLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YmE4NmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3ltLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IENVUCB2MC4xMGsKLS8vIEZyaSBKdWwgMDMgMDY6MTk6MjggR01UIDIwMDkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqIENVUCBnZW5lcmF0ZWQgY2xhc3MgY29udGFpbmluZyBzeW1ib2wgY29uc3RhbnRzLiAqLwotcHVibGljIGNsYXNzIHN5bSB7Ci0gIC8qIHRlcm1pbmFscyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDRU5EQU5UX09SX1NFTEYgPSAzMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVMgPSA1NjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1QgPSA0NTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9MTE9XSU5HID0gMzQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUldBUkRfU0xBU0hTTEFTSCA9IDE5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJFTlQgPSAzNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0UgPSA0NjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9DVU1FTlRfTk9ERSA9IDc1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOQU1FU1BBQ0UgPSAzNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9SV0FSRF9TTEFTSCA9IDE4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkVBVCA9IDU1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT0RFID0gNzQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1BID0gMjQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFOQ0VTVE9SID0gMzc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExUID0gNDM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVEVHRVIgPSA4MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9VQkxFID0gODM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENISUxEID0gMjg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTExPV0lOR19TSUJMSU5HID0gMzM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRVJZID0gNjY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFTEYgPSAzMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEUgPSA0NDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUxFTUVOVCA9IDgwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURVhUID0gNzY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTkNFID0gNTM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PVEVRVUFMUyA9IDExOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSEVOID0gNjg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDSEVNQV9FTEVNRU5UID0gODE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDSEVNQV9BVFRSSUJVVEUgPSA3OTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5DRVNUT1JfT1JfU0VMRiA9IDQwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUSA9IDQxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUkVDRURJTkcgPSAzOTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU1QVFkgPSA3MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9EID0gNDk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFUX1NZTSA9IDIxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET0xMQVIgPSAyNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVhDRVBUID0gNTI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFU1NUSEFOID0gMTI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBJUEUgPSA5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVNTRVFVQUwgPSAxMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFU1RJT05NQVJLID0gMjc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBMVVMgPSA2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRElWID0gNDg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExQQVIgPSA0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklPTiA9IDUwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkVBVEVSRVFVQUwgPSAxNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVDSU1BTCA9IDg0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1IgPSA2MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBUiA9IDg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVIgPSAxNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJFQ0VESU5HX1NJQkxJTkcgPSAzODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElWID0gNDc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFVFVSTiA9IDYyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTFNFID0gNjk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPVERPVCA9IDIyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET1QgPSAyNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU9GID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkNOQU1FID0gODY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1FTlQgPSA3NzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URVJTRUNUID0gNTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJQQVIgPSA1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJVEVNID0gNzM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBU1RBQkxFID0gNTc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElTID0gNTk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlVTID0gNzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPQ0VTU0lOR19JTlNUUlVDVElPTiA9IDc4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTiA9IDYxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUiA9IDcxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBlcnJvciA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFUVFJJQlVURSA9IDMwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRiA9IDY3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVNUID0gNTg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9GID0gNTQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTE9OID0gMjM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NFTkRBTlQgPSAyOTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09NRSA9IDY1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSQlJBQ0tFVCA9IDM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTE9OQ09MT04gPSAyMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1JFQVRFUl9HUkVBVEVSID0gMTc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUUklORyA9IDg1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQVRJU0ZJRVMgPSA2MzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5EID0gNzA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRPID0gNjQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExCUkFDS0VUID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkUgPSA0MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVTU19MRVNTID0gMTY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVRVUFMUyA9IDEwOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QxNTU1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQxOGYyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9hYm91dC5pbmkgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA5MGM4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMgYWJvdXQuaW5pCi0jIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZmVhdHVyZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyAiJWtleSIgYXJlIGV4dGVybmFsaXplZCBzdHJpbmdzIGRlZmluZWQgaW4gYWJvdXQucHJvcGVydGllcwotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0jIFByb3BlcnR5ICJhYm91dFRleHQiIGNvbnRhaW5zIGJsdXJiIGZvciAiQWJvdXQiIGRpYWxvZyAodHJhbnNsYXRlZCkKLWFib3V0VGV4dD0lYmx1cmIKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPWljb25zL1dUUF9pY29uX3gzMl92Mi5wbmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYWJvdXQubWFwcGluZ3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2Fib3V0Lm1hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjgzOTBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2Fib3V0LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2Fib3V0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZjMyYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9RWNsaXBzZSBYU0wgRGV2ZWxvcGVyIFRvb2xzXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodFxuXAotICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLFxuXAotICBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbClcblwKLSAgYW5kIG90aGVycyAyMDA4LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotXG5cCi1WaXNpdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY2ODUyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0LmluaSxcCi0gICAgICAgICAgICAgICBhYm91dC5tYXBwaW5ncyxcCi0gICAgICAgICAgICAgICBhYm91dC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjA5YzJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvaWNvbnMvV1RQX2ljb25feDMyX3YyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDhlODMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gRWNsaXBzZSBYUGF0aCAyIERldmVsb3BlcnMgVG9vbHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8uY2xhc3NwYXRoIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1NDVlZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjUzNWYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi10ZXN0LnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUxMDYxYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI3Zjk4Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNTYXQgQXVnIDE1IDAyOjI0OjM2IEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmEyNDI0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXZlbmRvck5hbWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzAwMDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkF1Z3VzdCwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc0ZWQ5ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBodG1sLyxcCi0gICAgICAgICAgICAgICB0b2MueG1sCi1zcmMuaW5jbHVkZXMgPSBidWlsZERvYy54bWwsXAotICAgICAgICAgICAgICAgYnVpbGQucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBkb2Nib29rLyxcCi0gICAgICAgICAgICAgICBodG1sLyxcCi0gICAgICAgICAgICAgICB0b2MueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgbWVkaWF3aWtpLwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYnVpbGREb2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYnVpbGREb2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjQ5ZmUwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2J1aWxkRG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgIEF1ZyAxNSwgMjAwOSAyOjI3OjA1IEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICBYUGF0aCAyLjAgUHJvY2Vzc29yIERvY3VtZW50YXRpb24gR2VuZXJhdG9yICAgIAotICAgICBUaGlzIHdpbGwgdGFrZSBhIHNuYXBzaG90IG9mIHRoZSBmaWxlcyBvbiB0aGUgd2lraSwgdGhhdCBhcmUgaW4gd2lraSB0ZXh0IGFuZCBnZW5lcmF0ZSB0aGUKLSAgICAgZG9jYm9vayBkb2N1bWVudHMgCi0gICAgICAgICAgICAgICAgICAgCi0gICAgIGRjYXJ2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08cHJvamVjdCBuYW1lPSJYUGF0aCAyLjAgUHJvY2Vzc29yIERvY3VtZW50YXRpb24gR2VuZXJhdG9yIiBkZWZhdWx0PSJnZXR3aWtpdGV4dCI+Ci0JPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgVGhpcyB3aWxsIHRha2UgYSBzbmFwc2hvdCBvZiB0aGUgZmlsZXMgb24gdGhlIHdpa2ksIHRoYXQgYXJlIGluIHdpa2kgdGV4dCBhbmQgZ2VuZXJhdGUgdGhlIAotICAgIDwvZGVzY3JpcHRpb24+Ci0JCi0JPHByb3BlcnR5IG5hbWU9ImN1cnJlbnQtbG9jIiBsb2NhdGlvbj0iLiIgLz4KLQk8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlIiBsb2NhdGlvbj0iLi4iIC8+Ci0JPHByb3BlcnR5IG5hbWU9Imh0bWxkaXIiIHZhbHVlPSIke2N1cnJlbnQtbG9jfS9odG1sIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJkb2Nib29rZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9L0RvY0Jvb2tYU0wvZWNsaXBzZSIgLz4KLQk8cHJvcGVydHkgbmFtZT0iZG9jYm9va3NvdXJjZSIgdmFsdWU9IiR7Y3VycmVudC1sb2N9L2RvY2Jvb2siLz4KLQk8cHJvcGVydHkgbmFtZT0ieGFsYW4iIHZhbHVlPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIiAvPgotCi0JPCEtLSBYU0xUIENodW5raW5nIFByb3BlcnRpZXMgLS0+Ci0JPHByb3BlcnR5IG5hbWU9ImJhc2UuZGlyIiB2YWx1ZT0iJHtodG1sZGlyfSIvPgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICAgICAgdGFyZ2V0OiBkZWZhdWx0ICAgICAgICAgICAgICAKLSAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImdldHdpa2l0ZXh0Ij4KLQkJPGdldCBkZXN0PSJtZWRpYXdpa2kvdXNlcm1hbnVhbC91c2VybWFudWFsLm1lZGlhd2lraSIgc3JjPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9pbmRleC5waHA/dGl0bGU9UHN5Y2hvUGF0aFhQYXRoUHJvY2Vzc29yL1VzZXJNYW51YWwmYW1wO2FjdGlvbj1yYXciIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAKLSAgICAgICAgICB0YXJnZXQ6IGRlcGVuZHMgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLS0+Ci0JPHRhcmdldCBuYW1lPSJjb252ZXJ0IiBkZXBlbmRzPSJnZXR3aWtpdGV4dCI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJ3aWtpdGV4dC5zdGFuZGFsb25lIiBsb2NhdGlvbj0ibGliL3BsdWdpbnMiIC8+Ci0JCTwhLS0gcGF0aCB0byB3aWtpdGV4dCBzdGFuZGFsb25lIHBhY2thZ2UgLS0+Ci0KLQkJPHBhdGggaWQ9Indpa2l0ZXh0LmNsYXNzcGF0aCI+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7d2lraXRleHQuc3RhbmRhbG9uZX0iPgotCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0Lipjb3JlKi5qYXIiIC8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvcGF0aD4KLQotCQk8dGFza2RlZiBjbGFzc3BhdGhyZWY9Indpa2l0ZXh0LmNsYXNzcGF0aCIgcmVzb3VyY2U9Im9yZy9lY2xpcHNlL215bHluL3dpa2l0ZXh0L2NvcmUvdXRpbC9hbnR0YXNrL3dpa2l0ZXh0LXRhc2tzLnByb3BlcnRpZXMiIC8+Ci0KLQkJPHdpa2l0ZXh0LXRvLWRvY2Jvb2sgbWFya3VwTGFuZ3VhZ2U9Ik1lZGlhV2lraSI+Ci0JCQk8ZmlsZXNldCBkaXI9Im1lZGlhd2lraSI+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iKiovKi5tZWRpYXdpa2kiIC8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvd2lraXRleHQtdG8tZG9jYm9vaz4KLQotPCEtLQkJPHdpa2l0ZXh0LXRvLWVjbGlwc2UtaGVscCBtYXJrdXBMYW5ndWFnZT0iTWVkaWFXaWtpIiAKLQkJCW11bHRpcGxlT3V0cHV0RmlsZXM9InRydWUiCi0JCQluYXZpZ2F0aW9uSW1hZ2VzPSJ0cnVlIgotCQkJaGVscFByZWZpeD0iaHRtbCI+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iPgotICAgIAkJCQk8aW5jbHVkZSBuYW1lPSJtZWRpYXdpa2kvKiovKi5tZWRpYXdpa2kiLz4KLQkJCTwvZmlsZXNldD4KLQkJCTxzdHlsZXNoZWV0IHVybD0ic3R5bGVzL2hlbHAuY3NzIi8+Ci0JCQk8c3R5bGVzaGVldCB1cmw9InN0eWxlcy9tYWluLmNzcyIvPgotCQk8L3dpa2l0ZXh0LXRvLWVjbGlwc2UtaGVscD4KLS0tPgkJCi0KLQk8L3RhcmdldD4KLQotCTx0YXJnZXQgbmFtZT0iY3JlYXRlLWRvYyI+Ci0KLQkJPHhzbHQgZm9yY2U9InRydWUiIHN0eWxlPSIke2RvY2Jvb2tkaXJ9L2VjbGlwc2UzMy54c2wiIGluPSIke2RvY2Jvb2tzb3VyY2V9L3VzZXJtYW51YWwueG1sIiBvdXQ9InRlc3QueG1sIj4KLQkJCTxmYWN0b3J5IG5hbWU9IiR7eGFsYW59IiAvPgotCQkJPHBhcmFtIG5hbWU9Im1hbmlmZXN0IiBleHByZXNzaW9uPSIxIi8+Ci0JCQk8cGFyYW0gbmFtZT0iYmFzZS5kaXIiIGV4cHJlc3Npb249IiR7aHRtbGRpcn0vIi8+Ci0JCQk8cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIGV4cHJlc3Npb249IjAiLz4KLQkJCTxwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIGV4cHJlc3Npb249InllcyIvPgotCQkJPHBhcmFtIG5hbWU9Im5hdmlnLnNob3d0aXRsZXMiIGV4cHJlc3Npb249IjAiLz4KLQkJCTxwYXJhbSBuYW1lPSJzdXBwcmVzcy5uYXZpZ2F0aW9uIiBleHByZXNzaW9uPSIxIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZ2VuZXJhdGUudG9jIiBleHByZXNzaW9uPSJib29rICAgICAgdG9jLHRpdGxlCi1jaGFwdGVyICAgdG9jLHRpdGxlCi1zZWN0aW9uICAgdGl0bGUiIC8+Ci0JCQk8cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIGV4cHJlc3Npb249IjAiLz4KLQkJCTxwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgZXhwcmVzc2lvbj0iMCIvPgotCQkJPHBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgZXhwcmVzc2lvbj0iYm9vay5jc3MgLi4vYm9vay5jc3MiLz4KLQkJCTxwYXJhbSBuYW1lPSJjaHVuay5zZWN0aW9uLmRlcHRoIiBleHByZXNzaW9uPSIzIi8+Ci0JCQk8cGFyYW0gbmFtZT0idG9jLnNlY3Rpb24uZGVwdGgiIGV4cHJlc3Npb249IjUiLz4KLQkJCTxwYXJhbSBuYW1lPSJ0b2MubGlzdC50eXBlIiBleHByZXNzaW9uPSJ1bCIvPgotCQk8L3hzbHQ+Ci0JCQotCQk8cmVwbGFjZSBmaWxlPSIke2N1cnJlbnQtbG9jfS90b2MueG1sIiB0b2tlbj0iJHtjdXJyZW50LWxvY30vIiB2YWx1ZT0iIi8+Ci0JPC90YXJnZXQ+Ci0JCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9kb2Nib29rL3VzZXJtYW51YWwueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvZG9jYm9vay91c2VybWFudWFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNhZjU3OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9kb2Nib29rL3VzZXJtYW51YWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI5MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgotImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41L2RvY2Jvb2t4LmR0ZCI+Ci08Ym9vaz4KLSAgPHRpdGxlPlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWw8L3RpdGxlPgotCi0gIDxjaGFwdGVyIGlkPSJJbnRyb2R1Y3Rpb24iPgotICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotCi0gICAgPHBhcmE+V2hhdCBpcyBQc3ljaG9oUGF0aD8gUHN5Y2hvUGF0aCBpcyBhIFhQYXRoIDIuMCBYTUwgU2NoZW1hIEF3YXJlCi0gICAgcHJvY2Vzc29yLiBJdCBpcyBuZWFybHkgZnVsbHkgY29tcGxpYW50IHRvIHRoZSBYUGF0aCAyLjAgdGVzdCBzdWl0ZS4gSXQgaXMKLSAgICBhIGxpYnJhcnkgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGVjbGlwc2UgdG8gYmUgdXNlZC4gS25vd24gYWRvcHRlcnMgb2YKLSAgICBQc3ljaG9QYXRoIGluY2x1ZGUgdGhlIFhlcmNlcy1KIHByb2plY3QgZm9yIFhNTCBTY2hlbWFzIDEuMSBhc3NlcnRpb24KLSAgICBzdXBwb3J0LjwvcGFyYT4KLQotICAgIDxwYXJhPlBzeWNob1BhdGggaXMgdGhlIG9ubHkga25vd24gb3Blbi1zb3VyY2UgamF2YSBYUGF0aCAyLjAgcHJvY2Vzc29yCi0gICAgdGhhdCBpcyBmdWxseSBzY2hlbWEgYXdhcmUuIFNBWE9OIEhFIG9ubHkgc3VwcG9ydHMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KLSAgICBYTUwgU2NoZW1hIGF3YXJuZXNzIHByb3ZpZGVzIHRpZ2h0ZXIgc3RhdGljIGNoZWNraW5nLCBhbmQgY2FuIGJlIHVzZWQgdG8KLSAgICBoZWxwIGRldGVybWluZSBpZiBjZXJ0YWluIG9wZXJhdGlvbnMgY2FuIG9yIHNob3VsZCBvY2N1ciBvbiBhbiBYTUwgbm9kZS4KLSAgICBGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgUHN5Y2hvUGF0aCdzIGRlc2lnbiBwbGVhc2Ugc2VlIHRoZQotICAgIDx1bGluayB1cmw9Ii9Qc3ljaG9QYXRoWFBhdGhQcm9jZXNzb3IvRGVzaWduIj5kZXNpZ248L3VsaW5rPgotICAgIGRvY3VtZW50LjwvcGFyYT4KLQotICAgIDxzZWN0aW9uIGlkPSJHZXR0aW5nX1BzeWNob1BhdGgiPgotICAgICAgPHRpdGxlPkdldHRpbmcgUHN5Y2hvUGF0aDwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPkN1cnJlbnRseSB0aGVyZSBpcyBubyBzdGFuZGFsb25lIGJ1aWxkIG9mIFBzeWNob1BhdGguIEhvd2V2ZXIsIHlvdQotICAgICAgY2FuIGRvd25sb2FkIHRoZSA8dWxpbmsKLSAgICAgIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL2Rvd25sb2Fkcy9kcm9wcy9SMy4xL1ItMy4xLTIwMDkwNjE2MDM1MTA1LyI+V1RQCi0gICAgICBXU1QgMy4xPC91bGluaz4gemlwIGZpbGUsIGFuZCB1c2UgdGhlCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuamFyIGZpbGUuIFRoaXMgamFyIGhhcyBubwotICAgICAgZGVwZW5kZW5jaWVzIG9uIGVjbGlwc2UsIGFuZCB3aWxsIHdvcmsgYXMgYSBzdGFuZGFyZCBqYXIgZmlsZS4gSWYgeW91Ci0gICAgICBhcmUgdXNpbmcgYW4gT1NHSSBjb250YWluZXIsIHRoZW4gdGhpcyBpcyB0cmVhdGVkIGFzIGEgc3RhbmRhcmQgT1NHSQotICAgICAgYnVuZGxlLjwvcGFyYT4KLQotICAgICAgPHRpcD4KLSAgICAgICAgPHRpdGxlPlBzeWNob1BhdGggMS4xTTE8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPlBzeWNob1BhdGggMS4xTTEgaXMgYWxzbyBhdmFpbGFibGUgdG8gPHVsaW5rCi0gICAgICAgIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL2Rvd25sb2Fkcy9kcm9wcy9SMy4yL1MtMy4yTTFiLTIwMDkwODE0MTQzNTE5LyI+ZG93bmxvYWQ8L3VsaW5rPi4KLSAgICAgICAgMS4xTTEgcGFzc2VzIDk2JSBvZiB0aGUgWFBhdGggMi4wIHRlc3Qgc3VpdGUuPC9wYXJhPgotICAgICAgPC90aXA+Ci0KLSAgICAgIDxwYXJhPkFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHlvdSBjdXJyZW50bHkgbmVlZCBhcmU6PC9wYXJhPgotCi0gICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+SUJNIElDVSA0LjAgb3IgZ3JlYXRlcjwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+WGVyY2VzIDIuOC4wIG9yIGdyZWF0ZXI8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPkphdmFDdXAgMC4xMCBvciBncmVhdGVyLjwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotCi0gICAgICA8cGFyYT5JZiB1c2luZyBlY2xpcHNlLCB0aGVzZSBhcmUgYWxsIGF2YWlsYWJsZSBmcm9tIHRoZSBPcmJpdCBwcm9qZWN0LgotICAgICAgT3RoZXJzIGNhbiBmaW5kIHRoZSBuZWNlc3NhcnkgamFycyBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgcHJvamVjdAotICAgICAgcGFnZXMuPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJIb3dfdG9fZmVlZF9Qc3ljaG9wYXRoX1hQYXRoX2V4cHJlc3Npb25zIj4KLSAgICA8dGl0bGU+VXNpbmcgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgQVBJPC90aXRsZT4KLQotICAgIDxwYXJhPlNpbmNlIFBzeWNob1BhdGggaGFzIGJlZW4gaW1wbGVtZW50ZWQgYXMgYW4gZXh0ZXJuYWwgbGlicmFyeSBhbmQgbm90Ci0gICAgYXMgYSBjb21wbGV0ZSBwcm9ncmFtLCBpbiBvcmRlciB0byB1c2UgaXQsIGl0IG5lZWRzIHRvIGJlIGFjY2Vzc2VkIGZyb20KLSAgICBpbnNpZGUgYW5vdGhlciBwcm9ncmFtLiBUbyBwcm9jZXNzIFhQYXRoIDIuMCBleHByZXNzaW9ucyB1c2luZyBQc3ljaG9QYXRoCi0gICAgZnJvbSBhbm90aGVyIHByb2dyYW1zIG9uZSBuZWVkcyB0byBnbyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcKLSAgICBwcm9jZXNzOjwvcGFyYT4KLQotICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+TG9hZCB0aGUgWE1MIGRvY3VtZW50PC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT5PcHRpb25hbGx5IHZhbGlkYXRlIHRoZSBYTUwgZG9jdW1lbnQ8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotCi0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPkluaXRpYWxpemUgc3RhdGljIGFuZCBkeW5hbWljIGNvbnRleHQgaW4gcmVzcGVjdCB0byB0aGUgZG9jdW1lbnQKLSAgICAgICAgcm9vdDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+UGFyc2UgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT5TdGF0aWNhbGx5IHZlcmlmeSB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb248L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotCi0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPkV2YWx1YXRlIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiBpbiByZXNwZWN0IHRvIHRoZSBYTUwKLSAgICAgICAgZG9jdW1lbnQ8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICA8cGFyYT5UbyBnaXZlIGEgYmV0dGVyIGlkZWEgb2YgaG93IHRoaXMgcHJvY2VzcyBhY3R1YWxseSB3b3Jrcywgd2XigJlsbCBnbwotICAgIHRocm91Z2ggYW4gZXhhbXBsZSBvZiBwcm9jZXNzaW5nIGFuZCBldmFsdWF0aW5nIHRoZSBzdHJpbmcgZXhwcmVzc2lvbgotICAgIOKAnEhlbGxvIFdvcmxkIeKAnS4gSW4gdGhpcyBleGFtcGxlIHRoZSBYTUwgZG9jdW1lbnQgdGhhdCB3ZSBsb2FkIGlzIGNhbGxlZAotICAgIOKAnFhQZXhhbXBsZS54bWzigJ0uPC9wYXJhPgotCi0gICAgPHNlY3Rpb24gaWQ9Ik5vbi1TY2hlbWFfQXdhcmUiPgotICAgICAgPHRpdGxlPk5vbi1TY2hlbWEgQXdhcmU8L3RpdGxlPgotCi0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+LyoqCi0gKiBGaXJzdCBsb2FkIGFuZCBvcHRpb25hbGx5IHZhbGlkYXRlIHRoZSBYTUwgZG9jdW1lbnQgCi0qLwotLy8gQ3JlYXRlIGFuIElucHV0U3RyZWFtIGZyb20gdGhlIFhNTCBkb2N1bWVudAotSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKOKAnFhQZXhhbXBsZS54bWzigJ0pOwotCi0vLyBJbml0aWFsaXppbmcgdGhlIFhlcmNlcyBET00gbG9hZGVyLgotRE9NTG9hZGVyIGxvYWRlciA9IG5ldyBYZXJjZXNMb2FkZXIoKTsKLQotLy8gT3B0aW9uYWxseSBzZXQgZmxhZyB0byB2YWxpZGF0ZSBYTUwgZG9jdW1lbnQgbG9hZGVyLnNldHZhbGlkYXRpbmcodmFsaWRhdGUpOwotLy8gTG9hZHMgdGhlIFhNTCBkb2N1bWVudCBhbmQgc3RvcmVzIHRoZSBET00gcm9vdAotRG9jdW1lbnQgZG9jID0gbG9hZGVyLmxvYWQoaXMpOwotCi0vKioKLSAqIER5bmFtaWMgY29udGV4dHMgbXVzdCBiZSBpbml0aWFsaXNlZCB0byBkZWZhdWx0cwotICogZGVwZW5kZW50IG9uIHRoZSBYTUwgU2NoZW1hLgotKi8KLQotLy8gRXh0cmFjdGluZyB0aGUgc2NoZW1hIGZyb20gRE9NIHJvb3Qgb2YgWHBleHByZXNzaW9uLnhtbC4KLUVsZW1lbnRQU1ZJIHJvb3RQU1ZJID0gKEVsZW1lbnRQU1ZJKWRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLVhTTW9kZWwgc2NoZW1hID0gcm9vdFBTVkkuZ2V0U2NoZW1hSW5mb3JtYXRpb24oKTsKLQotLy8gSW5pdGlhbGlzaW5nIHRoZSBEeW5hbWljQ29udGV4dC4KLUR5bmFtaWNDb250ZXh0IGRjID0gbmV3IERlZmF1bHREeW5hbWljQ29udGV4dChzY2hlbWEsIGRvYyk7Ci0KLS8vIFJlZ2lzdGVyIHRoZSBuYW1lc3BhY2VzIG9mIHRoZSBYUGF0aCAyLjAgcHJlZGVmaW5lZCBkYXRhdHlwZXMKLWRjLmFkZG5hbWVzcGFjZSjigJx4c+KAnSzigJ1baHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEgaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWFd4oCdKTsKLQotLy8gUmVnaXN0ZXIgdGhlIFhQYXRoIDIuMCBzdGFuZGFyZCBmdW5jdGlvbnMKLWRjLmFkZGZ1bmN0aW9ubGlicmFyeShuZXcgRm5GdW5jdGlvbkxpYnJhcnkoKSk7Ci1kYy5hZGRmdW5jdGlvbmxpYnJhcnkobmV3IFhTQ3RyTGlicmFyeSgpKTsKLQotLyoqCi0gKiBQYXJzaW5nIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiBpbnRvIGFuIEFTVCByZXByZXNlbnRhdGlvbgotICovCi0vLyBJbml0aWFsaXNlcyBQc3ljaG9QYXRo4oCZcyBzdXBwbGllZCBwYXJzZXIuCi1YUGF0aFBhcnNlciB4cHAgPSBuZXcgSmZsZXhDdXBQYXJzZXIoKTsKLQotLy8gUGFyc2VzIHRoZSBYUGF0aCBleHByZXNzaW9uLgotWFBhdGggeHAgPSB4cHAucGFyc2UoeHBhdGgpOwotLyoqCi0gKiBTdGF0aWMgY2hlY2sgdGhlIEFTVCB0byB2ZXJpZnQgc3RydWN0dXJhbCB2YWxpZGl0eSBvZiAgCi0gKiBYUGF0aCAyLjAgZXhwcmVzc2lvbgotICovCi0KLS8vIEluaXRpYWxpemluZyBTdGF0aWNDaGVja2VyLgotU3RhdGljQ2hlY2tlciBuYW1lY2hlY2sgPSBuZXcgU3RhdGljTmFtZVJlc29sdmVyKHNjKTsKLQotLy8gU3RhdGljIENoZWNraW5nIHRoZSBYcGF0aCBleHByZXNzaW9uIOKAmUhlbGxvIFdvcmxkIeKAmSBuYW1lY2hlY2suY2hlY2soeHApOwotLyoqCi0gKiBFdmFsdWF0ZSB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24KLSAqLwotIAotLy8gSW5pdGlhbGl6aW5nIHRoZSBldmFsdWF0b3Igd2l0aCBEeW5hbWljQ29udGV4dCBhbmQgdGhlIG5hbWUKLS8vIG9mIHRoZSBYTUwgZG9jdW1lbnQgWFBleGFtcGxlLnhtbCBhcyBwYXJhbWV0ZXJzLgotRXZhbHVhdG9yIGV2YWwgPSBuZXcgRGVmYXVsdEV2YWx1YXRvcihkYywgZG9jKTsKLSAKLS8vIEV2YWx1YXRlcyB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24sIHN0b3JpbmcgdGhlIHJlc3VsdAotLy8gaW4gdGhlIFJlc3VsdFNlcXVlbmNlCi1SZXN1bHRTZXF1ZW5jZSBycyA9IGV2YWwuZXZhbHVhdGUoeHApOyAKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IlNjaGVtYV9Bd2FyZSI+Ci0gICAgICA8dGl0bGU+U2NoZW1hIEF3YXJlPC90aXRsZT4KLQotICAgICAgPHBhcmE+PC9wYXJhPgotCi0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+LyoqCi0gKiBGaXJzdCBsb2FkIGFuZCBvcHRpb25hbGx5IHZhbGlkYXRlIHRoZSBYTUwgZG9jdW1lbnQgCi0qLwotCi0gU2NoZW1hRmFjdG9yeSBzY2hlbWFGYWN0b3J5ID0gbmV3IFhNTFNjaGVtYUZhY3RvcnkoKTsKLSBVUkwgc2NoZW1hVVJMID0gbmV3IEZpbGUoIlhQZXhhbXBsZS54c2QiKS50b1VSTCgpOwotIFNjaGVtYSBqYXhwc2NoZW1hID0gc2NoZW1hRmFjdG9yeS5uZXdTY2hlbWEoc2NoZW1hVVJMKTsKLQotLy8gQ3JlYXRlIGFuIElucHV0U3RyZWFtIGZyb20gdGhlIFhNTCBkb2N1bWVudAotSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKOKAnFhQZXhhbXBsZS54bWzigJ0pOwotCi0vLyBJbml0aWFsaXppbmcgdGhlIFhlcmNlcyBET00gbG9hZGVyLgotRE9NTG9hZGVyIGxvYWRlciA9IG5ldyBYZXJjZXNMb2FkZXIoamF4cHNjaGVtYSk7Ci0KLS8vIE9wdGlvbmFsbHkgc2V0IGZsYWcgdG8gdmFsaWRhdGUgWE1MIGRvY3VtZW50IGxvYWRlci5zZXR2YWxpZGF0aW5nKHZhbGlkYXRlKTsKLS8vIExvYWRzIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHN0b3JlcyB0aGUgRE9NIHJvb3QKLURvY3VtZW50IGRvYyA9IGxvYWRlci5sb2FkKGlzKTsKLQotLyoqCi0gKiBEeW5hbWljIGNvbnRleHRzIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gZGVmYXVsdHMKLSAqIGRlcGVuZGVudCBvbiB0aGUgWE1MIFNjaGVtYS4KLSovCi0KLS8vIEluaXRpYWxpc2luZyB0aGUgRHluYW1pY0NvbnRleHQuCi1EeW5hbWljQ29udGV4dCBkYyA9IG5ldyBEZWZhdWx0RHluYW1pY0NvbnRleHQoamF4cHNjaGVtYSwgZG9jKTsKLQotLy8gUmVnaXN0ZXIgdGhlIG5hbWVzcGFjZXMgb2YgdGhlIFhQYXRoIDIuMCBwcmVkZWZpbmVkIGRhdGF0eXBlcwotZGMuYWRkbmFtZXNwYWNlKOKAnHhz4oCdLOKAnVtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSBodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYV3igJ0pOwotCi0vLyBSZWdpc3RlciB0aGUgWFBhdGggMi4wIHN0YW5kYXJkIGZ1bmN0aW9ucwotZGMuYWRkZnVuY3Rpb25saWJyYXJ5KG5ldyBGbkZ1bmN0aW9uTGlicmFyeSgpKTsKLWRjLmFkZGZ1bmN0aW9ubGlicmFyeShuZXcgWFNDdHJMaWJyYXJ5KCkpOwotCi0vKioKLSAqIFBhcnNpbmcgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uIGludG8gYW4gQVNUIHJlcHJlc2VudGF0aW9uCi0gKi8KLS8vIEluaXRpYWxpc2VzIFBzeWNob1BhdGjigJlzIHN1cHBsaWVkIHBhcnNlci4KLVhQYXRoUGFyc2VyIHhwcCA9IG5ldyBKZmxleEN1cFBhcnNlcigpOwotCi0vLyBQYXJzZXMgdGhlIFhQYXRoIGV4cHJlc3Npb24uCi1YUGF0aCB4cCA9IHhwcC5wYXJzZSh4cGF0aCk7Ci0KLS8qKgotICogU3RhdGljIGNoZWNrIHRoZSBBU1QgdG8gdmVyaWZ0IHN0cnVjdHVyYWwgdmFsaWRpdHkgb2YgIAotICogWFBhdGggMi4wIGV4cHJlc3Npb24KLSAqLwotCi0vLyBJbml0aWxpc2luZyBTdGF0aWNDaGVja2VyLgotU3RhdGljQ2hlY2tlciBuYW1lY2hlY2sgPSBuZXcgU3RhdGljTmFtZVJlc29sdmVyKHNjKTsKLQotLy8gU3RhdGljIENoZWNraW5nIHRoZSBYcGF0aCBleHByZXNzaW9uIOKAmUhlbGxvIFdvcmxkIeKAmSBuYW1lY2hlY2suY2hlY2soeHApOwotLyoqCi0gKiBFdmFsdWF0ZSB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24KLSAqLwotCi0vLyBJbml0aWFsaXNpbmcgdGhlIGV2YWx1YXRvciB3aXRoIER5bmFtaWNDb250ZXh0IGFuZCB0aGUgbmFtZQotLy8gb2YgdGhlIFhNTCBkb2N1bWVudCBYUGV4YW1wbGUueG1sIGFzIHBhcmFtZXRlcnMuCi1FdmFsdWF0b3IgZXZhbCA9IG5ldyBEZWZhdWx0RXZhbHVhdG9yKGRjLCBkb2MpOyAKLQotLy8gRXZhbHVhdGVzIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiwgc3RvcmluZyB0aGUgcmVzdWx0Ci0vLyBpbiB0aGUgUmVzdWx0U2VxdWVuY2UKLVJlc3VsdFNlcXVlbmNlIHJzID0gZXZhbC5ldmFsdWF0ZSh4cCk7IAotPC9wcm9ncmFtbGlzdGluZz4KLQotICAgICAgPHBhcmE+WFBhdGggMi4wIGRlZmluZXMgZXZlcnl0aGluZyB0byBiZSBhIHNlcXVlbmNlIG9mIGl0ZW1zLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBhcmd1bWVudHMgdG8gZXhwcmVzc2lvbnMgYW5kIHRoZSByZXN1bHQgb2Ygb3BlcmF0aW9ucy4gVGh1cywgdGhlCi0gICAgICBvdmVyYWxsIHJlc3VsdCBvZiBhbiBYUGF0aCBleHByZXNzaW9uIGV2YWx1YXRpb24gaXMgYWxzbyBhIHNlcXVlbmNlIG9mCi0gICAgICBpdGVtcy4gUHN5Y2hvUGF0aCB1c2VzIHRoZSBjbGFzcyBSZXN1bHRTZXF1ZW5jZSBhcyBhIENvbGxlY3Rpb25zIHdyYXBwZXIKLSAgICAgIHRvIHN0b3JlIHRoZXNlIHNlcXVlbmNlcyBhbmQgdGhlcmVmb3JlLCB0aGUgcmVzdWx0IG9mIGFuIGV2YWx1YXRpb24gaXMKLSAgICAgIG9mIHRoaXMgdHlwZSBhbHNvLiBUaGUgUmVzdWx0U2VxdWVuY2UgY29uc2lzdHMgb2YgemVybyBvciBtb3JlIGl0ZW1zOyBhbgotICAgICAgaXRlbSBtYXkgYmUgYSBub2RlIG9yIGEgc2ltcGxlLXZhbHVlLiDigJxIZWxsbyBXb3JsZCHigJ0gaXMgYW4gZXhhbXBsZSBvZiBhCi0gICAgICBzaW5nbGUgdmFsdWUgd2l0aCBsZW5ndGggMS4gQSBnZW5lcmFsIHNlcXVlbmNlIGNvdWxkIGJlIHdyaXR0ZW4gYXMgKOKAnGHigJ0sCi0gICAgICDigJxz4oCdLCDigJxk4oCdLCDigJxm4oCdKS48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPkV4dHJhY3Rpb24gb2YgY2VydGFpbiBpdGVtcyBmcm9tIHRoZSBSZXN1bHRTZXF1ZW5jZSBjbGFzcyBpcwotICAgICAgZGVzY3JpYmVkIGJlbG93LCB3aXRoIGRldGFpbHMgb2YgdGhlIGRpZmZlcmVudCBvcGVyYXRpb25zIHRoYXQgb25lIG1pZ2h0Ci0gICAgICBhcHBseSBvbiB0aGUgUmVzdWx0U2VxdWVuY2UuIENvbnNpZGVyIHRoYXQg4oCZcnPigJkgaXMgdGhlIFJlc3VsdFNlcXVlbmNlLAotICAgICAgdGhlbjo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjwvcGFyYT4KLQotICAgICAgPHByb2dyYW1saXN0aW5nPi8vIFdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHNlcXVlbmNlLCBpbiB0aGlzCi0vLyBjYXNlIG9mIOKAmUhlbGxvIFdvcmxkIeKAmSBleHByZXNzaW9uIHNpemUgPSAxLgotcnMuc2l6ZSgpOyAKLQotLy8gV2lsbCByZXR1cm4gdGhlIG7igJl0aCBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZSwgaW4gdGhpcyBjYXNlIG9mCi0vLyDigJlIZWxsbyBXb3JsZCHigJksIGlmIG4gPSAxLCB0aGVuIGl0IHdpbGwgcmV0dXJuCi0vLyBYU1N0cmluZyBvZiDigJxIZWxsbyBXb3JsZCHigJ0sIGJ1dCBpZiBuID0gMiwgaXQgd2lsbCByZXR1cm4KLS8vIEVtcHR5IFJlc3VsdC4KLXJzLmdldChuKTsKLQotLy9XaWxsIHJldHVybiB0cnVlIGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eS4KLXJzLmVtcHR5KCk7IAotCi0vLyBXaWxsIHJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc2VxdWVuY2UsIAotLy8gaW4gdGhpcyBleGFtcGxlIGl0IHdpbGwgcmV0dXJuIFhTU3RyaW5nIG9mIOKAnEhlbGxvIFdvcmxkIeKAnSAKLXJzLmZpcnN0KCkgCi08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICA8cGFyYT5Ib3dldmVyLCBhbGwgdGhlIGl0ZW1zIGV4dHJhY3RlZCB3aWxsIGJlIG9mIHRoZSB0eXBl4oCZcyBiYXNlIGNsYXNzCi0gICAgICBBbnlUeXBlIGFuZCBuZWVkIHRvIGJlIGNhc3RlZCBpbnRvIGl0cyBhY3R1YWwgc3VidHlwZS48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPkNlcnRhaW4gb3BlcmF0aW9ucyBhbHdheXMgcmV0dXJuIGEgcGFydGljdWxhciB0eXBlIGFuZCB1c2luZyB0aGlzCi0gICAgICBrbm93bGVkZ2UsIHRoZSBleHRyYWN0ZWQgaXRlbSBjYW4gYmUgaW1tZWRpYXRlbHkgY2FzdGVkLiBJbiBvdXIgZXhhbXBsZQotICAgICAg4oCcSGVsbG8gV29ybGQh4oCdIHJldHVybnMgYSBzdHJpbmcgKGVhc2lseSBrbm93biBhcyBpdCBpcyBpbnNpZGUgdGhlIHF1b3RlcwotICAgICAg4oCZIOKAmSApLCBzbyB0aGlzIGNhbiBzYWZlbHkgYmUgY2FzdGVkIGFzIHN1Y2g6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+WFNTdHJpbmcgeHNzdHJpbmcgPSBYU1N0cmluZykocnMuZmlyc3QoKSk7PC9wcm9ncmFtbGlzdGluZz5UaGUKLSAgICAgIGFjdHVhbCByZXN1bHQgY2FuIG5vdyBiZSBleHRyYWN0ZWQgZnJvbSB0aGlzIFhTU3RyaW5nIGluIHRoZSBmb2xsb3dpbmcKLSAgICAgIG1hbm5lcjogPHByb2dyYW1saXN0aW5nPlN0cmluZyBzdHIgPSB4c3N0cmluZy52YWx1ZSgpOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5UaGUgZGV0YWlscyBvZiBob3cgdG8gY2FzdCBleHRyYWN0ZWQgaXRlbXMgZnJvbSBBbnlUeXBlIGludG8gdGhlaXIKLSAgICAgIGFjdHVhbCBzdWJ0eXBlcyB3aXRoIGV4YW1wbGVzIGlzIGluIHRoZSBuZXh0IHNlY3Rpb24gb24gSG93IHRvIHVzZSBlYWNoCi0gICAgICBwcm9kdWN0aW9uIGluIHRoZSBncmFtbWFyLjwvcGFyYT4KLQotICAgICAgPHBhcmE+SG93ZXZlciwgaWYgdGhlIGV4cGVjdGVkIHJldHVybiB0eXBlIGlzIHVua25vd24gb3IgbXVsdGlwbGUgdHlwZXMKLSAgICAgIGFyZSBwb3NzaWJsZSwgdGhlIHR5cGVzIGhpZXJhcmNoeSBjYW4gYmUgdHJhdmVyc2VkIGluIGEgYnJlYWR0aCBmaXJzdAotICAgICAgbWFubmVyIG1ha2luZyB1c2Ugb2YgdGhlIEphdmEgaW5zdGFuY2VvZiBvcGVyYXRvciB0byBhc2NlcnRhaW4gdGhlCi0gICAgICBhY3R1YWwgdHlwZS7CoDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iSG93X3RvX3VzZV90aGVfWFBhdGhfMi4wX2dyYW1tYXJfd2l0aF9Qc3ljaG9QYXRoIj4KLSAgICAgIDx0aXRsZT5Ib3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGg8L3RpdGxlPgotCi0gICAgICA8cGFyYT5JbiB0aGlzIHNlY3Rpb24gd2Ugd2lsbCB0cnkgdG8gZ2l2ZSB5b3UgYW4gb3ZlcnZpZXcgb2YgdGhlIFhQYXRoCi0gICAgICAyLjAgZ3JhbW1hciBpbiBnZW5lcmFsIGFuZCBob3cgZWFjaCBwcm9kdWN0aW9uIGluIHRoZSBncmFtbWFyIHNob3VsZCBiZQotICAgICAgdXNlZCB3aXRoIFBzeWNob1BhdGguIEZvciB0aGUgZm9ybWFsIHNwZWNpZmljYXRpb25zLCBzZWUgdGhlIFczQwotICAgICAgd2ViLXNpdGUgZm9yIFhQYXRoIDIuMCBzcGVjaWZpY2F0aW9uIDx1bGluawotICAgICAgdXJsPSJodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aDIwIj5odHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aDIwPC91bGluaz4uPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0iQ29uc3RhbnRzIj4KLSAgICAgICAgPHRpdGxlPkNvbnN0YW50czwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+U3RyaW5nIGxpdGVyYWxzIGFyZSB3cml0dGVuIGFzIOKAnEhlbGxv4oCdIG9yIOKAmEhlbGxv4oCZLiBJbiBlYWNoIGNhc2UKLSAgICAgICAgdGhlIG9wcG9zaXRlIGtpbmQgb2YgcXVvdGF0aW9uIG1hcmsgY2FuIGJlIHVzZWQgd2l0aGluIHRoZSBzdHJpbmc6IOKAmEhlCi0gICAgICAgIHNhaWQg4oCcSGVsbG/igJ0g4oCZIG9yIOKAnExvbmRvbiBpcyBhIGJpZyBjaXR54oCdLiBUbyBmZWVkIFBzeWNob1BhdGgsIOKAnCDigJhIZWxsbwotICAgICAgICBXb3JsZCHigJkg4oCdb3Ig4oCcIOKAnEhlbGxvIFdvcmxkIeKAnSDigJ0gY2FuIGJlIHVzZWQgdG8gZmVlZCBpdCB3aXRoIHN0cmluZ3MuCi0gICAgICAgIFJlbWVtYmVyIHRoYXQgdGhlIFJlc3VsdFNlcXVlbmNlIHJldHVybnMgQW55VHlwZSBzbyBzaW5jZSBhIHN0cmluZyBpcwotICAgICAgICBiZWluZyBleHBlY3RlZCBhcyB0aGUgcmVzdWx0LCBmaXJzdCBpdCBoYXMgdG8gYmUgY2FzdGVkIGluIHRoZSBjb2RlCi0gICAgICAgIGxpa2UgdGhpczogPHByb2dyYW1saXN0aW5nPlhTU3RyaW5nIHhzc3RyaW5nID0gKFhTU3RyaW5nKShycy5maXJzdCgpKTs8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICBOdW1lcmljIGNvbnN0YW50cyBmb2xsb3cgdGhlIEphdmEgcnVsZXMgZm9yIGRlY2ltYWwgbGl0ZXJhbHM6IGZvcgotICAgICAgICBleGFtcGxlLCA0IG9yIDQuNjc7IGEgbmVnYXRpdmUgbnVtYmVyIGNhbiBiZSB3cml0dGVuIGFzIC0zLjA1LiBUaGUKLSAgICAgICAgbnVtZXJpYyBsaXRlcmFsIGlzIHRha2VuIGFzIGEgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXIKLSAgICAgICAgaWYgaXQgdXNlcyBzY2llbnRpZmljIG5vdGF0aW9uIChlLmcuIDEuMGU3KSwgYXMgYSBmaXhlZCBwb2ludCBkZWNpbWFsCi0gICAgICAgIGlmIGl0IGluY2x1ZGVzIGEgZGVjaW1hbCBwb2ludCwgb3IgYXMgYW4gaW50ZWdlciBvdGhlcndpc2UuIFdoZW4KLSAgICAgICAgZXh0cmFjdGluZyBudW1iZXIgbGl0ZXJhbHMgZnJvbSB0aGUgUmVzdWx0U2VxdWVuY2UsIHBvc3NpYmxlIHR5cGVzIHRvCi0gICAgICAgIGJlIHJldHVybmVkIGluY2x1ZGUgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+WFNEZWNpbWEnJ2wgKGUuZy7CoDoKLSAgICAgICAgeHM6ZGVjaW1hbDogNC42NyksJydYU0ludGVnZXIgJycoZS5nLsKgOiB4czppbnRlZ2VyOiA0KSBvcgotICAgICAgICAnJ1hTRG91YmxlPC9lbXBoYXNpcz4gKGUuZy7CoDogeHM6ZG91YmxlIDFlMCkuIEFsbCBvZiB3aGljaCBuZWVkIHRvIGJlCi0gICAgICAgIGNhc3QgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHN0YXRlZCBiZWZvcmU6IGZyb20gQW55VHlwZSB0byB0aGVpcgotICAgICAgICBjb3JyZXNwb25kaW5nIHR5cGVzLjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5UaGVyZSBhcmUgbm8gYm9vbGVhbiBjb25zdGFudHMgYXMgc3VjaDogPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9Iml0YWxpYyI+dHJ1ZSwgZmFsc2U8L2VtcGhhc2lzPiBpbnN0ZWFkIHRoZSBmdW5jdGlvbiBjYWxscwotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+dHJ1ZSgpPC9lbXBoYXNpcz4gYW5kIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj5mYWxzZSgpPC9lbXBoYXNpcz4gYXJlIHVzZWQuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPkNvbnN0YW50cyBvZiBvdGhlciBkYXRhIHR5cGVzIGNhbiBiZSB3cml0dGVuIHVzaW5nIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgVGhlc2UgbG9vayBsaWtlIGZ1bmN0aW9uIGNhbGxzIGJ1dCByZXF1aXJlIGEgc3RyaW5nIGxpdGVyYWwgYXMgdGhlaXIKLSAgICAgICAgYXJndW1lbnQuIEZvciBleGFtcGxlLCA8ZW1waGFzaXMKLSAgICAgICAgcm9sZT0iYm9sZCI+eHM6ZmxvYXQo4oCcMTAuN+KAnSk8L2VtcGhhc2lzPiBwcm9kdWNlcyBhIHNpbmdsZS1wcmVjaXNpb24KLSAgICAgICAgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLjwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IlBhdGhfZXhwcmVzc2lvbnMiPgotICAgICAgICA8dGl0bGU+UGF0aCBleHByZXNzaW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+QSBwYXRoIGV4cHJlc3Npb24gaXMgYSBzZXF1ZW5jZSBvZiBzdGVwcyBzZXBhcmF0ZWQgYnkgdGhlCi0gICAgICAgIDxlbXBoYXNpcyByb2xlPSJib2xkIj4vJycnIG9yICcnJy8vPC9lbXBoYXNpcz4gb3BlcmF0b3IuIEZvciBleGFtcGxlLAotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Li4vQGRlc2M8L2VtcGhhc2lzPiBzZWxlY3RzIHRoZSBkZXNjIGF0dHJpYnV0ZQotICAgICAgICBvZiB0aGUgcGFyZW50IG9mIHRoZSBjb250ZXh0IG5vZGUuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPkluIFhQYXRoIDIuMCwgcGF0aCBleHByZXNzaW9ucyBoYXZlIGJlZW4gZ2VuZXJhbGl6ZWQgc28gdGhhdCBhbnkKLSAgICAgICAgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcGVyYW5kIG9mIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj4vPC9lbXBoYXNpcz4sIChib3RoIG9uIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQpLCBhcyBsb25nIGFzCi0gICAgICAgIGl0cyB2YWx1ZSBpcyBhIHNlcXVlbmNlIG9mIG5vZGVzLiBGb3IgZXhhbXBsZSwgaXQgaXMgcG9zc2libGUgdG8gdXNlIGEKLSAgICAgICAgdW5pb24gZXhwcmVzc2lvbiAoaW4gcGFyZW50aGVzZXMpIG9yIGEgY2FsbCB0byB0aGUgaWQoKQotICAgICAgICBmdW5jdGlvbi48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+SW4gcHJhY3RpY2UsIGl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gdXNlIGV4cHJlc3Npb25zIG9uIHRoZSByaWdodAotICAgICAgICBvZiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Ii8iPC9lbXBoYXNpcz4gaWYgdGhleSBkZXBlbmQgb24gdGhlIGNvbnRleHQKLSAgICAgICAgaXRlbS4gSXQgaXMgbGVnYWwgdG8gd3JpdGUgJHgvJHkgcHJvdmlkZWQgYm90aCAkeCBhbmQgJHkgYXJlIHNlcXVlbmNlcwotICAgICAgICBvZiBub2RlcywgYnV0IHRoZSByZXN1bHQgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyB3cml0aW5nIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj4gPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+Li8keTwvZW1waGFzaXM+Ci0gICAgICAgIDwvZW1waGFzaXM+LjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5Ob3RlIHRoYXQgdGhlIGV4cHJlc3Npb25zIDxlbXBoYXNpcyByb2xlPSJib2xkIj4uLyRYPC9lbXBoYXNpcz4KLSAgICAgICAgb3IgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPiRYLy48L2VtcGhhc2lzPiBjYW4gYmUgdXNlZCB0byByZW1vdmUKLSAgICAgICAgZHVwbGljYXRlcyBmcm9tIDxlbXBoYXNpcyByb2xlPSJib2xkIj4kWDwvZW1waGFzaXM+IGFuZCBzb3J0IHRoZQotICAgICAgICByZXN1bHRzIGludG8gZG9jdW1lbnQgb3JkZXIuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPlRoZSBvcGVyYXRvciA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Ly88L2VtcGhhc2lzPiBpcyBhbgotICAgICAgICBhYmJyZXZpYXRpb24gZm9yIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj4vZGVzY2VuZGFudC1vci1zZWxmOjpub2RlKCk8L2VtcGhhc2lzPi4gQW4gZXhwcmVzc2lvbiBvZgotICAgICAgICB0aGUgZm9ybSA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+L0U8L2VtcGhhc2lzPiBpcyBzaG9ydGhhbmQgZm9yCi0gICAgICAgIDxlbXBoYXNpcyByb2xlPSJib2xkIj5yb290KC4pL0U8L2VtcGhhc2lzPiwgYW5kIHRoZSBleHByZXNzaW9uCi0gICAgICAgIDxlbXBoYXNpcyByb2xlPSJib2xkIj4vJycnIG9uIGl0cyBvd24gaXMgc2hvcnRoYW5kIGZvcgotICAgICAgICAnJydyb290KC4pPC9lbXBoYXNpcz4uPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iQXhpc19zdGVwcyI+Ci0gICAgICAgIDx0aXRsZT5BeGlzIHN0ZXBzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT5UaGUgYmFzaWMgcHJpbWl0aXZlIGZvciBhY2Nlc3NpbmcgYSBzb3VyY2UgZG9jdW1lbnQgaXMgdGhlIGF4aXMKLSAgICAgICAgc3RlcC4gQXhpcyBzdGVwcyBtYXkgYmUgY29tYmluZWQgaW50byBwYXRoIGV4cHJlc3Npb25zIHVzaW5nIHRoZSBwYXRoCi0gICAgICAgIG9wZXJhdG9ycyAiLyIgYW5kICIvLyIsIGFuZCB0aGV5IG1heSBiZSBmaWx0ZXJlZCB1c2luZyBmaWx0ZXIKLSAgICAgICAgZXhwcmVzc2lvbnMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSByZXN1bHQgb2YgYW55IG90aGVyCi0gICAgICAgIGV4cHJlc3Npb24uPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPkFuIGF4aXMgc3RlcCBoYXMgdGhlIGJhc2ljIGZvcm0gYXhpczo6bm9kZS10ZXN0LCBhbmQgc2VsZWN0cwotICAgICAgICBub2RlcyBvbiBhIGdpdmVuIGF4aXMgdGhhdCBzYXRpc2Z5IHRoZSBub2RlLXRlc3QuIFRoZSBheGVzIGF2YWlsYWJsZQotICAgICAgICBhcmU6PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5lbGVtZW50OiBhZ2U8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPmVsZW1lbnQ6IGFnZTwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgIDxwYXJhPlRoZSByZXN0IG9mIHRoZSBheGVzIGFjdCBpbiB0aGUgc2FtZSBtYW5uZXIuPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iU2V0X2RpZmZlcmVuY2UuMkNfaW50ZXJzZWN0aW9uX2FuZF9VbmlvbiI+Ci0gICAgICAgIDx0aXRsZT5TZXQgZGlmZmVyZW5jZSwgaW50ZXJzZWN0aW9uIGFuZCBVbmlvbjwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+VGhlIGV4cHJlc3Npb24gRTEgZXhjZXB0IEUyIHNlbGVjdHMgYWxsIG5vZGVzIHRoYXQgYXJlIGluIEUxCi0gICAgICAgIHVubGVzcyB0aGV5IGFyZSBhbHNvIGluIEUyLiBCb3RoIGV4cHJlc3Npb25zIG11c3QgcmV0dXJuIHNlcXVlbmNlcyBvZgotICAgICAgICBub2Rlcy4gVGhlIHJlc3VsdHMgYXJlIHJldHVybmVkIGluIGRvY3VtZW50IG9yZGVyLiBGb3IgZXhhbXBsZSwgQCoKLSAgICAgICAgZXhjZXB0IEBub3RlIHJldHVybnMgYWxsIGF0dHJpYnV0ZXMgZXhjZXB0IHRoZSBub3RlIGF0dHJpYnV0ZS4gVGhlCi0gICAgICAgIGV4cHJlc3Npb24gRTEgaW50ZXJzZWN0IEUyIHNlbGVjdHMgYWxsIG5vZGVzIHRoYXQgYXJlIGluIGJvdGggRTEgYW5kCi0gICAgICAgIEUyLiBCb3RoIGV4cHJlc3Npb25zIG11c3QgcmV0dXJuIHNlcXVlbmNlcyBvZiBub2Rlcy4gVGhlIHJlc3VsdHMgYXJlCi0gICAgICAgIHJldHVybmVkIGluIGRvY3VtZW50IG9yZGVyLiBUaGUgZXhwcmVzc2lvbiBFMSB1bmlvbiBFMiBzZWxlY3RzIGFsbAotICAgICAgICBub2RlcyB0aGF0IGFyZSBpbiBlaXRoZXIgRTEgb3IgRTIgb3IgYm90aC4gQm90aCBleHByZXNzaW9ucyBtdXN0Ci0gICAgICAgIHJldHVybiBzZXF1ZW5jZXMgb2Ygbm9kZXMuIFRoZSByZXN1bHRzIGFyZSByZXR1cm5lZCBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAgICAgQSBjb21wbGV0ZSBleGFtcGxlIG9mIHRoZSBhYm92ZSBleHByZXNzaW9uIHdvdWxkIGJlIGFzIGZvbGxvd3MuCi0gICAgICAgIENvbnNpZGVyIGFuIFhNTCBkb2N1bWVudCB3aGljaCBsb29rcyBsaWtlIHRoaXM6PC9wYXJhPgotCi0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4mbHQ7bm9kZXMmZ3Q7Ci0gICZsdDthJmd0OwotICAgICZsdDtjb25uZWN0ZWRhJmd0O0EmbHQ7L2Nvbm5lY3RlZGEmZ3Q7Ci0gICAgJmx0O2Nvbm5lY3RlZGEmZ3Q7QiZsdDsvY29ubmVjdGVkYSZndDsKLSAgICAmbHQ7Y29ubmVjdGVkYSZndDtDJmx0Oy9jb25uZWN0ZWRhJmd0OwotICAmbHQ7L2EmZ3Q7Ci0gICZsdDtiJmd0OwotICAgICZsdDtjb25uZWN0ZWRiJmd0O0ImbHQ7L2Nvbm5lY3RlZGImZ3Q7Ci0gICAgJmx0O2Nvbm5lY3RlZGImZ3Q7QyZsdDsvY29ubmVjdGVkYiZndDsKLSAgICAmbHQ7Y29ubmVjdGVkYiZndDtEJmx0Oy9jb25uZWN0ZWRiJmd0OwotICAmbHQ7L2ImZ3Q7Ci0mbHQ7L25vZGVzJmd0OwotPC9wcm9ncmFtbGlzdGluZz4KLQotICAgICAgICA8cGFyYT5UaGVuIGFuIGV4YW1wbGUgb2YgZWFjaCBvZiB0aGUgZXhwcmVzc2lvbnMgd291bGQgYmU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5kYXRhKC9hLyopIHVuaW9uIGRhdGEoL2IvKik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+eHM6c3RyaW5nOiBBPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpzdHJpbmc6IEI8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPnhzOnN0cmluZzogQzwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotCi0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+eHM6c3RyaW5nOiBEPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmRhdGEoL2EvKikgaW50ZXJzZWN0IGRhdGEoL2IvKik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+eHM6c3RyaW5nOiBCPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpzdHJpbmc6IEM8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPC9vcmRlcmVkbGlzdD4KLQotICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+ZGF0YSgvYS8qKSBleGNlcHQgZGF0YSgvYi8qKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpzdHJpbmc6IEQ8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkFyaXRobWV0aWNfRXhwcmVzc2lvbnMiPgotICAgICAgICA8dGl0bGU+QXJpdGhtZXRpYyBFeHByZXNzaW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9IlVuYXJ5Ij4KLSAgICAgICAgICA8dGl0bGU+VW5hcnk8L3RpdGxlPgotCi0gICAgICAgICAgPHBhcmE+bWludXMgYW5kIHBsdXM6IFRoZSB1bmFyeSBtaW51cyBvcGVyYXRvciBjaGFuZ2VzIHRoZSBzaWduIG9mIGEKLSAgICAgICAgICBudW1iZXIuIEZvciBleGFtcGxlIC0xIGlzIG1pbnVzIG9uZSwgYW5kIC0xZTAgaXMgdGhlIGRvdWJsZSB2YWx1ZQotICAgICAgICAgIG5lZ2F0aXZlIC0xLjwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSJNdWx0aXBsaWNhdGlvbl9hbmRfRGl2aXNpb246Ij4KLSAgICAgICAgICA8dGl0bGU+TXVsdGlwbGljYXRpb24gYW5kIERpdmlzaW9uOjwvdGl0bGU+Ci0KLSAgICAgICAgICA8cGFyYT5UaGUgb3BlcmF0b3IgKiBtdWx0aXBsaWVzIHR3byBudW1iZXJzLiBJZiB0aGUgb3BlcmFuZHMgYXJlIG9mCi0gICAgICAgICAgZGlmZmVyZW50IHR5cGVzLCBYUGF0aCAyLjAgc3BlY2lmaWNhdGlvbnMgc2F5IHRoYXQgb25lIG9mIHRoZW0gaXMKLSAgICAgICAgICBwcm9tb3RlZCB0byB0aGUgdHlwZSBvZiB0aGUgb3RoZXIuwqBUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIHR5cGUgYXMKLSAgICAgICAgICB0aGUgb3BlcmFuZHMgYWZ0ZXIgcHJvbW90aW9uLjwvcGFyYT4KLQotICAgICAgICAgIDxwYXJhPlRoZSBvcGVyYXRvciBkaXYgZGl2aWRlcyB0d28gbnVtYmVycy4gRGl2aWRpbmcgdHdvIGludGVnZXJzCi0gICAgICAgICAgcHJvZHVjZXMgYSBkb3VibGU7IGluIG90aGVyIGNhc2VzIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUKLSAgICAgICAgICBvcGVyYW5kcy48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT5UaGUgb3BlcmF0b3IgaWRpdiBwZXJmb3JtcyBpbnRlZ2VyIGRpdmlzaW9uLiBGb3IgZXhhbXBsZSwgdGhlCi0gICAgICAgICAgcmVzdWx0IG9mIDEwIGlkaXYgMyBpcyAzLjwvcGFyYT4KLQotICAgICAgICAgIDxwYXJhPlRoZSBtb2Qgb3BlcmF0b3IgcmV0dXJucyB0aGUgbW9kdWx1cyAob3IgcmVtYWluZGVyKSBhZnRlcgotICAgICAgICAgIGRpdmlzaW9uLjwvcGFyYT4KLQotICAgICAgICAgIDxwYXJhPlRoZSBvcGVyYXRvcnMgKiBhbmQgZGl2IG1heSBhbHNvIGJlIHVzZWQgdG8gbXVsdGlwbHkgb3IgZGl2aWRlCi0gICAgICAgICAgYSByYW5nZSBieSBhIG51bWJlci48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT5Gb3IgZXhhbXBsZSwgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+KDEgaWRpdiAxIHRvCi0gICAgICAgICAgMyk8L2VtcGhhc2lzPiByZXR1cm5zIHRoZSByZXN1bHQ6IDxlbXBoYXNpcwotICAgICAgICAgIHJvbGU9Iml0YWxpYyI+eHM6aW50ZWdlcjogMSwgeHM6aW50ZWdlcjogMiwgeHM6aW50ZWdlcjoKLSAgICAgICAgICAzPC9lbXBoYXNpcz48L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0iQWRkaXRpb25fYW5kX1N1YnRyYWN0aW9uOiI+Ci0gICAgICAgICAgPHRpdGxlPkFkZGl0aW9uIGFuZCBTdWJ0cmFjdGlvbjo8L3RpdGxlPgotCi0gICAgICAgICAgPHBhcmE+VGhlIG9wZXJhdG9ycyA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+KzwvZW1waGFzaXM+IGFuZCA8ZW1waGFzaXMKLSAgICAgICAgICByb2xlPSJpdGFsaWMiPictJzwvZW1waGFzaXM+IHBlcmZvcm0gYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIG9mCi0gICAgICAgICAgbnVtYmVycywgaW4gdGhlIHVzdWFsIHdheS4gT25jZSBhZ2FpbiwgaWYgdGhlIG9wZXJhbmRzIGFyZSBvZgotICAgICAgICAgIGRpZmZlcmVudCB0eXBlcywgWFBhdGggMi4wIHNwZWNpZmljYXRpb25zIHNheSBvbmUgb2YgdGhlbSBpcwotICAgICAgICAgIHByb21vdGVkIGJ1dCBudW1lcmljIHR5cGUgcHJvbW90aW9uIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBieQotICAgICAgICAgIFBzeWNob1BhdGguIFRoZSByZXN1bHQgaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgb3BlcmFuZHMuPC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+RXhhbXBsZXMgb2YgYWJvdmUgd291bGQgYmU6PC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPiAtKDUgKyA3KTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPnhzOmludGVnZXI6IC0xMjwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLQotICAgICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz4teHM6ZmxvYXQo4oCZMS4yM+KAmSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICA8cGFyYT54czpmbG9hdDogLTEuMjM8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+LXhzOmRvdWJsZSjigJkxLjIz4oCZKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPnhzOmRvdWJsZTogLTEuMjM8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+KCs1IC0gKzcpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgPHBhcmE+eHM6aW50ZWdlcjogLTI8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+KDEgdG8gNSBkaXYgMCApPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPkZBSUwgKGRpdmlzaW9uIGJ5IHplcm8hKTwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0KLSAgICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+NSo2KjEwKjUqOTYgZGl2IDIwIGRpdiAzIGRpdiAxPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgPHBhcmE+eHM6ZGVjaW1hbDogMjQwMC4wPC9wYXJhPgotICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPjMxIG1vZCAxNTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPnhzOmludGVnZXI6IDE8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IlJhbmdlX2V4cHJlc3Npb25zIj4KLSAgICAgICAgPHRpdGxlPlJhbmdlIGV4cHJlc3Npb25zPC90aXRsZT4KLQotICAgICAgICA8cGFyYT5UaGUgZXhwcmVzc2lvbiBFMSB0byBFMiByZXR1cm5zIGEgc2VxdWVuY2Ugb2YgaW50ZWdlcnMuIEZvcgotICAgICAgICBleGFtcGxlLCAxIHRvIDUgcmV0dXJucyB0aGUgc2VxdWVuY2UgMSwgMiwgMywgNCwgNS4gVGhpcyBpcyB1c2VmdWwgaW4KLSAgICAgICAgZm9yIGV4cHJlc3Npb25zLCBmb3IgZXhhbXBsZSB0aGUgZmlyc3QgZml2ZSBub2RlcyBvZiBhIG5vZGUgc2VxdWVuY2UKLSAgICAgICAgY2FuIGJlIHByb2Nlc3NlZCBieSB3cml0aW5nIGZvciAkaSBpbiAxIHRvIDUgcmV0dXJuICgvL3gpIDx1bGluawotICAgICAgICB1cmw9IiRpIj4kaTwvdWxpbms+LiBBbm90aGVyIGV4YW1wbGU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz4oMSsxIHRvIDEwKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiAyPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiAzPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA0PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA1PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA2PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA3PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA4PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA5PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiAxMDwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iQ29tcGFyaXNvbnMiPgotICAgICAgICA8dGl0bGU+Q29tcGFyaXNvbnM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPlRoZSBzaW1wbGVzdCBjb21wYXJpc29uIG9wZXJhdG9ycyBhcmUgPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9ImJvbGQiPmVxPC9lbXBoYXNpcz4sIDxlbXBoYXNpcyByb2xlPSJib2xkIj5uZTwvZW1waGFzaXM+LAotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+bHQ8L2VtcGhhc2lzPiwgPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9ImJvbGQiPmxlPC9lbXBoYXNpcz4sIDxlbXBoYXNpcyByb2xlPSJib2xkIj5ndDwvZW1waGFzaXM+LAotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Z2U8L2VtcGhhc2lzPi4gVGhlc2UgY29tcGFyZSB0d28gYXRvbWljIHZhbHVlcwotICAgICAgICBvZiB0aGUgc2FtZSB0eXBlLCBmb3IgZXhhbXBsZSB0d28gaW50ZWdlcnMsIHR3byBkYXRlcywgb3IgdHdvIHN0cmluZ3MuCi0gICAgICAgIChDb2xsYXRpb24gaGFzbuKAmXQgYmVlbiBpbXBsZW1lbnRlZCBpbiBjdXJyZW50IHZlcnNpb24gb2YgUHN5Y2hvUGF0aCkuCi0gICAgICAgIElmIHRoZSBvcGVyYW5kcyBhcmUgbm90IGF0b21pYyB2YWx1ZXMsIGFuIGVycm9yIGlzIHJhaXNlZC48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+VGhlIG9wZXJhdG9ycyA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+PScnJyzCoDwvZW1waGFzaXM+IT0nCi0gICAgICAgIDxlbXBoYXNpcyByb2xlPSJpdGFsaWMiPiwgJzwvZW1waGFzaXM+Jmx0Oz0nIDxlbXBoYXNpcyByb2xlPSJpdGFsaWMiPiwKLSAgICAgICAgJzwvZW1waGFzaXM+Jmd0OyA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+LCAnJycmbHQ7PC9lbXBoYXNpcz4sIGFuZAotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Jmd0Oz08L2VtcGhhc2lzPiBjYW4gY29tcGFyZSBhcmJpdHJhcnkKLSAgICAgICAgc2VxdWVuY2VzLiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYW55IHBhaXIgb2YgaXRlbXMgZnJvbSB0aGUgdHdvCi0gICAgICAgIHNlcXVlbmNlcyBoYXMgdGhlIHNwZWNpZmllZCByZWxhdGlvbnNoaXAsIGZvciBleGFtcGxlIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJpdGFsaWMiPiRBID0gJEI8L2VtcGhhc2lzPiBpcyB0cnVlIGlmIHRoZXJlIGlzIGFuIGl0ZW0gaW4KLSAgICAgICAgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+JEE8L2VtcGhhc2lzPiB0aGF0IGlzIGVxdWFsIHRvIHNvbWUgaXRlbSBpbgotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iaXRhbGljIj4kQjwvZW1waGFzaXM+LjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5UaGUgb3BlcmF0b3JzIDxlbXBoYXNpcyByb2xlPSJib2xkIj5pczwvZW1waGFzaXM+IGFuZCA8ZW1waGFzaXMKLSAgICAgICAgcm9sZT0iYm9sZCI+aXNub3Q8L2VtcGhhc2lzPiB0ZXN0IHdoZXRoZXIgdGhlIG9wZXJhbmRzIHJlcHJlc2VudCB0aGUKLSAgICAgICAgc2FtZSAoaWRlbnRpY2FsKSBub2RlLiBGb3IgZXhhbXBsZSwgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+dGl0bGUKLSAgICAgICAgPHVsaW5rIHVybD0iMSI+MTwvdWxpbms+IGlzICogPHVsaW5rIHVybD0iQG5vdGUiPkBub3RlPC91bGluaz4gPHVsaW5rCi0gICAgICAgIHVybD0iMSI+MTwvdWxpbms+IDwvZW1waGFzaXM+IGlzIHRydWUgaWYgdGhlIGZpcnN0IHRpdGxlIGNoaWxkIGlzIHRoZQotICAgICAgICBmaXJzdCBjaGlsZCBlbGVtZW50IHRoYXQgaGFzIGEgPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9Iml0YWxpYyI+QG5vdGU8L2VtcGhhc2lzPiBhdHRyaWJ1dGUuIElmIGVpdGhlciBvcGVyYW5kIGlzIGFuCi0gICAgICAgIGVtcHR5IHNlcXVlbmNlIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgc2VxdWVuY2UgKHdoaWNoIHdpbGwgdXN1YWxseSBiZQotICAgICAgICB0cmVhdGVkIGFzIGZhbHNlKS48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+VGhlIG9wZXJhdG9ycyA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Jmx0OyZsdDs8L2VtcGhhc2lzPiBhbmQKLSAgICAgICAgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPiZndDsmZ3Q7PC9lbXBoYXNpcz4gdGVzdCB3aGV0aGVyIG9uZSBub2RlCi0gICAgICAgIHByZWNlZGVzIG9yIGZvbGxvd3MgYW5vdGhlciBpbiBkb2N1bWVudCBvcmRlci4gQ29uc2lkZXIgdGhpcyBYTUwKLSAgICAgICAgZG9jdW1lbnQ6PC9wYXJhPgotCi0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4mbHQ7Ym9vayZndDsKLSAmbHQ7dGl0bGUmZ3Q7QmVpbmcgYSBEb2cgSXMgYSBGdWxsLVRpbWUgSm9iJmx0Oy90aXRsZSZndDsKLSAmbHQ7YXV0aG9yJmd0O0NoYXJsZXMgTS4gU2NodWx6Jmx0Oy9hdXRob3ImZ3Q7Ci0gJmx0O2NoYXJhY3RlciZndDsKLSAgICZsdDtuYW1lJmd0O1Nub29weSZsdDsvbmFtZSZndDsKLSAgICZsdDtmcmllbmQtb2YmZ3Q7UGVwcGVybWludCBQYXR0eSZsdDsvZnJpZW5kLW9mJmd0OwotICAgJmx0O3NpbmNlJmd0OzE5NTAtMTAtMDQmbHQ7L3NpbmNlJmd0OwotICAgJmx0O2FnZSZndDsyJmx0Oy9hZ2UmZ3Q7Ci0gICAmbHQ7cXVhbGlmaWNhdGlvbiZndDtleHRyb3ZlcnRlZCBiZWFnbGUmbHQ7L3F1YWxpZmljYXRpb24mZ3Q7Ci0gJmx0Oy9jaGFyYWN0ZXImZ3Q7Ci0gJmx0O2NoYXJhY3RlciZndDsKLSAgICZsdDtuYW1lJmd0O1BlcHBlcm1pbnQgUGF0dHkmbHQ7L25hbWUmZ3Q7Ci0gICAmbHQ7c2luY2UmZ3Q7MTk2Ni0wOC0yMiZndDsvc2luY2UmZ3Q7Ci0gICAmbHQ7YWdlJmd0OzQmbHQ7L2FnZSZndDsKLSAgICZsdDtxdWFsaWZpY2F0aW9uJmd0O2JvbGQsIGJyYXNoIGFuZCB0b21ib3lpc2gmbHQ7L3F1YWxpZmljYXRpb24mZ3Q7Ci0gJmx0Oy9jaGFyYWN0ZXImZ3Q7Ci0mbHQ7L2Jvb2smZ3Q7Ci08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICAgIDxwYXJhPkV4YW1wbGU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29rL2NoYXJhY3RlciBuYW1lPSJTbm9vcHkiICZsdDsmbHQ7IGJvb2svY2hhcmFjdGVyIFBhdHR5IiA8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpib29sZWFuOiB0cnVlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+Ym9vay9jaGFyYWN0ZXIgPHVsaW5rIHVybD0ibmFtZT0mcXVvdDtQZXBwZXJtaW50Ij5QYXR0eSI8L3VsaW5rPgotICAgICAgICAmbHQ7Jmx0OyBib29rL2NoYXJhY3RlciA8dWxpbmsKLSAgICAgICAgdXJsPSJuYW1lPSZxdW90O1Nub29weSZxdW90OyI+bmFtZT0iU25vb3B5IjwvdWxpbms+IDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPnhzOmJvb2xlYW46IGZhbHNlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJDb25kaXRpb25hbF9FeHByZXNzaW9ucyI+Ci0gICAgICAgIDx0aXRsZT5Db25kaXRpb25hbCBFeHByZXNzaW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+WFBhdGggMi4wIGFsbG93cyBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9Iml0YWxpYyI+aWYgKCBFMSApIHRoZW4gRTIgZWxzZSBFMzwvZW1waGFzaXM+LiBGb3IgZXhhbXBsZSwKLSAgICAgICAgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+aWYgKEBkaXNjb3VudCkgdGhlbiBAZGlzY291bnQgZWxzZQotICAgICAgICAwPC9lbXBoYXNpcz4gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGRpc2NvdW50IGF0dHJpYnV0ZSBpZiBpdCBpcwotICAgICAgICBwcmVzZW50LCBvciB6ZXJvIG90aGVyd2lzZS48L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJRdWFudGlmaWVkX0V4cHJlc3Npb25zIj4KLSAgICAgICAgPHRpdGxlPlF1YW50aWZpZWQgRXhwcmVzc2lvbnM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPlRoZSBleHByZXNzaW9uIDxlbXBoYXNpcyByb2xlPSJpdGFsaWMiPnNvbWUgJHggaW4gRTEgc2F0aXNmaWVzCi0gICAgICAgIEUyPC9lbXBoYXNpcz4gcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIEUxIGZvcgotICAgICAgICB3aGljaCB0aGUgZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUgb2YgRTIgaXMgdHJ1ZS4gTm90ZSB0aGF0IEUyIG11c3QgdXNlCi0gICAgICAgIHRoZSByYW5nZSB2YXJpYWJsZSA8ZW1waGFzaXMgcm9sZT0iaXRhbGljIj4keDwvZW1waGFzaXM+IHRvIHJlZmVyIHRvCi0gICAgICAgIHRoZSBpdGVtIGJlaW5nIHRlc3RlZDsgaXQgZG9lcyBub3QgYmVjb21lIHRoZSBjb250ZXh0IGl0ZW0uIEZvcgotICAgICAgICBleGFtcGxlLCA8ZW1waGFzaXMgcm9sZT0iaXRhbGljIj5zb21lICR4IGluIEAqIHNhdGlzZmllcyAkeCBlcQotICAgICAgICAiIjwvZW1waGFzaXM+IGlzIHRydWUgaWYgdGhlIGNvbnRleHQgaXRlbSBpcyBhbiBlbGVtZW50IHRoYXQgaGFzIGF0Ci0gICAgICAgIGxlYXN0IG9uZSB6ZXJvLWxlbmd0aCBhdHRyaWJ1dGUgdmFsdWUuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPlNpbWlsYXJseSwgdGhlIGV4cHJlc3Npb24gPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+ZXZlcnkgJHggaW4gRTEKLSAgICAgICAgc2F0aXNmaWVzIEUyPC9lbXBoYXNpcz4gcmV0dXJucyB0cnVlIGlmIGV2ZXJ5IGl0ZW0gaW4gdGhlIHNlcXVlbmNlCi0gICAgICAgIGdpdmVuIGJ5IEUxIHNhdGlzZmllcyB0aGUgY29uZGl0aW9uLjwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkFuZC4yQ19Pcl9FeHByZXNzaW9ucyI+Ci0gICAgICAgIDx0aXRsZT5BbmQsIE9yIEV4cHJlc3Npb25zPC90aXRsZT4KLQotICAgICAgICA8cGFyYT5UaGUgZXhwcmVzc2lvbiA8ZW1waGFzaXMgcm9sZT0iaXRhbGljIj5FMSBhbmQgRTI8L2VtcGhhc2lzPgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlcyBvZiBFMSBhbmQgRTIgYXJlIGJvdGgKLSAgICAgICAgdHJ1ZS4gVGhlIGV4cHJlc3Npb24gPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+RTEgb3IgRTI8L2VtcGhhc2lzPgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlcyBvZiBlaXRoZXIgb3IgYm90aCBvZiBFMQotICAgICAgICBhbmQgRTIgYXJlIHRydWUuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz4gKGZvciBhIHRydXRoIHRhYmxlKSAxIGFuZCAxPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+eHM6Ym9vbGVhbjogdHJ1ZTwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz4xIGFuZCAwPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPnhzOmJvb2xlYW46IGZhbHNlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPjEgb3IgMDwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpib29sZWFuOiB0cnVlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPjAgb3IgMTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpib29sZWFuOiB0cnVlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iU2VxdWVuY2VUeXBlX01hdGNoaW5nX0V4cHJlc3Npb25zIj4KLSAgICAgICAgPHRpdGxlPlNlcXVlbmNlVHlwZSBNYXRjaGluZyBFeHByZXNzaW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+VGhlIHJ1bGVzIGZvciBTZXF1ZW5jZVR5cGUgbWF0Y2hpbmcgY29tcGFyZSB0aGUgYWN0dWFsIHR5cGUgb2YgYQotICAgICAgICB2YWx1ZSB3aXRoIGFuIGV4cGVjdGVkIHR5cGUuIFRoZXNlIHJ1bGVzIGFyZSBhIHN1YnNldCBvZiB0aGUgZm9ybWFsCi0gICAgICAgIHJ1bGVzIHRoYXQgbWF0Y2ggYSB2YWx1ZSB3aXRoIGFuIGV4cGVjdGVkIHR5cGUgZGVmaW5lZCBpbiBYUXVlcnkgMS4wCi0gICAgICAgIGFuZCBYUGF0aCAyLjAgRm9ybWFsIFNlbWFudGljcyA8dWxpbmsKLSAgICAgICAgdXJsPSJodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aDIwLyNYUXVlcnlGb3JtYWxTZW1hbnRpY3MiPmh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoMjAvI1hRdWVyeUZvcm1hbFNlbWFudGljczwvdWxpbms+LAotICAgICAgICBiZWNhdXNlIHRoZSBGb3JtYWwgU2VtYW50aWNzIG11c3QgYmUgYWJsZSB0byBtYXRjaCBhIHZhbHVlIHdpdGggYW55Ci0gICAgICAgIFhNTCBTY2hlbWEgdHlwZSwgd2hlcmVhcyB0aGUgcnVsZXMgYmVsb3cgb25seSBtYXRjaCB2YWx1ZXMgYWdhaW5zdAotICAgICAgICB0aG9zZSB0eXBlcyBleHByZXNzaWJsZSBieSB0aGUgU2VxdWVuY2VUeXBlIHN5bnRheC48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+U29tZSBvZiB0aGUgcnVsZXMgZm9yIFNlcXVlbmNlVHlwZSBtYXRjaGluZyByZXF1aXJlIGRldGVybWluaW5nCi0gICAgICAgIHdoZXRoZXIgYSBnaXZlbiB0eXBlIG5hbWUgaXMgdGhlIHNhbWUgYXMgb3IgZGVyaXZlZCBmcm9tIGFuIGV4cGVjdGVkCi0gICAgICAgIHR5cGUgbmFtZS4gVGhlIGdpdmVuIHR5cGUgbmFtZSBtYXkgYmUgImtub3duIiAoZGVmaW5lZCBpbiB0aGUgaW4tc2NvcGUKLSAgICAgICAgc2NoZW1hIGRlZmluaXRpb25zKSwgb3IgInVua25vd24iIChub3QgZGVmaW5lZCBpbiB0aGUgaW4tc2NvcGUgc2NoZW1hCi0gICAgICAgIGRlZmluaXRpb25zKS4gQW4gdW5rbm93biB0eXBlIG5hbWUgbWlnaHQgYmUgZW5jb3VudGVyZWQsIGZvciBleGFtcGxlLAotICAgICAgICBpZiBhIHNvdXJjZSBkb2N1bWVudCBoYXMgYmVlbiB2YWxpZGF0ZWQgdXNpbmcgYSBzY2hlbWEgdGhhdCB3YXMgbm90Ci0gICAgICAgIGltcG9ydGVkIGludG8gdGhlIHN0YXRpYyBjb250ZXh0LiBJbiB0aGlzIGNhc2UsIGFuIGltcGxlbWVudGF0aW9uIGlzCi0gICAgICAgIGFsbG93ZWQgKGJ1dCBpcyBub3QgcmVxdWlyZWQpIHRvIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50Ci0gICAgICAgIG1lY2hhbmlzbSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgdW5rbm93biB0eXBlIG5hbWUgaXMgZGVyaXZlZAotICAgICAgICBmcm9tIHRoZSBleHBlY3RlZCB0eXBlIG5hbWUuIEZvciBleGFtcGxlLCBhbiBpbXBsZW1lbnRhdGlvbiBtaWdodAotICAgICAgICBtYWludGFpbiBhIGRhdGEgZGljdGlvbmFyeSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHR5cGUKLSAgICAgICAgaGllcmFyY2hpZXMuIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgWE1MIGRvY3VtZW50OjwvcGFyYT4KLQotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Jmx0O3NvcmJvJmd0OwotICZsdDtpcyZndDtlbGl0ZSZsdDsvaXMmZ3Q7Ci0gJmx0OyEtLSBsaWZlIHN1eCAtLSZndDsKLSZsdDsvc29yYm8mZ3Q7Ci08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICAgIDxwYXJhPlRoZW4sIHRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZSBvZiBTZXF1ZW5jZVR5cGUKLSAgICAgICAgbWF0Y2hpbmdzOjwvcGFyYT4KLQotICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+IGVsZW1lbnQoeyp9KTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5lbGVtZW50OiBzb3JibzwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5lbGVtZW50KGVsaXRlKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5FbXB0eSByZXN1bHRzPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnNvcmJvL2NvbW1lbnQoKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5jb21tZW50OiBsaWZlIHN1eDwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5kYXRhKC9zb3Jiby9jb21tZW50KCkpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPnhzOnN0cmluZzogbGlmZSBzdXg8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPC9vcmRlcmVkbGlzdD4KLQotICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+c29yYm8vbm9kZSgpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+dGV4dDo8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPmVsZW1lbnQ6IGlzPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5jb21tZW50OiBsaWZlIHN1eDwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotCi0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+dGV4dDo8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPC9vcmRlcmVkbGlzdD4KLQotICAgICAgICA8cGFyYT48L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9Ikhvd190b191c2VfWFBhdGhfMi4wX2Z1bmN0aW9uc193aXRoX1BzeWNob1BhdGgiPgotICAgIDx0aXRsZT5Ib3cgdG8gdXNlIFhQYXRoIDIuMCBmdW5jdGlvbnMgd2l0aCBQc3ljaG9QYXRoPC90aXRsZT4KLQotICAgIDxwYXJhPlRoZSBhaW0gb2YgdGhpcyBzZWN0aW9uIGlzIHRvIGdpdmUgdGhlIHVzZXIgYW4gb3ZlcnZpZXcgb2YgdGhlCi0gICAgYXZhaWxhYmxlIFhQYXRoIDIuMCBmdW5jdGlvbnMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gUHN5Y2hvUGF0aC4gRm9yIHRoZQotICAgIGZvcm1hbCBzcGVjaWZpY2F0aW9ucywgc2VlIHRoZSBXM0Mgd2ViLXNpdGUgZm9yIFhQYXRoIDIuMCBmdW5jdGlvbnMgYW5kCi0gICAgb3BlcmF0b3JzIDx1bGluawotICAgIHVybD0iaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZnVuY3Rpb25zLyI+aHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZnVuY3Rpb25zLzwvdWxpbms+LjwvcGFyYT4KLQotICAgIDxzZWN0aW9uIGlkPSJBY2Nlc3NvcnMiPgotICAgICAgPHRpdGxlPkFjY2Vzc29yczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPkluIG9yZGVyIGZvciBQc3ljaG9QYXRoIHRvIG9wZXJhdGUgb24gaW5zdGFuY2VzIG9mIHRoZSBYUGF0aCAyLjAKLSAgICAgIGRhdGEgbW9kZWwsIHRoZSBtb2RlbCBtdXN0IGV4cG9zZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgaXQKLSAgICAgIGNvbnRhaW5zLiBJdCBkb2VzIHRoaXMgYnkgZGVmaW5pbmcgYSBmYW1pbHkgb2YgYWNjZXNzb3IgZnVuY3Rpb25zLiBUaGVzZQotICAgICAgZnVuY3Rpb25zIGFyZSBub3QgYXZhaWxhYmxlIHRvIHVzZXJzIG9yIGFwcGxpY2F0aW9ucyB0byBjYWxsIGRpcmVjdGx5LgotICAgICAgSW5zdGVhZCwgdGhleSBhcmUgZGVzY3JpcHRpb25zIG9mIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGFuIGltcGxlbWVudGF0aW9uCi0gICAgICBvZiB0aGUgbW9kZWwgbXVzdCBleHBvc2UgdG8gYXBwbGljYXRpb25zLjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZGF0YSjigJhzdHJpbmfigJkpPC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYU1N0cmluZylycy5maXJzdCgpKS5zdHJpbmd2YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYc3RyaW5n4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJDb25zdHJ1Y3Rvcl9GdW5jdGlvbnMiPgotICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yIEZ1bmN0aW9uczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz54czpkYXRlVGltZSgiMjAwMi0wMi0wMVQxMDowMDowMCswNjowMCIpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPkZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+U3RyaW5nIG4gPSAoKFhTRGF0ZVRpbWUpcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYMjAwMi0wMi0wMVQwNDowMDowMFrigJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IkZ1bmN0aW9uc19vbl9OdW1lcmljX1ZhbHVlcyI+Ci0gICAgICA8dGl0bGU+RnVuY3Rpb25zIG9uIE51bWVyaWMgVmFsdWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmNlaWxpbmcoeHM6ZmxvYXQo4oCYMTAuNOKAmSkpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+ZmxvYXQgbiA9ICgoWFNGbG9hdClycy5maXJzdCgpKS5mbG9hdHZhbHVlKCk7Ci1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5JbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiDigJgxMS4w4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJGdW5jdGlvbnNfdG9fQXNzZW1ibGVfYW5kX0Rpc2Fzc2VtYmxlX1N0cmluZ3MiPgotICAgICAgPHRpdGxlPkZ1bmN0aW9ucyB0byBBc3NlbWJsZSBhbmQgRGlzYXNzZW1ibGUgU3RyaW5nczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5jb2RlcG9pbnRzLXRvLXN0cmluZygwMTExKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYU1N0cmluZylycy5maXJzdCgpKS5zdHJpbmd2YWx1ZSgpOwotcHJpbnRsbihuKTsmbHQ7L3NvdXJjZSZndDs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYb+KAmTwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iQ29tcGFyZV9hbmRfT3RoZXJfRnVuY3Rpb25zX29uX1N0cmluZ19WYWx1ZXMiPgotICAgICAgPHRpdGxlPkNvbXBhcmUgYW5kIE90aGVyIEZ1bmN0aW9ucyBvbiBTdHJpbmcgVmFsdWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmNvbmNhdCjigJh1buKAmSwg4oCYZ3JhdGVmdWzigJkpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+U3RyaW5nIG4gPSAoKFhTU3RyaW5nKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7Ci1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5JbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiDigJh1bmdyYXRlZnVs4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJGdW5jdGlvbnNfQmFzZWRfb25fU3Vic3RyaW5nX01hdGNoaW5nIj4KLSAgICAgIDx0aXRsZT5GdW5jdGlvbnMgQmFzZWQgb24gU3Vic3RyaW5nIE1hdGNoaW5nPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmNvbnRhaW5zKCJhYmMiLCAiZWRmIik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYZmFsc2XigJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IlN0cmluZ19GdW5jdGlvbnNfdGhhdF9Vc2VfUGF0dGVybl9NYXRjaGluZyI+Ci0gICAgICA8dGl0bGU+U3RyaW5nIEZ1bmN0aW9ucyB0aGF0IFVzZSBQYXR0ZXJuIE1hdGNoaW5nPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPm1hdGNoZXMo4oCYYWJjZOKAmSwg4oCYYWJjZOKAmSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYdHJ1ZeKAmTwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iRnVuY3Rpb25zX29uX0Jvb2xlYW5fVmFsdWVzIj4KLSAgICAgIDx0aXRsZT5GdW5jdGlvbnMgb24gQm9vbGVhbiBWYWx1ZXM8L3RpdGxlPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+bm90KHRydWUoKSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYZmFsc2XigJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IkNvbXBvbmVudF9FeHRyYWN0aW9uX0Z1bmN0aW9uc19vbl9EdXJhdGlvbnMuMkNfRGF0ZXNfYW5kX1RpbWVzIj4KLSAgICAgIDx0aXRsZT5Db21wb25lbnQgRXh0cmFjdGlvbiBGdW5jdGlvbnMgb24gRHVyYXRpb25zLCBEYXRlcyBhbmQKLSAgICAgIFRpbWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnRpbWV6b25lLWZyb20tdGltZSh4czp0aW1lKCIxMzoyMDowMCswNTowMCIpKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYRFREYXlUaW1lRHVyYXRpb24pcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiDigJhQVDVI4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJGdW5jdGlvbnNfUmVsYXRlZF90b19RTmFtZXMiPgotICAgICAgPHRpdGxlPkZ1bmN0aW9ucyBSZWxhdGVkIHRvIFFOYW1lczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5sb2NhbC1uYW1lLWZyb20tUU5hbWUoUU5hbWUo4oCYIDx1bGluawotICAgICAgICAgICAgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2V4YW1wbGUiPmh0dHA6Ly93d3cuZXhhbXBsZS5jb20vZXhhbXBsZTwvdWxpbms+4oCZLCDigJhwZXJzb27igJkpKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYU05DTmFtZSlycy5maXJzdCgpKS5zdHJpbmd2YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYcGVyc29u4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJGdW5jdGlvbnNfb25fTm9kZXMiPgotICAgICAgPHRpdGxlPkZ1bmN0aW9ucyBvbiBOb2RlczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjwvcGFyYT4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkdlbmVyYWxfRnVuY3Rpb25zX29uX1NlcXVlbmNlcyI+Ci0gICAgICAgIDx0aXRsZT5HZW5lcmFsIEZ1bmN0aW9ucyBvbiBTZXF1ZW5jZXM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5yZW1vdmUoKOKAmHPigJks4oCYb+KAmSzigJht4oCZLOKAmGXigJks4oCYdOKAmSzigJho4oCZLOKAmGnigJks4oCYbuKAmSzigJhn4oCZKSwgNik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICAgIDxwcm9ncmFtbGlzdGluZz5mb3IgKEl0ZXJhdG9yIGl0ZXIgPSBycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgT2JqZWN0IGl0ZW0gPSBpdGVyLm5leHQoKTsgCi0gIFN0cmluZyBuID0gKChYU1N0cmluZylpdGVtKS5zdHJpbmd2YWx1ZSgpOwotICBwcmludChuICsgIiAiKTsKLX0gcHJpbnRsbigiIik7Ci08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmHMgbyBtIGUgdCBpIG4gZ+KAmTwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkZ1bmN0aW9uc19UaGF0X1Rlc3RfdGhlX0NhcmRpbmFsaXR5X29mX1NlcXVlbmNlcyI+Ci0gICAgICAgIDx0aXRsZT5GdW5jdGlvbnMgVGhhdCBUZXN0IHRoZSBDYXJkaW5hbGl0eSBvZiBTZXF1ZW5jZXM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5vbmUtb3ItbW9yZSgoMSwyLDMsNCw1KSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICAgIDxwcm9ncmFtbGlzdGluZz5mb3IgKEl0ZXJhdG9yIGl0ZXIgPSBycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSBPYmplY3QgaXRlbSA9IGl0ZXIubmV4dCgpOwotIGludCBuID0gKChYU0ludGVnZXIpaXRlbSkuaW50dmFsdWUoKTsKLSBwcmludChuICsgIiAiKTsKLX0gcHJpbnRsbigiIik7Ci08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmDEgMiAzIDQgNeKAmTwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkRlZXAtRXF1YWwuMkNfQWdncmVnYXRlX0Z1bmN0aW9ucy4yQ19hbmRfRnVuY3Rpb25zX3RoYXRfR2VuZXJhdGVfU2VxdWVuY2VzIj4KLSAgICAgICAgPHRpdGxlPkRlZXAtRXF1YWwsIEFnZ3JlZ2F0ZSBGdW5jdGlvbnMsIGFuZCBGdW5jdGlvbnMgdGhhdCBHZW5lcmF0ZQotICAgICAgICBTZXF1ZW5jZXM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5hdmcoKDMsNCw1KSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5kb3VibGUgYXZnID0gKChYU0RvdWJsZSlycy5maXJzdCgpKS5kb3VibGV2YWx1ZSgpOwotcHJpbnRsbihhdmcpOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmDQuMOKAmTwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkNvbnRleHRfRnVuY3Rpb25zIj4KLSAgICAgICAgPHRpdGxlPkNvbnRleHQgRnVuY3Rpb25zPC90aXRsZT4KLQotICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+KDEwIHRvIDIwKSA9IDI8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5pbnQgcG9zID0gKChYU0ludGVnZXIpcnMuZmlyc3QoKSkuaW50dmFsdWUoKTsgcHJpbnRsbihwb3MpOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmDEx4oCZPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJIb3dfdG9fdXNlX1hQYXRoXzIuMF9vcGVyYXRvcnNfd2l0aF9Qc3ljaG9QYXRoIj4KLSAgICA8dGl0bGU+SG93IHRvIHVzZSBYUGF0aCAyLjAgb3BlcmF0b3JzIHdpdGggUHN5Y2hvUGF0aDwvdGl0bGU+Ci0KLSAgICA8cGFyYT5UaGUgYWltIG9mIHRoaXMgc2VjdGlvbiBpcyB0byBnaXZlIHRoZSB1c2VyIGFuIG92ZXJ2aWV3IG9mIHRoZQotICAgIGF2YWlsYWJsZSBYUGF0aCAyLjAgb3BlcmF0b3JzIHRoYXQgYXJlIGltcGxlbWVudGVkIGluIFBzeWNob1BhdGguIEZvciB0aGUKLSAgICBmb3JtYWwgc3BlY2lmaWNhdGlvbnMsIHNlZSB0aGUgVzNDIHdlYi1zaXRlIGZvciBYUGF0aCAyLjAgZnVuY3Rpb25zIGFuZAotICAgIG9wZXJhdG9ycyA8dWxpbmsKLSAgICB1cmw9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoLWZ1bmN0aW9ucy8iPmh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoLWZ1bmN0aW9ucy88L3VsaW5rPi48L3BhcmE+Ci0KLSAgICA8cGFyYT48L3BhcmE+Ci0KLSAgICA8c2VjdGlvbiBpZD0iT3BlcmF0b3JzX29uX051bWVyaWNfVmFsdWVzIj4KLSAgICAgIDx0aXRsZT5PcGVyYXRvcnMgb24gTnVtZXJpYyBWYWx1ZXM8L3RpdGxlPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+eHM6aW50ZWdlcig0KSArIHhzOmludGVnZXIoMyk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5JbnRlZ2VyIG4gPSAoKFhTSW50ZWdlcilycy5maXJzdCgpKS5pbnRlZ2VydmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiDigJg34oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJDb21wYXJpc29uX29mX051bWVyaWNfVmFsdWVzIj4KLSAgICAgIDx0aXRsZT5Db21wYXJpc29uIG9mIE51bWVyaWMgVmFsdWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnhzOmRlY2ltYWwoMy4zKSA9IHhzOmRlY2ltYWwoNi42KTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmJvb2xlYW4gbiA9ICgoWFNCb29sZWFuKXJzLmZpcnN0KCkpLnZhbHVlKCk7IHByaW50bG4obik7PC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmGZhbHNl4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJPcGVyYXRvcnNfb25fQm9vbGVhbl9WYWx1ZXMiPgotICAgICAgPHRpdGxlPk9wZXJhdG9ycyBvbiBCb29sZWFuIFZhbHVlczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz54czpib29sZWFuKOKAmXRydWXigJkpIGd0IHhzOmJvb2xlYW4o4oCZZmFsc2XigJkpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsgcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYdHJ1ZeKAmTwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iQ29tcGFyaXNvbnNfb2ZfRHVyYXRpb24uMkNfRGF0ZV9hbmRfVGltZV9WYWx1ZXMiPgotICAgICAgPHRpdGxlPkNvbXBhcmlzb25zIG9mIER1cmF0aW9uLCBEYXRlIGFuZCBUaW1lIFZhbHVlczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz54czp0aW1lKCIyMzowMDowMCswNjowMCIpIGx0IHhzOnRpbWUoIjEyOjAwOjAwLTA2OjAwIik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOyAKLXByaW50bG4obik7PC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmHRydWXigJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IkFyaXRobWV0aWNfRnVuY3Rpb25zX29uX0R1cmF0aW9ucyI+Ci0gICAgICA8dGl0bGU+QXJpdGhtZXRpYyBGdW5jdGlvbnMgb24gRHVyYXRpb25zPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPm11bHRpcGx5LWRheVRpbWVEdXJhdGlvbih4czpkYXlUaW1lRHVyYXRpb24oIlBUMkgxME0iKSwgMi4xKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYRFREYXlUaW1lRHVyYXRpb24pcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT53aGljaCByZXR1cm5zIGEgeGR0OmRheVRpbWVEdXJhdGlvbiB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIDQgaG91cnMKLSAgICAgIGFuZCAzMyBtaW51dGVzIOKAmFBUNEgzM03igJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IkFyaXRobWV0aWNfRnVuY3Rpb25zX0RhdGVzX2FuZF9UaW1lcyI+Ci0gICAgICA8dGl0bGU+QXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmFkZC15ZWFyTW9udGhEdXJhdGlvbi10by1kYXRlVGltZSggeHM6ZGF0ZVRpbWUoIjIwMDAtMTAtMzBUMTE6MTI6MDAiKSwgeGR0OnllYXJNb250aER1cmF0aW9uKCJQMVkyTSIpKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYU0RhdGVUaW1lKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7IAotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+d2hpY2ggcmV0dXJucyBhbiB4czpkYXRlVGltZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZXhpY2FsCi0gICAgICByZXByZXNlbnRhdGlvbiDigJgyMDAxLTEyLTMwVDExOjEyOjAw4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJPcGVyYXRvcnNfUmVsYXRlZF90b19RTmFtZXNfQW5kX05vZGVzIj4KLSAgICAgIDx0aXRsZT5PcGVyYXRvcnMgUmVsYXRlZCB0byBRTmFtZXMgQW5kIE5vZGVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnhzOlFOYW1lKOKAmWFv4oCZKSBlcSB4czpRTmFtZSjigJlhb+KAmSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOyAKLXByaW50bG4obik7PC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPndoaWNoIHJldHVybnMgdGhlIHJlc3VsdCBvZiDigJh0cnVl4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJVbmlvbi4yQ19JbnRlcnNlY3Rpb25fYW5kX0V4Y2VwdCI+Ci0gICAgICA8dGl0bGU+VW5pb24sIEludGVyc2VjdGlvbiBhbmQgRXhjZXB0PC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnVuaW9uKCRzZXEyLCAkc2VxMyk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwcm9ncmFtbGlzdGluZz5mb3IgKEl0ZXJhdG9yIGl0ZXIgPSBycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgT2JqZWN0IGl0ZW0gPSBpdGVyLm5leHQoKTsKLSAgU3RyaW5nIG4gPSAoKFhTU3RyaW5nKWl0ZW0pLnN0cmluZ3ZhbHVlKCk7Ci0gIHByaW50KG4gKyAiLCAiKTsKLX0KLXByaW50bG4oIiIpOwotPC9wcm9ncmFtbGlzdGluZz4KLQotICAgICAgPHBhcmE+IDwvcGFyYT4KLQotICAgICAgPHBhcmE+d2hpY2ggcmV0dXJucyB0aGUgc2VxdWVuY2UgY29uc2lzdGluZyBvZiAkaXRlbTEsICRpdGVtMiwKLSAgICAgICRpdGVtMy48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iT3BlcmF0b3JzX3RoYXRfR2VuZXJhdGVfU2VxdWVuY2VzIj4KLSAgICAgIDx0aXRsZT5PcGVyYXRvcnMgdGhhdCBHZW5lcmF0ZSBTZXF1ZW5jZXM8L3RpdGxlPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+KDEgdG8gMyk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5pbnQgbiA9IChYU0ludGVnZXIpcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT53aGljaCByZXR1cm5zIHRoZSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIDEsIDIsIDMuPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLSAgPC9jaGFwdGVyPgotPC9ib29rPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9ib29rLmNzcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvYm9vay5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YzM1ZTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9ib29rLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi1wLkNvZGUgewotCWRpc3BsYXk6IGJsb2NrOwotCXRleHQtYWxpZ246IGxlZnQ7Ci0JdGV4dC1pbmRlbnQ6IDAuMDBwdDsKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAxNXB0OwotCWZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0JZm9udC1zdHlsZTogbm9ybWFsOwotCWNvbG9yOiAjNDQ0NENDOwotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKLQl2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Ci0JdGV4dC10cmFuc2Zvcm06IG5vbmU7Ci0JZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyIsIENvdXJpZXIsIG1vbm9zcGFjZTsKLX0KLQotSDYuQ2FwdGlvbkZpZ0NvbHVtbiB7Ci0JZGlzcGxheTogYmxvY2s7Ci0JdGV4dC1hbGlnbjogbGVmdDsKLQl0ZXh0LWluZGVudDogMC4wMDAwMDBwdDsKLQltYXJnaW4tdG9wOiAzLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDExLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMC4wMDAwMDBwdDsKLQlmb250LXNpemU6IDc1JTsKLQlmb250LXdlaWdodDogYm9sZDsKLQlmb250LXN0eWxlOiBJdGFsaWM7Ci0JY29sb3I6ICMwMDAwMDA7Ci0JdGV4dC1kZWNvcmF0aW9uOiBub25lOwotCXZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKLQl0ZXh0LXRyYW5zZm9ybTogbm9uZTsKLX0KLQotcC5Ob3RlIHsKLQlkaXNwbGF5OiBibG9jazsKLQl0ZXh0LWFsaWduOiBsZWZ0OwotCXRleHQtaW5kZW50OiAwcHQ7Ci0JbWFyZ2luLXRvcDogMTkuNTAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMTkuNTAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAzMHB0OwotCWZvbnQtc2l6ZTogMTEwJTsKLQlmb250LXdlaWdodDogbm9ybWFsOwotCWZvbnQtc3R5bGU6IEl0YWxpYzsKLQljb2xvcjogIzAwMDAwMDsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0JdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwotCXRleHQtdHJhbnNmb3JtOiBub25lOwotfQotCi1FTS5VSUxhYmVsIHsKLQlmb250LXdlaWdodDogQm9sZDsKLQlmb250LXN0eWxlOiBub3JtYWw7Ci0JdGV4dC1kZWNvcmF0aW9uOiBub25lOwotCXZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKLQl0ZXh0LXRyYW5zZm9ybTogbm9uZTsKLX0KLQotRU0uQ29kZU5hbWUgewotCWZvbnQtd2VpZ2h0OiBCb2xkOwotCWZvbnQtc3R5bGU6IG5vcm1hbDsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0JdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwotCXRleHQtdHJhbnNmb3JtOiBub25lOwotCWZvbnQtZmFtaWx5OiAiQ291cmllciBOZXciLCBDb3VyaWVyLCBtb25vc3BhY2U7Ci19Ci0KLVVMLk5hdkxpc3QgewotCW1hcmdpbi1sZWZ0OiAxLjVlbTsKLQlwYWRkaW5nLWxlZnQ6IDBweDsKLQlsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Ci19Ci0KLWJvZHksaHRtbCB7Ci0JYm9yZGVyOiAwcHgKLX0KLQotLyogZm9sbG93aW5nIGZvbnQgZmFjZSBkZWNsYXJhdGlvbnMgbmVlZCB0byBiZSByZW1vdmVkIGZvciBEQkNTICovCi1ib2R5LGgxLGgyLGgzLGg0LGg1LGg2LHAsdGFibGUsdGQsY2FwdGlvbix0aCx1bCxvbCxkbCxsaSxkZCxkdCB7Ci0JZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Ci0JY29sb3I6ICMwMDAwMDAKLX0KLQotcHJlLGNvZGUgewotCWZvbnQtZmFtaWx5OiAiQ291cmllciBOZXciLCBDb3VyaWVyLCBtb25vc3BhY2U7Ci19Ci0KLS8qIGVuZCBmb250IGZhY2UgZGVjbGFyYXRpb25zICovCi1AbWVkaWEgcHJpbnQgewotCWh0bWwgewotCQlmb250LXNpemU6IDEycHQKLQl9Ci19Ci0KLWJvZHkgewotCWZvbnQtc2l6ZTogODMlOwotCWJhY2tncm91bmQ6ICNGRkZGRkY7Ci0JbWFyZ2luLWJvdHRvbTogMWVtCi19Ci0KLWgxIHsKLQlmb250LXNpemU6IDE4MCU7Ci0JbWFyZ2luLXRvcDogNXB4OwotCW1hcmdpbi1ib3R0b206IDFweAotfQotCi1oMiB7Ci0JZm9udC1zaXplOiAxNDAlOwotCW1hcmdpbi10b3A6IDI1cHg7Ci0JbWFyZ2luLWJvdHRvbTogM3B4Ci19Ci0KLWgzIHsKLQlmb250LXNpemU6IDExMCU7Ci0JbWFyZ2luLXRvcDogMjBweDsKLQltYXJnaW4tYm90dG9tOiAzcHgKLX0KLQotaDQgewotCWZvbnQtc2l6ZTogMTAwJTsKLQltYXJnaW4tdG9wOiAyMHB4OwotCW1hcmdpbi1ib3R0b206IDNweDsKLQlmb250LXN0eWxlOiBpdGFsaWMKLX0KLQotcCB7Ci0JbWFyZ2luLXRvcDogMTBweDsKLQltYXJnaW4tYm90dG9tOiAxMHB4Ci19Ci0KLXByZSB7Ci0JZm9udC1zaXplOiA5MyU7Ci0JbWFyZ2luLWxlZnQ6IDY7Ci0JY29sb3I6ICM0NDQ0Q0MKLX0KLQotY29kZSB7Ci0JZm9udC1zaXplOiA5MyU7Ci19Ci0KLXRhYmxlIHsKLQlmb250LXNpemU6IDEwMCUKLX0gIC8qIG5lZWRlZCBmb3IgcXVpcmtzIG1vZGUgKi8KLWE6bGluayB7Ci0JY29sb3I6ICMwMDAwRkYKLX0KLQotYTpob3ZlciB7Ci0JY29sb3I6ICMwMDAwODAKLX0KLQotYTp2aXNpdGVkIHsKLQl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZQotfQotCi11bCB7Ci0JbWFyZ2luLXRvcDogMTBweDsKLQltYXJnaW4tYm90dG9tOiAxMHB4OwotfQotCi1saSB7Ci0JbWFyZ2luLXRvcDogNXB4OwotCW1hcmdpbi1ib3R0b206IDVweDsKLX0KLQotbGkgcCB7Ci0JbWFyZ2luLXRvcDogNXB4OwotCW1hcmdpbi1ib3R0b206IDVweDsKLX0KLQotb2wgewotCW1hcmdpbi10b3A6IDEwcHg7Ci0JbWFyZ2luLWJvdHRvbTogMTBweDsKLX0KLQotZGwgewotCW1hcmdpbi10b3A6IDEwcHg7Ci0JbWFyZ2luLWJvdHRvbTogMTBweDsKLX0KLQotZHQgewotCW1hcmdpbi10b3A6IDVweDsKLQltYXJnaW4tYm90dG9tOiA1cHg7Ci0JZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLWRkIHsKLQltYXJnaW4tdG9wOiA1cHg7Ci0JbWFyZ2luLWJvdHRvbTogNXB4OwotfQotCi1zdHJvbmcgewotCWZvbnQtd2VpZ2h0OiBib2xkCi19Ci0KLWVtIHsKLQlmb250LXN0eWxlOiBpdGFsaWMKLX0KLQotdmFyIHsKLQlmb250LXN0eWxlOiBpdGFsaWMKLX0KLQotZGl2LnJldmlzaW9uIHsKLQlib3JkZXItbGVmdC1zdHlsZTogc29saWQ7Ci0JYm9yZGVyLWxlZnQtd2lkdGg6IHRoaW47Ci0JYm9yZGVyLWxlZnQtY29sb3I6ICM3QjY4RUU7Ci0JcGFkZGluZy1sZWZ0OiA1OwotfQotCi10aCB7Ci0JZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLXByZS5wcm9ncmFtbGlzdGluZyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogc2lsdmVyOwotCWJvcmRlcjogdGhpbjsKLQlib3JkZXItc3R5bGU6IGRhc2hlZDsKLQljb2xvcjogYmxhY2s7Ci0JcGFkZGluZy1sZWZ0OiA1OwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MzVjZjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAxLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InByZXYiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9IlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSSI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iSW50cm9kdWN0aW9uIj48L2E+SW50cm9kdWN0aW9uPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ0b2MiPjxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAxLmh0bWwjR2V0dGluZ19Qc3ljaG9QYXRoIj5HZXR0aW5nIFBzeWNob1BhdGg8L2E+PC9zcGFuPjwvbGk+PC91bD48L2Rpdj48cD5XaGF0IGlzIFBzeWNob2hQYXRoPyBQc3ljaG9QYXRoIGlzIGEgWFBhdGggMi4wIFhNTCBTY2hlbWEgQXdhcmUKLSAgICBwcm9jZXNzb3IuIEl0IGlzIG5lYXJseSBmdWxseSBjb21wbGlhbnQgdG8gdGhlIFhQYXRoIDIuMCB0ZXN0IHN1aXRlLiBJdCBpcwotICAgIGEgbGlicmFyeSB0aGF0IGRvZXMgbm90IHJlcXVpcmUgZWNsaXBzZSB0byBiZSB1c2VkLiBLbm93biBhZG9wdGVycyBvZgotICAgIFBzeWNob1BhdGggaW5jbHVkZSB0aGUgWGVyY2VzLUogcHJvamVjdCBmb3IgWE1MIFNjaGVtYXMgMS4xIGFzc2VydGlvbgotICAgIHN1cHBvcnQuPC9wPjxwPlBzeWNob1BhdGggaXMgdGhlIG9ubHkga25vd24gb3Blbi1zb3VyY2UgamF2YSBYUGF0aCAyLjAgcHJvY2Vzc29yCi0gICAgdGhhdCBpcyBmdWxseSBzY2hlbWEgYXdhcmUuIFNBWE9OIEhFIG9ubHkgc3VwcG9ydHMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KLSAgICBYTUwgU2NoZW1hIGF3YXJuZXNzIHByb3ZpZGVzIHRpZ2h0ZXIgc3RhdGljIGNoZWNraW5nLCBhbmQgY2FuIGJlIHVzZWQgdG8KLSAgICBoZWxwIGRldGVybWluZSBpZiBjZXJ0YWluIG9wZXJhdGlvbnMgY2FuIG9yIHNob3VsZCBvY2N1ciBvbiBhbiBYTUwgbm9kZS4KLSAgICBGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgUHN5Y2hvUGF0aCdzIGRlc2lnbiBwbGVhc2Ugc2VlIHRoZQotICAgIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iL1BzeWNob1BhdGhYUGF0aFByb2Nlc3Nvci9EZXNpZ24iIHRhcmdldD0iX3RvcCI+ZGVzaWduPC9hPgotICAgIGRvY3VtZW50LjwvcD48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJHZXR0aW5nX1BzeWNob1BhdGgiPjwvYT5HZXR0aW5nIFBzeWNob1BhdGg8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPkN1cnJlbnRseSB0aGVyZSBpcyBubyBzdGFuZGFsb25lIGJ1aWxkIG9mIFBzeWNob1BhdGguIEhvd2V2ZXIsIHlvdQotICAgICAgY2FuIGRvd25sb2FkIHRoZSA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy9kb3dubG9hZHMvZHJvcHMvUjMuMS9SLTMuMS0yMDA5MDYxNjAzNTEwNS8iIHRhcmdldD0iX3RvcCI+V1RQCi0gICAgICBXU1QgMy4xPC9hPiB6aXAgZmlsZSwgYW5kIHVzZSB0aGUKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5qYXIgZmlsZS4gVGhpcyBqYXIgaGFzIG5vCi0gICAgICBkZXBlbmRlbmNpZXMgb24gZWNsaXBzZSwgYW5kIHdpbGwgd29yayBhcyBhIHN0YW5kYXJkIGphciBmaWxlLiBJZiB5b3UKLSAgICAgIGFyZSB1c2luZyBhbiBPU0dJIGNvbnRhaW5lciwgdGhlbiB0aGlzIGlzIHRyZWF0ZWQgYXMgYSBzdGFuZGFyZCBPU0dJCi0gICAgICBidW5kbGUuPC9wPjxkaXYgY2xhc3M9InRpcCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPlBzeWNob1BhdGggMS4xTTE8L2gzPjxwPlBzeWNob1BhdGggMS4xTTEgaXMgYWxzbyBhdmFpbGFibGUgdG8gPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvZG93bmxvYWRzL2Ryb3BzL1IzLjIvUy0zLjJNMWItMjAwOTA4MTQxNDM1MTkvIiB0YXJnZXQ9Il90b3AiPmRvd25sb2FkPC9hPi4KLSAgICAgICAgMS4xTTEgcGFzc2VzIDk2JSBvZiB0aGUgWFBhdGggMi4wIHRlc3Qgc3VpdGUuPC9wPjwvZGl2PjxwPkFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHlvdSBjdXJyZW50bHkgbmVlZCBhcmU6PC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImRpc2MiPjxsaT48cD5JQk0gSUNVIDQuMCBvciBncmVhdGVyPC9wPjwvbGk+PGxpPjxwPlhlcmNlcyAyLjguMCBvciBncmVhdGVyPC9wPjwvbGk+PGxpPjxwPkphdmFDdXAgMC4xMCBvciBncmVhdGVyLjwvcD48L2xpPjwvdWw+PC9kaXY+PHA+SWYgdXNpbmcgZWNsaXBzZSwgdGhlc2UgYXJlIGFsbCBhdmFpbGFibGUgZnJvbSB0aGUgT3JiaXQgcHJvamVjdC4KLSAgICAgIE90aGVycyBjYW4gZmluZCB0aGUgbmVjZXNzYXJ5IGphcnMgZnJvbSB0aGVpciByZXNwZWN0aXZlIHByb2plY3QKLSAgICAgIHBhZ2VzLjwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMWFjNzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSTwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9IkludHJvZHVjdGlvbiI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAyLmh0bWwiIHRpdGxlPSJTY2hlbWEgQXdhcmUiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Ikhvd190b19mZWVkX1BzeWNob3BhdGhfWFBhdGhfZXhwcmVzc2lvbnMiPjwvYT5Vc2luZyBQc3ljaG9QYXRoIFhQYXRoIDIuMCBBUEk8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDIuaHRtbCNOb24tU2NoZW1hX0F3YXJlIj5Ob24tU2NoZW1hIEF3YXJlPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwMi5odG1sIj5TY2hlbWEgQXdhcmU8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzLmh0bWwiPkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aDwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwMy5odG1sI0NvbnN0YW50cyI+Q29uc3RhbnRzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwMi5odG1sIj5QYXRoIGV4cHJlc3Npb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwMy5odG1sIj5BeGlzIHN0ZXBzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNC5odG1sIj5TZXQgZGlmZmVyZW5jZSwgaW50ZXJzZWN0aW9uIGFuZCBVbmlvbjwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDUuaHRtbCI+QXJpdGhtZXRpYyBFeHByZXNzaW9uczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNS5odG1sI1VuYXJ5Ij5VbmFyeTwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDVzMDIuaHRtbCI+TXVsdGlwbGljYXRpb24gYW5kIERpdmlzaW9uOjwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDVzMDMuaHRtbCI+QWRkaXRpb24gYW5kIFN1YnRyYWN0aW9uOjwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA2Lmh0bWwiPlJhbmdlIGV4cHJlc3Npb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNy5odG1sIj5Db21wYXJpc29uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDguaHRtbCI+Q29uZGl0aW9uYWwgRXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA5Lmh0bWwiPlF1YW50aWZpZWQgRXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczEwLmh0bWwiPkFuZCwgT3IgRXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczExLmh0bWwiPlNlcXVlbmNlVHlwZSBNYXRjaGluZyBFeHByZXNzaW9uczwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PC91bD48L2Rpdj48cD5TaW5jZSBQc3ljaG9QYXRoIGhhcyBiZWVuIGltcGxlbWVudGVkIGFzIGFuIGV4dGVybmFsIGxpYnJhcnkgYW5kIG5vdAotICAgIGFzIGEgY29tcGxldGUgcHJvZ3JhbSwgaW4gb3JkZXIgdG8gdXNlIGl0LCBpdCBuZWVkcyB0byBiZSBhY2Nlc3NlZCBmcm9tCi0gICAgaW5zaWRlIGFub3RoZXIgcHJvZ3JhbS4gVG8gcHJvY2VzcyBYUGF0aCAyLjAgZXhwcmVzc2lvbnMgdXNpbmcgUHN5Y2hvUGF0aAotICAgIGZyb20gYW5vdGhlciBwcm9ncmFtcyBvbmUgbmVlZHMgdG8gZ28gdGhyb3VnaCB0aGUgZm9sbG93aW5nCi0gICAgcHJvY2Vzczo8L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+TG9hZCB0aGUgWE1MIGRvY3VtZW50PC9wPjwvbGk+PGxpPjxwPk9wdGlvbmFsbHkgdmFsaWRhdGUgdGhlIFhNTCBkb2N1bWVudDwvcD48L2xpPjxsaT48cD5Jbml0aWFsaXplIHN0YXRpYyBhbmQgZHluYW1pYyBjb250ZXh0IGluIHJlc3BlY3QgdG8gdGhlIGRvY3VtZW50Ci0gICAgICAgIHJvb3Q8L3A+PC9saT48bGk+PHA+UGFyc2UgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uPC9wPjwvbGk+PGxpPjxwPlN0YXRpY2FsbHkgdmVyaWZ5IHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbjwvcD48L2xpPjxsaT48cD5FdmFsdWF0ZSB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24gaW4gcmVzcGVjdCB0byB0aGUgWE1MCi0gICAgICAgIGRvY3VtZW50PC9wPjwvbGk+PC9vbD48L2Rpdj48cD5UbyBnaXZlIGEgYmV0dGVyIGlkZWEgb2YgaG93IHRoaXMgcHJvY2VzcyBhY3R1YWxseSB3b3Jrcywgd2UmcnNxdW87bGwgZ28KLSAgICB0aHJvdWdoIGFuIGV4YW1wbGUgb2YgcHJvY2Vzc2luZyBhbmQgZXZhbHVhdGluZyB0aGUgc3RyaW5nIGV4cHJlc3Npb24KLSAgICAmbGRxdW87SGVsbG8gV29ybGQhJnJkcXVvOy4gSW4gdGhpcyBleGFtcGxlIHRoZSBYTUwgZG9jdW1lbnQgdGhhdCB3ZSBsb2FkIGlzIGNhbGxlZAotICAgICZsZHF1bztYUGV4YW1wbGUueG1sJnJkcXVvOy48L3A+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iTm9uLVNjaGVtYV9Bd2FyZSI+PC9hPk5vbi1TY2hlbWEgQXdhcmU8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4vKioKLSAqIEZpcnN0IGxvYWQgYW5kIG9wdGlvbmFsbHkgdmFsaWRhdGUgdGhlIFhNTCBkb2N1bWVudCAKLSovCi0vLyBDcmVhdGUgYW4gSW5wdXRTdHJlYW0gZnJvbSB0aGUgWE1MIGRvY3VtZW50Ci1JbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oJmxkcXVvO1hQZXhhbXBsZS54bWwmcmRxdW87KTsKLQotLy8gSW5pdGlhbGl6aW5nIHRoZSBYZXJjZXMgRE9NIGxvYWRlci4KLURPTUxvYWRlciBsb2FkZXIgPSBuZXcgWGVyY2VzTG9hZGVyKCk7Ci0KLS8vIE9wdGlvbmFsbHkgc2V0IGZsYWcgdG8gdmFsaWRhdGUgWE1MIGRvY3VtZW50IGxvYWRlci5zZXR2YWxpZGF0aW5nKHZhbGlkYXRlKTsKLS8vIExvYWRzIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHN0b3JlcyB0aGUgRE9NIHJvb3QKLURvY3VtZW50IGRvYyA9IGxvYWRlci5sb2FkKGlzKTsKLQotLyoqCi0gKiBEeW5hbWljIGNvbnRleHRzIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gZGVmYXVsdHMKLSAqIGRlcGVuZGVudCBvbiB0aGUgWE1MIFNjaGVtYS4KLSovCi0KLS8vIEV4dHJhY3RpbmcgdGhlIHNjaGVtYSBmcm9tIERPTSByb290IG9mIFhwZXhwcmVzc2lvbi54bWwuCi1FbGVtZW50UFNWSSByb290UFNWSSA9IChFbGVtZW50UFNWSSlkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci1YU01vZGVsIHNjaGVtYSA9IHJvb3RQU1ZJLmdldFNjaGVtYUluZm9ybWF0aW9uKCk7Ci0KLS8vIEluaXRpYWxpc2luZyB0aGUgRHluYW1pY0NvbnRleHQuCi1EeW5hbWljQ29udGV4dCBkYyA9IG5ldyBEZWZhdWx0RHluYW1pY0NvbnRleHQoc2NoZW1hLCBkb2MpOwotCi0vLyBSZWdpc3RlciB0aGUgbmFtZXNwYWNlcyBvZiB0aGUgWFBhdGggMi4wIHByZWRlZmluZWQgZGF0YXR5cGVzCi1kYy5hZGRuYW1lc3BhY2UoJmxkcXVvO3hzJnJkcXVvOywmcmRxdW87W2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXSZyZHF1bzspOwotCi0vLyBSZWdpc3RlciB0aGUgWFBhdGggMi4wIHN0YW5kYXJkIGZ1bmN0aW9ucwotZGMuYWRkZnVuY3Rpb25saWJyYXJ5KG5ldyBGbkZ1bmN0aW9uTGlicmFyeSgpKTsKLWRjLmFkZGZ1bmN0aW9ubGlicmFyeShuZXcgWFNDdHJMaWJyYXJ5KCkpOwotCi0vKioKLSAqIFBhcnNpbmcgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uIGludG8gYW4gQVNUIHJlcHJlc2VudGF0aW9uCi0gKi8KLS8vIEluaXRpYWxpc2VzIFBzeWNob1BhdGgmcnNxdW87cyBzdXBwbGllZCBwYXJzZXIuCi1YUGF0aFBhcnNlciB4cHAgPSBuZXcgSmZsZXhDdXBQYXJzZXIoKTsKLQotLy8gUGFyc2VzIHRoZSBYUGF0aCBleHByZXNzaW9uLgotWFBhdGggeHAgPSB4cHAucGFyc2UoeHBhdGgpOwotLyoqCi0gKiBTdGF0aWMgY2hlY2sgdGhlIEFTVCB0byB2ZXJpZnQgc3RydWN0dXJhbCB2YWxpZGl0eSBvZiAgCi0gKiBYUGF0aCAyLjAgZXhwcmVzc2lvbgotICovCi0KLS8vIEluaXRpYWxpemluZyBTdGF0aWNDaGVja2VyLgotU3RhdGljQ2hlY2tlciBuYW1lY2hlY2sgPSBuZXcgU3RhdGljTmFtZVJlc29sdmVyKHNjKTsKLQotLy8gU3RhdGljIENoZWNraW5nIHRoZSBYcGF0aCBleHByZXNzaW9uICZyc3F1bztIZWxsbyBXb3JsZCEmcnNxdW87IG5hbWVjaGVjay5jaGVjayh4cCk7Ci0vKioKLSAqIEV2YWx1YXRlIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbgotICovCi0gCi0vLyBJbml0aWFsaXppbmcgdGhlIGV2YWx1YXRvciB3aXRoIER5bmFtaWNDb250ZXh0IGFuZCB0aGUgbmFtZQotLy8gb2YgdGhlIFhNTCBkb2N1bWVudCBYUGV4YW1wbGUueG1sIGFzIHBhcmFtZXRlcnMuCi1FdmFsdWF0b3IgZXZhbCA9IG5ldyBEZWZhdWx0RXZhbHVhdG9yKGRjLCBkb2MpOwotIAotLy8gRXZhbHVhdGVzIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiwgc3RvcmluZyB0aGUgcmVzdWx0Ci0vLyBpbiB0aGUgUmVzdWx0U2VxdWVuY2UKLVJlc3VsdFNlcXVlbmNlIHJzID0gZXZhbC5ldmFsdWF0ZSh4cCk7IAotPC9wcmU+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWE4N2NmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+U2NoZW1hIEF3YXJlPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iVXNpbmcgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgQVBJIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9IlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSSI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iU2NoZW1hX0F3YXJlIj48L2E+U2NoZW1hIEF3YXJlPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPi8qKgotICogRmlyc3QgbG9hZCBhbmQgb3B0aW9uYWxseSB2YWxpZGF0ZSB0aGUgWE1MIGRvY3VtZW50IAotKi8KLQotIFNjaGVtYUZhY3Rvcnkgc2NoZW1hRmFjdG9yeSA9IG5ldyBYTUxTY2hlbWFGYWN0b3J5KCk7Ci0gVVJMIHNjaGVtYVVSTCA9IG5ldyBGaWxlKCJYUGV4YW1wbGUueHNkIikudG9VUkwoKTsKLSBTY2hlbWEgamF4cHNjaGVtYSA9IHNjaGVtYUZhY3RvcnkubmV3U2NoZW1hKHNjaGVtYVVSTCk7Ci0KLS8vIENyZWF0ZSBhbiBJbnB1dFN0cmVhbSBmcm9tIHRoZSBYTUwgZG9jdW1lbnQKLUlucHV0U3RyZWFtIGlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSgmbGRxdW87WFBleGFtcGxlLnhtbCZyZHF1bzspOwotCi0vLyBJbml0aWFsaXppbmcgdGhlIFhlcmNlcyBET00gbG9hZGVyLgotRE9NTG9hZGVyIGxvYWRlciA9IG5ldyBYZXJjZXNMb2FkZXIoamF4cHNjaGVtYSk7Ci0KLS8vIE9wdGlvbmFsbHkgc2V0IGZsYWcgdG8gdmFsaWRhdGUgWE1MIGRvY3VtZW50IGxvYWRlci5zZXR2YWxpZGF0aW5nKHZhbGlkYXRlKTsKLS8vIExvYWRzIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHN0b3JlcyB0aGUgRE9NIHJvb3QKLURvY3VtZW50IGRvYyA9IGxvYWRlci5sb2FkKGlzKTsKLQotLyoqCi0gKiBEeW5hbWljIGNvbnRleHRzIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gZGVmYXVsdHMKLSAqIGRlcGVuZGVudCBvbiB0aGUgWE1MIFNjaGVtYS4KLSovCi0KLS8vIEluaXRpYWxpc2luZyB0aGUgRHluYW1pY0NvbnRleHQuCi1EeW5hbWljQ29udGV4dCBkYyA9IG5ldyBEZWZhdWx0RHluYW1pY0NvbnRleHQoamF4cHNjaGVtYSwgZG9jKTsKLQotLy8gUmVnaXN0ZXIgdGhlIG5hbWVzcGFjZXMgb2YgdGhlIFhQYXRoIDIuMCBwcmVkZWZpbmVkIGRhdGF0eXBlcwotZGMuYWRkbmFtZXNwYWNlKCZsZHF1bzt4cyZyZHF1bzssJnJkcXVvO1todHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSBodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYV0mcmRxdW87KTsKLQotLy8gUmVnaXN0ZXIgdGhlIFhQYXRoIDIuMCBzdGFuZGFyZCBmdW5jdGlvbnMKLWRjLmFkZGZ1bmN0aW9ubGlicmFyeShuZXcgRm5GdW5jdGlvbkxpYnJhcnkoKSk7Ci1kYy5hZGRmdW5jdGlvbmxpYnJhcnkobmV3IFhTQ3RyTGlicmFyeSgpKTsKLQotLyoqCi0gKiBQYXJzaW5nIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiBpbnRvIGFuIEFTVCByZXByZXNlbnRhdGlvbgotICovCi0vLyBJbml0aWFsaXNlcyBQc3ljaG9QYXRoJnJzcXVvO3Mgc3VwcGxpZWQgcGFyc2VyLgotWFBhdGhQYXJzZXIgeHBwID0gbmV3IEpmbGV4Q3VwUGFyc2VyKCk7Ci0KLS8vIFBhcnNlcyB0aGUgWFBhdGggZXhwcmVzc2lvbi4KLVhQYXRoIHhwID0geHBwLnBhcnNlKHhwYXRoKTsKLQotLyoqCi0gKiBTdGF0aWMgY2hlY2sgdGhlIEFTVCB0byB2ZXJpZnQgc3RydWN0dXJhbCB2YWxpZGl0eSBvZiAgCi0gKiBYUGF0aCAyLjAgZXhwcmVzc2lvbgotICovCi0KLS8vIEluaXRpbGlzaW5nIFN0YXRpY0NoZWNrZXIuCi1TdGF0aWNDaGVja2VyIG5hbWVjaGVjayA9IG5ldyBTdGF0aWNOYW1lUmVzb2x2ZXIoc2MpOwotCi0vLyBTdGF0aWMgQ2hlY2tpbmcgdGhlIFhwYXRoIGV4cHJlc3Npb24gJnJzcXVvO0hlbGxvIFdvcmxkISZyc3F1bzsgbmFtZWNoZWNrLmNoZWNrKHhwKTsKLS8qKgotICogRXZhbHVhdGUgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uCi0gKi8KLQotLy8gSW5pdGlhbGlzaW5nIHRoZSBldmFsdWF0b3Igd2l0aCBEeW5hbWljQ29udGV4dCBhbmQgdGhlIG5hbWUKLS8vIG9mIHRoZSBYTUwgZG9jdW1lbnQgWFBleGFtcGxlLnhtbCBhcyBwYXJhbWV0ZXJzLgotRXZhbHVhdG9yIGV2YWwgPSBuZXcgRGVmYXVsdEV2YWx1YXRvcihkYywgZG9jKTsgCi0KLS8vIEV2YWx1YXRlcyB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24sIHN0b3JpbmcgdGhlIHJlc3VsdAotLy8gaW4gdGhlIFJlc3VsdFNlcXVlbmNlCi1SZXN1bHRTZXF1ZW5jZSBycyA9IGV2YWwuZXZhbHVhdGUoeHApOyAKLTwvcHJlPjxwPlhQYXRoIDIuMCBkZWZpbmVzIGV2ZXJ5dGhpbmcgdG8gYmUgYSBzZXF1ZW5jZSBvZiBpdGVtcywgaW5jbHVkaW5nCi0gICAgICB0aGUgYXJndW1lbnRzIHRvIGV4cHJlc3Npb25zIGFuZCB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbnMuIFRodXMsIHRoZQotICAgICAgb3ZlcmFsbCByZXN1bHQgb2YgYW4gWFBhdGggZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGFsc28gYSBzZXF1ZW5jZSBvZgotICAgICAgaXRlbXMuIFBzeWNob1BhdGggdXNlcyB0aGUgY2xhc3MgUmVzdWx0U2VxdWVuY2UgYXMgYSBDb2xsZWN0aW9ucyB3cmFwcGVyCi0gICAgICB0byBzdG9yZSB0aGVzZSBzZXF1ZW5jZXMgYW5kIHRoZXJlZm9yZSwgdGhlIHJlc3VsdCBvZiBhbiBldmFsdWF0aW9uIGlzCi0gICAgICBvZiB0aGlzIHR5cGUgYWxzby4gVGhlIFJlc3VsdFNlcXVlbmNlIGNvbnNpc3RzIG9mIHplcm8gb3IgbW9yZSBpdGVtczsgYW4KLSAgICAgIGl0ZW0gbWF5IGJlIGEgbm9kZSBvciBhIHNpbXBsZS12YWx1ZS4gJmxkcXVvO0hlbGxvIFdvcmxkISZyZHF1bzsgaXMgYW4gZXhhbXBsZSBvZiBhCi0gICAgICBzaW5nbGUgdmFsdWUgd2l0aCBsZW5ndGggMS4gQSBnZW5lcmFsIHNlcXVlbmNlIGNvdWxkIGJlIHdyaXR0ZW4gYXMgKCZsZHF1bzthJnJkcXVvOywKLSAgICAgICZsZHF1bztzJnJkcXVvOywgJmxkcXVvO2QmcmRxdW87LCAmbGRxdW87ZiZyZHF1bzspLjwvcD48cD5FeHRyYWN0aW9uIG9mIGNlcnRhaW4gaXRlbXMgZnJvbSB0aGUgUmVzdWx0U2VxdWVuY2UgY2xhc3MgaXMKLSAgICAgIGRlc2NyaWJlZCBiZWxvdywgd2l0aCBkZXRhaWxzIG9mIHRoZSBkaWZmZXJlbnQgb3BlcmF0aW9ucyB0aGF0IG9uZSBtaWdodAotICAgICAgYXBwbHkgb24gdGhlIFJlc3VsdFNlcXVlbmNlLiBDb25zaWRlciB0aGF0ICZyc3F1bztycyZyc3F1bzsgaXMgdGhlIFJlc3VsdFNlcXVlbmNlLAotICAgICAgdGhlbjo8L3A+PHA+PC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4vLyBXaWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZSwgaW4gdGhpcwotLy8gY2FzZSBvZiAmcnNxdW87SGVsbG8gV29ybGQhJnJzcXVvOyBleHByZXNzaW9uIHNpemUgPSAxLgotcnMuc2l6ZSgpOyAKLQotLy8gV2lsbCByZXR1cm4gdGhlIG4mcnNxdW87dGggZWxlbWVudCBpbiB0aGUgc2VxdWVuY2UsIGluIHRoaXMgY2FzZSBvZgotLy8gJnJzcXVvO0hlbGxvIFdvcmxkISZyc3F1bzssIGlmIG4gPSAxLCB0aGVuIGl0IHdpbGwgcmV0dXJuCi0vLyBYU1N0cmluZyBvZiAmbGRxdW87SGVsbG8gV29ybGQhJnJkcXVvOywgYnV0IGlmIG4gPSAyLCBpdCB3aWxsIHJldHVybgotLy8gRW1wdHkgUmVzdWx0LgotcnMuZ2V0KG4pOwotCi0vL1dpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LgotcnMuZW1wdHkoKTsgCi0KLS8vIFdpbGwgcmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzZXF1ZW5jZSwgCi0vLyBpbiB0aGlzIGV4YW1wbGUgaXQgd2lsbCByZXR1cm4gWFNTdHJpbmcgb2YgJmxkcXVvO0hlbGxvIFdvcmxkISZyZHF1bzsgCi1ycy5maXJzdCgpIAotPC9wcmU+PHA+SG93ZXZlciwgYWxsIHRoZSBpdGVtcyBleHRyYWN0ZWQgd2lsbCBiZSBvZiB0aGUgdHlwZSZyc3F1bztzIGJhc2UgY2xhc3MKLSAgICAgIEFueVR5cGUgYW5kIG5lZWQgdG8gYmUgY2FzdGVkIGludG8gaXRzIGFjdHVhbCBzdWJ0eXBlLjwvcD48cD5DZXJ0YWluIG9wZXJhdGlvbnMgYWx3YXlzIHJldHVybiBhIHBhcnRpY3VsYXIgdHlwZSBhbmQgdXNpbmcgdGhpcwotICAgICAga25vd2xlZGdlLCB0aGUgZXh0cmFjdGVkIGl0ZW0gY2FuIGJlIGltbWVkaWF0ZWx5IGNhc3RlZC4gSW4gb3VyIGV4YW1wbGUKLSAgICAgICZsZHF1bztIZWxsbyBXb3JsZCEmcmRxdW87IHJldHVybnMgYSBzdHJpbmcgKGVhc2lseSBrbm93biBhcyBpdCBpcyBpbnNpZGUgdGhlIHF1b3RlcwotICAgICAgJnJzcXVvOyAmcnNxdW87ICksIHNvIHRoaXMgY2FuIHNhZmVseSBiZSBjYXN0ZWQgYXMgc3VjaDo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlhTU3RyaW5nIHhzc3RyaW5nID0gWFNTdHJpbmcpKHJzLmZpcnN0KCkpOzwvcHJlPlRoZQotICAgICAgYWN0dWFsIHJlc3VsdCBjYW4gbm93IGJlIGV4dHJhY3RlZCBmcm9tIHRoaXMgWFNTdHJpbmcgaW4gdGhlIGZvbGxvd2luZwotICAgICAgbWFubmVyOiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+U3RyaW5nIHN0ciA9IHhzc3RyaW5nLnZhbHVlKCk7PC9wcmU+PC9wPjxwPlRoZSBkZXRhaWxzIG9mIGhvdyB0byBjYXN0IGV4dHJhY3RlZCBpdGVtcyBmcm9tIEFueVR5cGUgaW50byB0aGVpcgotICAgICAgYWN0dWFsIHN1YnR5cGVzIHdpdGggZXhhbXBsZXMgaXMgaW4gdGhlIG5leHQgc2VjdGlvbiBvbiBIb3cgdG8gdXNlIGVhY2gKLSAgICAgIHByb2R1Y3Rpb24gaW4gdGhlIGdyYW1tYXIuPC9wPjxwPkhvd2V2ZXIsIGlmIHRoZSBleHBlY3RlZCByZXR1cm4gdHlwZSBpcyB1bmtub3duIG9yIG11bHRpcGxlIHR5cGVzCi0gICAgICBhcmUgcG9zc2libGUsIHRoZSB0eXBlcyBoaWVyYXJjaHkgY2FuIGJlIHRyYXZlcnNlZCBpbiBhIGJyZWFkdGggZmlyc3QKLSAgICAgIG1hbm5lciBtYWtpbmcgdXNlIG9mIHRoZSBKYXZhIGluc3RhbmNlb2Ygb3BlcmF0b3IgdG8gYXNjZXJ0YWluIHRoZQotICAgICAgYWN0dWFsIHR5cGUuJm5ic3A7PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JhOTIxZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+SG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iVXNpbmcgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgQVBJIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDIuaHRtbCIgdGl0bGU9IlNjaGVtYSBBd2FyZSI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAzczAyLmh0bWwiIHRpdGxlPSJQYXRoIGV4cHJlc3Npb25zIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9Ikhvd190b191c2VfdGhlX1hQYXRoXzIuMF9ncmFtbWFyX3dpdGhfUHN5Y2hvUGF0aCI+PC9hPkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+SW4gdGhpcyBzZWN0aW9uIHdlIHdpbGwgdHJ5IHRvIGdpdmUgeW91IGFuIG92ZXJ2aWV3IG9mIHRoZSBYUGF0aAotICAgICAgMi4wIGdyYW1tYXIgaW4gZ2VuZXJhbCBhbmQgaG93IGVhY2ggcHJvZHVjdGlvbiBpbiB0aGUgZ3JhbW1hciBzaG91bGQgYmUKLSAgICAgIHVzZWQgd2l0aCBQc3ljaG9QYXRoLiBGb3IgdGhlIGZvcm1hbCBzcGVjaWZpY2F0aW9ucywgc2VlIHRoZSBXM0MKLSAgICAgIHdlYi1zaXRlIGZvciBYUGF0aCAyLjAgc3BlY2lmaWNhdGlvbiA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoMjAiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgyMDwvYT4uPC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJDb25zdGFudHMiPjwvYT5Db25zdGFudHM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlN0cmluZyBsaXRlcmFscyBhcmUgd3JpdHRlbiBhcyAmbGRxdW87SGVsbG8mcmRxdW87IG9yICZsc3F1bztIZWxsbyZyc3F1bzsuIEluIGVhY2ggY2FzZQotICAgICAgICB0aGUgb3Bwb3NpdGUga2luZCBvZiBxdW90YXRpb24gbWFyayBjYW4gYmUgdXNlZCB3aXRoaW4gdGhlIHN0cmluZzogJmxzcXVvO0hlCi0gICAgICAgIHNhaWQgJmxkcXVvO0hlbGxvJnJkcXVvOyAmcnNxdW87IG9yICZsZHF1bztMb25kb24gaXMgYSBiaWcgY2l0eSZyZHF1bzsuIFRvIGZlZWQgUHN5Y2hvUGF0aCwgJmxkcXVvOyAmbHNxdW87SGVsbG8KLSAgICAgICAgV29ybGQhJnJzcXVvOyAmcmRxdW87b3IgJmxkcXVvOyAmbGRxdW87SGVsbG8gV29ybGQhJnJkcXVvOyAmcmRxdW87IGNhbiBiZSB1c2VkIHRvIGZlZWQgaXQgd2l0aCBzdHJpbmdzLgotICAgICAgICBSZW1lbWJlciB0aGF0IHRoZSBSZXN1bHRTZXF1ZW5jZSByZXR1cm5zIEFueVR5cGUgc28gc2luY2UgYSBzdHJpbmcgaXMKLSAgICAgICAgYmVpbmcgZXhwZWN0ZWQgYXMgdGhlIHJlc3VsdCwgZmlyc3QgaXQgaGFzIHRvIGJlIGNhc3RlZCBpbiB0aGUgY29kZQotICAgICAgICBsaWtlIHRoaXM6IDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5YU1N0cmluZyB4c3N0cmluZyA9IChYU1N0cmluZykocnMuZmlyc3QoKSk7PC9wcmU+Ci0gICAgICAgIE51bWVyaWMgY29uc3RhbnRzIGZvbGxvdyB0aGUgSmF2YSBydWxlcyBmb3IgZGVjaW1hbCBsaXRlcmFsczogZm9yCi0gICAgICAgIGV4YW1wbGUsIDQgb3IgNC42NzsgYSBuZWdhdGl2ZSBudW1iZXIgY2FuIGJlIHdyaXR0ZW4gYXMgLTMuMDUuIFRoZQotICAgICAgICBudW1lcmljIGxpdGVyYWwgaXMgdGFrZW4gYXMgYSBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcgotICAgICAgICBpZiBpdCB1c2VzIHNjaWVudGlmaWMgbm90YXRpb24gKGUuZy4gMS4wZTcpLCBhcyBhIGZpeGVkIHBvaW50IGRlY2ltYWwKLSAgICAgICAgaWYgaXQgaW5jbHVkZXMgYSBkZWNpbWFsIHBvaW50LCBvciBhcyBhbiBpbnRlZ2VyIG90aGVyd2lzZS4gV2hlbgotICAgICAgICBleHRyYWN0aW5nIG51bWJlciBsaXRlcmFscyBmcm9tIHRoZSBSZXN1bHRTZXF1ZW5jZSwgcG9zc2libGUgdHlwZXMgdG8KLSAgICAgICAgYmUgcmV0dXJuZWQgaW5jbHVkZSA8c3BhbiBjbGFzcz0iaXRhbGljIj5YU0RlY2ltYScnbCAoZS5nLiZuYnNwOzoKLSAgICAgICAgeHM6ZGVjaW1hbDogNC42NyksJydYU0ludGVnZXIgJycoZS5nLiZuYnNwOzogeHM6aW50ZWdlcjogNCkgb3IKLSAgICAgICAgJydYU0RvdWJsZTwvc3Bhbj4gKGUuZy4mbmJzcDs6IHhzOmRvdWJsZSAxZTApLiBBbGwgb2Ygd2hpY2ggbmVlZCB0byBiZQotICAgICAgICBjYXN0IGluIHRoZSBzYW1lIG1hbm5lciBhcyBzdGF0ZWQgYmVmb3JlOiBmcm9tIEFueVR5cGUgdG8gdGhlaXIKLSAgICAgICAgY29ycmVzcG9uZGluZyB0eXBlcy48L3A+PHA+VGhlcmUgYXJlIG5vIGJvb2xlYW4gY29uc3RhbnRzIGFzIHN1Y2g6IDxzcGFuIGNsYXNzPSJpdGFsaWMiPnRydWUsIGZhbHNlPC9zcGFuPiBpbnN0ZWFkIHRoZSBmdW5jdGlvbiBjYWxscwotICAgICAgICA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz50cnVlKCk8L3N0cm9uZz48L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5mYWxzZSgpPC9zdHJvbmc+PC9zcGFuPiBhcmUgdXNlZC48L3A+PHA+Q29uc3RhbnRzIG9mIG90aGVyIGRhdGEgdHlwZXMgY2FuIGJlIHdyaXR0ZW4gdXNpbmcgY29uc3RydWN0b3JzLgotICAgICAgICBUaGVzZSBsb29rIGxpa2UgZnVuY3Rpb24gY2FsbHMgYnV0IHJlcXVpcmUgYSBzdHJpbmcgbGl0ZXJhbCBhcyB0aGVpcgotICAgICAgICBhcmd1bWVudC4gRm9yIGV4YW1wbGUsIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnhzOmZsb2F0KCZsZHF1bzsxMC43JnJkcXVvOyk8L3N0cm9uZz48L3NwYW4+IHByb2R1Y2VzIGEgc2luZ2xlLXByZWNpc2lvbgotICAgICAgICBmbG9hdGluZyBwb2ludCBudW1iZXIuPC9wPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczAyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVhZDAwYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+UGF0aCBleHByZXNzaW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDJzMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwMy5odG1sIiB0aXRsZT0iQXhpcyBzdGVwcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iUGF0aF9leHByZXNzaW9ucyI+PC9hPlBhdGggZXhwcmVzc2lvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPkEgcGF0aCBleHByZXNzaW9uIGlzIGEgc2VxdWVuY2Ugb2Ygc3RlcHMgc2VwYXJhdGVkIGJ5IHRoZQotICAgICAgICA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4vJycnIG9yICcnJy8vPC9zdHJvbmc+PC9zcGFuPiBvcGVyYXRvci4gRm9yIGV4YW1wbGUsCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi4uL0BkZXNjPC9zdHJvbmc+PC9zcGFuPiBzZWxlY3RzIHRoZSBkZXNjIGF0dHJpYnV0ZQotICAgICAgICBvZiB0aGUgcGFyZW50IG9mIHRoZSBjb250ZXh0IG5vZGUuPC9wPjxwPkluIFhQYXRoIDIuMCwgcGF0aCBleHByZXNzaW9ucyBoYXZlIGJlZW4gZ2VuZXJhbGl6ZWQgc28gdGhhdCBhbnkKLSAgICAgICAgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcGVyYW5kIG9mIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi88L3N0cm9uZz48L3NwYW4+LCAoYm90aCBvbiB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0KSwgYXMgbG9uZyBhcwotICAgICAgICBpdHMgdmFsdWUgaXMgYSBzZXF1ZW5jZSBvZiBub2Rlcy4gRm9yIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhCi0gICAgICAgIHVuaW9uIGV4cHJlc3Npb24gKGluIHBhcmVudGhlc2VzKSBvciBhIGNhbGwgdG8gdGhlIGlkKCkKLSAgICAgICAgZnVuY3Rpb24uPC9wPjxwPkluIHByYWN0aWNlLCBpdCBvbmx5IG1ha2VzIHNlbnNlIHRvIHVzZSBleHByZXNzaW9ucyBvbiB0aGUgcmlnaHQKLSAgICAgICAgb2YgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+Ii8iPC9zdHJvbmc+PC9zcGFuPiBpZiB0aGV5IGRlcGVuZCBvbiB0aGUgY29udGV4dAotICAgICAgICBpdGVtLiBJdCBpcyBsZWdhbCB0byB3cml0ZSAkeC8keSBwcm92aWRlZCBib3RoICR4IGFuZCAkeSBhcmUgc2VxdWVuY2VzCi0gICAgICAgIG9mIG5vZGVzLCBidXQgdGhlIHJlc3VsdCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHdyaXRpbmcgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+IDxzcGFuIGNsYXNzPSJpdGFsaWMiPi4vJHk8L3NwYW4+Ci0gICAgICAgIDwvc3Ryb25nPjwvc3Bhbj4uPC9wPjxwPk5vdGUgdGhhdCB0aGUgZXhwcmVzc2lvbnMgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+Li8kWDwvc3Ryb25nPjwvc3Bhbj4KLSAgICAgICAgb3IgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+JFgvLjwvc3Ryb25nPjwvc3Bhbj4gY2FuIGJlIHVzZWQgdG8gcmVtb3ZlCi0gICAgICAgIGR1cGxpY2F0ZXMgZnJvbSA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4kWDwvc3Ryb25nPjwvc3Bhbj4gYW5kIHNvcnQgdGhlCi0gICAgICAgIHJlc3VsdHMgaW50byBkb2N1bWVudCBvcmRlci48L3A+PHA+VGhlIG9wZXJhdG9yIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi8vPC9zdHJvbmc+PC9zcGFuPiBpcyBhbgotICAgICAgICBhYmJyZXZpYXRpb24gZm9yIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi9kZXNjZW5kYW50LW9yLXNlbGY6Om5vZGUoKTwvc3Ryb25nPjwvc3Bhbj4uIEFuIGV4cHJlc3Npb24gb2YKLSAgICAgICAgdGhlIGZvcm0gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+L0U8L3N0cm9uZz48L3NwYW4+IGlzIHNob3J0aGFuZCBmb3IKLSAgICAgICAgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cm9vdCguKS9FPC9zdHJvbmc+PC9zcGFuPiwgYW5kIHRoZSBleHByZXNzaW9uCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi8nJycgb24gaXRzIG93biBpcyBzaG9ydGhhbmQgZm9yCi0gICAgICAgICcnJ3Jvb3QoLik8L3N0cm9uZz48L3NwYW4+LjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwMy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczAzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NjYzOGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczAzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+QXhpcyBzdGVwczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDJzMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAyczAzczAyLmh0bWwiIHRpdGxlPSJQYXRoIGV4cHJlc3Npb25zIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDJzMDNzMDQuaHRtbCIgdGl0bGU9IlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJBeGlzX3N0ZXBzIj48L2E+QXhpcyBzdGVwczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhlIGJhc2ljIHByaW1pdGl2ZSBmb3IgYWNjZXNzaW5nIGEgc291cmNlIGRvY3VtZW50IGlzIHRoZSBheGlzCi0gICAgICAgIHN0ZXAuIEF4aXMgc3RlcHMgbWF5IGJlIGNvbWJpbmVkIGludG8gcGF0aCBleHByZXNzaW9ucyB1c2luZyB0aGUgcGF0aAotICAgICAgICBvcGVyYXRvcnMgIi8iIGFuZCAiLy8iLCBhbmQgdGhleSBtYXkgYmUgZmlsdGVyZWQgdXNpbmcgZmlsdGVyCi0gICAgICAgIGV4cHJlc3Npb25zIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgcmVzdWx0IG9mIGFueSBvdGhlcgotICAgICAgICBleHByZXNzaW9uLjwvcD48cD5BbiBheGlzIHN0ZXAgaGFzIHRoZSBiYXNpYyBmb3JtIGF4aXM6Om5vZGUtdGVzdCwgYW5kIHNlbGVjdHMKLSAgICAgICAgbm9kZXMgb24gYSBnaXZlbiBheGlzIHRoYXQgc2F0aXNmeSB0aGUgbm9kZS10ZXN0LiBUaGUgYXhlcyBhdmFpbGFibGUKLSAgICAgICAgYXJlOjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD5lbGVtZW50OiBhZ2U8L3A+PC9saT48bGk+PHA+ZWxlbWVudDogYWdlPC9wPjwvbGk+PC9vbD48L2Rpdj48cD5UaGUgcmVzdCBvZiB0aGUgYXhlcyBhY3QgaW4gdGhlIHNhbWUgbWFubmVyLjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwNC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMDE5OGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMDMuaHRtbCIgdGl0bGU9IkF4aXMgc3RlcHMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwNS5odG1sIiB0aXRsZT0iQXJpdGhtZXRpYyBFeHByZXNzaW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iU2V0X2RpZmZlcmVuY2UuMkNfaW50ZXJzZWN0aW9uX2FuZF9VbmlvbiI+PC9hPlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD5UaGUgZXhwcmVzc2lvbiBFMSBleGNlcHQgRTIgc2VsZWN0cyBhbGwgbm9kZXMgdGhhdCBhcmUgaW4gRTEKLSAgICAgICAgdW5sZXNzIHRoZXkgYXJlIGFsc28gaW4gRTIuIEJvdGggZXhwcmVzc2lvbnMgbXVzdCByZXR1cm4gc2VxdWVuY2VzIG9mCi0gICAgICAgIG5vZGVzLiBUaGUgcmVzdWx0cyBhcmUgcmV0dXJuZWQgaW4gZG9jdW1lbnQgb3JkZXIuIEZvciBleGFtcGxlLCBAKgotICAgICAgICBleGNlcHQgQG5vdGUgcmV0dXJucyBhbGwgYXR0cmlidXRlcyBleGNlcHQgdGhlIG5vdGUgYXR0cmlidXRlLiBUaGUKLSAgICAgICAgZXhwcmVzc2lvbiBFMSBpbnRlcnNlY3QgRTIgc2VsZWN0cyBhbGwgbm9kZXMgdGhhdCBhcmUgaW4gYm90aCBFMSBhbmQKLSAgICAgICAgRTIuIEJvdGggZXhwcmVzc2lvbnMgbXVzdCByZXR1cm4gc2VxdWVuY2VzIG9mIG5vZGVzLiBUaGUgcmVzdWx0cyBhcmUKLSAgICAgICAgcmV0dXJuZWQgaW4gZG9jdW1lbnQgb3JkZXIuIFRoZSBleHByZXNzaW9uIEUxIHVuaW9uIEUyIHNlbGVjdHMgYWxsCi0gICAgICAgIG5vZGVzIHRoYXQgYXJlIGluIGVpdGhlciBFMSBvciBFMiBvciBib3RoLiBCb3RoIGV4cHJlc3Npb25zIG11c3QKLSAgICAgICAgcmV0dXJuIHNlcXVlbmNlcyBvZiBub2Rlcy4gVGhlIHJlc3VsdHMgYXJlIHJldHVybmVkIGluIGRvY3VtZW50IG9yZGVyLgotICAgICAgICBBIGNvbXBsZXRlIGV4YW1wbGUgb2YgdGhlIGFib3ZlIGV4cHJlc3Npb24gd291bGQgYmUgYXMgZm9sbG93cy4KLSAgICAgICAgQ29uc2lkZXIgYW4gWE1MIGRvY3VtZW50IHdoaWNoIGxvb2tzIGxpa2UgdGhpczo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiZsdDtub2RlcyZndDsKLSAgJmx0O2EmZ3Q7Ci0gICAgJmx0O2Nvbm5lY3RlZGEmZ3Q7QSZsdDsvY29ubmVjdGVkYSZndDsKLSAgICAmbHQ7Y29ubmVjdGVkYSZndDtCJmx0Oy9jb25uZWN0ZWRhJmd0OwotICAgICZsdDtjb25uZWN0ZWRhJmd0O0MmbHQ7L2Nvbm5lY3RlZGEmZ3Q7Ci0gICZsdDsvYSZndDsKLSAgJmx0O2ImZ3Q7Ci0gICAgJmx0O2Nvbm5lY3RlZGImZ3Q7QiZsdDsvY29ubmVjdGVkYiZndDsKLSAgICAmbHQ7Y29ubmVjdGVkYiZndDtDJmx0Oy9jb25uZWN0ZWRiJmd0OwotICAgICZsdDtjb25uZWN0ZWRiJmd0O0QmbHQ7L2Nvbm5lY3RlZGImZ3Q7Ci0gICZsdDsvYiZndDsKLSZsdDsvbm9kZXMmZ3Q7Ci08L3ByZT48cD5UaGVuIGFuIGV4YW1wbGUgb2YgZWFjaCBvZiB0aGUgZXhwcmVzc2lvbnMgd291bGQgYmU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5kYXRhKC9hLyopIHVuaW9uIGRhdGEoL2IvKik8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOnN0cmluZzogQTwvcD48L2xpPjxsaT48cD54czpzdHJpbmc6IEI8L3A+PC9saT48bGk+PHA+eHM6c3RyaW5nOiBDPC9wPjwvbGk+PGxpPjxwPnhzOnN0cmluZzogRDwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmRhdGEoL2EvKikgaW50ZXJzZWN0IGRhdGEoL2IvKik8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOnN0cmluZzogQjwvcD48L2xpPjxsaT48cD54czpzdHJpbmc6IEM8L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5kYXRhKC9hLyopIGV4Y2VwdCBkYXRhKC9iLyopPC9wcmU+PC9wPjxwPiA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5yZXN1bHQ6PC9zdHJvbmc+PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD54czpzdHJpbmc6IEQ8L3A+PC9saT48L29sPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA1Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZjMTI3Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Bcml0aG1ldGljIEV4cHJlc3Npb25zPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMDQuaHRtbCIgdGl0bGU9IlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDJzMDNzMDVzMDIuaHRtbCIgdGl0bGU9Ik11bHRpcGxpY2F0aW9uIGFuZCBEaXZpc2lvbjoiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkFyaXRobWV0aWNfRXhwcmVzc2lvbnMiPjwvYT5Bcml0aG1ldGljIEV4cHJlc3Npb25zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iVW5hcnkiPjwvYT5VbmFyeTwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+bWludXMgYW5kIHBsdXM6IFRoZSB1bmFyeSBtaW51cyBvcGVyYXRvciBjaGFuZ2VzIHRoZSBzaWduIG9mIGEKLSAgICAgICAgICBudW1iZXIuIEZvciBleGFtcGxlIC0xIGlzIG1pbnVzIG9uZSwgYW5kIC0xZTAgaXMgdGhlIGRvdWJsZSB2YWx1ZQotICAgICAgICAgIG5lZ2F0aXZlIC0xLjwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwNXMwMi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA1czAyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZjFjODEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA1czAyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPk11bHRpcGxpY2F0aW9uIGFuZCBEaXZpc2lvbjo8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAyczAzczA1Lmh0bWwiIHRpdGxlPSJBcml0aG1ldGljIEV4cHJlc3Npb25zIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMDUuaHRtbCIgdGl0bGU9IkFyaXRobWV0aWMgRXhwcmVzc2lvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwNXMwMy5odG1sIiB0aXRsZT0iQWRkaXRpb24gYW5kIFN1YnRyYWN0aW9uOiI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iTXVsdGlwbGljYXRpb25fYW5kX0RpdmlzaW9uOiI+PC9hPk11bHRpcGxpY2F0aW9uIGFuZCBEaXZpc2lvbjo8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBvcGVyYXRvciAqIG11bHRpcGxpZXMgdHdvIG51bWJlcnMuIElmIHRoZSBvcGVyYW5kcyBhcmUgb2YKLSAgICAgICAgICBkaWZmZXJlbnQgdHlwZXMsIFhQYXRoIDIuMCBzcGVjaWZpY2F0aW9ucyBzYXkgdGhhdCBvbmUgb2YgdGhlbSBpcwotICAgICAgICAgIHByb21vdGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBvdGhlci4mbmJzcDtUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIHR5cGUgYXMKLSAgICAgICAgICB0aGUgb3BlcmFuZHMgYWZ0ZXIgcHJvbW90aW9uLjwvcD48cD5UaGUgb3BlcmF0b3IgZGl2IGRpdmlkZXMgdHdvIG51bWJlcnMuIERpdmlkaW5nIHR3byBpbnRlZ2VycwotICAgICAgICAgIHByb2R1Y2VzIGEgZG91YmxlOyBpbiBvdGhlciBjYXNlcyB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIHR5cGUgYXMgdGhlCi0gICAgICAgICAgb3BlcmFuZHMuPC9wPjxwPlRoZSBvcGVyYXRvciBpZGl2IHBlcmZvcm1zIGludGVnZXIgZGl2aXNpb24uIEZvciBleGFtcGxlLCB0aGUKLSAgICAgICAgICByZXN1bHQgb2YgMTAgaWRpdiAzIGlzIDMuPC9wPjxwPlRoZSBtb2Qgb3BlcmF0b3IgcmV0dXJucyB0aGUgbW9kdWx1cyAob3IgcmVtYWluZGVyKSBhZnRlcgotICAgICAgICAgIGRpdmlzaW9uLjwvcD48cD5UaGUgb3BlcmF0b3JzICogYW5kIGRpdiBtYXkgYWxzbyBiZSB1c2VkIHRvIG11bHRpcGx5IG9yIGRpdmlkZQotICAgICAgICAgIGEgcmFuZ2UgYnkgYSBudW1iZXIuPC9wPjxwPkZvciBleGFtcGxlLCA8c3BhbiBjbGFzcz0iaXRhbGljIj4oMSBpZGl2IDEgdG8KLSAgICAgICAgICAzKTwvc3Bhbj4gcmV0dXJucyB0aGUgcmVzdWx0OiA8c3BhbiBjbGFzcz0iaXRhbGljIj54czppbnRlZ2VyOiAxLCB4czppbnRlZ2VyOiAyLCB4czppbnRlZ2VyOgotICAgICAgICAgIDM8L3NwYW4+PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA1czAzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDVzMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQzNGUyNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDVzMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5BZGRpdGlvbiBhbmQgU3VidHJhY3Rpb246PC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwM3MwNS5odG1sIiB0aXRsZT0iQXJpdGhtZXRpYyBFeHByZXNzaW9ucyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAyczAzczA1czAyLmh0bWwiIHRpdGxlPSJNdWx0aXBsaWNhdGlvbiBhbmQgRGl2aXNpb246Ij48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDJzMDNzMDYuaHRtbCIgdGl0bGU9IlJhbmdlIGV4cHJlc3Npb25zIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJBZGRpdGlvbl9hbmRfU3VidHJhY3Rpb246Ij48L2E+QWRkaXRpb24gYW5kIFN1YnRyYWN0aW9uOjwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhlIG9wZXJhdG9ycyA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4rPC9zdHJvbmc+PC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jy0nPC9zcGFuPiBwZXJmb3JtIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiBvZgotICAgICAgICAgIG51bWJlcnMsIGluIHRoZSB1c3VhbCB3YXkuIE9uY2UgYWdhaW4sIGlmIHRoZSBvcGVyYW5kcyBhcmUgb2YKLSAgICAgICAgICBkaWZmZXJlbnQgdHlwZXMsIFhQYXRoIDIuMCBzcGVjaWZpY2F0aW9ucyBzYXkgb25lIG9mIHRoZW0gaXMKLSAgICAgICAgICBwcm9tb3RlZCBidXQgbnVtZXJpYyB0eXBlIHByb21vdGlvbiBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgYnkKLSAgICAgICAgICBQc3ljaG9QYXRoLiBUaGUgcmVzdWx0IGlzIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9wZXJhbmRzLjwvcD48cD5FeGFtcGxlcyBvZiBhYm92ZSB3b3VsZCBiZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAtKDUgKyA3KTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6aW50ZWdlcjogLTEyPC9wPjwvbGk+PC9vbD48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+LXhzOmZsb2F0KCZyc3F1bzsxLjIzJnJzcXVvOyk8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOmZsb2F0OiAtMS4yMzwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPi14czpkb3VibGUoJnJzcXVvOzEuMjMmcnNxdW87KTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6ZG91YmxlOiAtMS4yMzwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPigrNSAtICs3KTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6aW50ZWdlcjogLTI8L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4oMSB0byA1IGRpdiAwICk8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImRpc2MiPjxsaT48cD5GQUlMIChkaXZpc2lvbiBieSB6ZXJvISk8L3A+PC9saT48L3VsPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj41KjYqMTAqNSo5NiBkaXYgMjAgZGl2IDMgZGl2IDE8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOmRlY2ltYWw6IDI0MDAuMDwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjMxIG1vZCAxNTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6aW50ZWdlcjogMTwvcD48L2xpPjwvb2w+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwNi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjUyOTZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwNi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlJhbmdlIGV4cHJlc3Npb25zPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMDVzMDMuaHRtbCIgdGl0bGU9IkFkZGl0aW9uIGFuZCBTdWJ0cmFjdGlvbjoiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwNy5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbnMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlJhbmdlX2V4cHJlc3Npb25zIj48L2E+UmFuZ2UgZXhwcmVzc2lvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBleHByZXNzaW9uIEUxIHRvIEUyIHJldHVybnMgYSBzZXF1ZW5jZSBvZiBpbnRlZ2Vycy4gRm9yCi0gICAgICAgIGV4YW1wbGUsIDEgdG8gNSByZXR1cm5zIHRoZSBzZXF1ZW5jZSAxLCAyLCAzLCA0LCA1LiBUaGlzIGlzIHVzZWZ1bCBpbgotICAgICAgICBmb3IgZXhwcmVzc2lvbnMsIGZvciBleGFtcGxlIHRoZSBmaXJzdCBmaXZlIG5vZGVzIG9mIGEgbm9kZSBzZXF1ZW5jZQotICAgICAgICBjYW4gYmUgcHJvY2Vzc2VkIGJ5IHdyaXRpbmcgZm9yICRpIGluIDEgdG8gNSByZXR1cm4gKC8veCkgPGEgY2xhc3M9InVsaW5rIiBocmVmPSIkaSIgdGFyZ2V0PSJfdG9wIj4kaTwvYT4uIEFub3RoZXIgZXhhbXBsZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPigxKzEgdG8gMTApPC9wcmU+PC9wPjxwPiA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5yZXN1bHQ6PC9zdHJvbmc+PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD54czppbnRlZ2VyOiAyPC9wPjwvbGk+PGxpPjxwPnhzOmludGVnZXI6IDM8L3A+PC9saT48bGk+PHA+eHM6aW50ZWdlcjogNDwvcD48L2xpPjxsaT48cD54czppbnRlZ2VyOiA1PC9wPjwvbGk+PGxpPjxwPnhzOmludGVnZXI6IDY8L3A+PC9saT48bGk+PHA+eHM6aW50ZWdlcjogNzwvcD48L2xpPjxsaT48cD54czppbnRlZ2VyOiA4PC9wPjwvbGk+PGxpPjxwPnhzOmludGVnZXI6IDk8L3A+PC9saT48bGk+PHA+eHM6aW50ZWdlcjogMTA8L3A+PC9saT48L29sPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmNmRkMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Q29tcGFyaXNvbnM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMnMwM3MwNi5odG1sIiB0aXRsZT0iUmFuZ2UgZXhwcmVzc2lvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwOC5odG1sIiB0aXRsZT0iQ29uZGl0aW9uYWwgRXhwcmVzc2lvbnMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkNvbXBhcmlzb25zIj48L2E+Q29tcGFyaXNvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBzaW1wbGVzdCBjb21wYXJpc29uIG9wZXJhdG9ycyBhcmUgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+ZXE8L3N0cm9uZz48L3NwYW4+LCA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5uZTwvc3Ryb25nPjwvc3Bhbj4sCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmx0PC9zdHJvbmc+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+bGU8L3N0cm9uZz48L3NwYW4+LCA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5ndDwvc3Ryb25nPjwvc3Bhbj4sCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmdlPC9zdHJvbmc+PC9zcGFuPi4gVGhlc2UgY29tcGFyZSB0d28gYXRvbWljIHZhbHVlcwotICAgICAgICBvZiB0aGUgc2FtZSB0eXBlLCBmb3IgZXhhbXBsZSB0d28gaW50ZWdlcnMsIHR3byBkYXRlcywgb3IgdHdvIHN0cmluZ3MuCi0gICAgICAgIChDb2xsYXRpb24gaGFzbiZyc3F1bzt0IGJlZW4gaW1wbGVtZW50ZWQgaW4gY3VycmVudCB2ZXJzaW9uIG9mIFBzeWNob1BhdGgpLgotICAgICAgICBJZiB0aGUgb3BlcmFuZHMgYXJlIG5vdCBhdG9taWMgdmFsdWVzLCBhbiBlcnJvciBpcyByYWlzZWQuPC9wPjxwPlRoZSBvcGVyYXRvcnMgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+PScnJywmbmJzcDs8L3N0cm9uZz48L3NwYW4+IT0nCi0gICAgICAgIDxzcGFuIGNsYXNzPSJpdGFsaWMiPiwgJzwvc3Bhbj4mbHQ7PScgPHNwYW4gY2xhc3M9Iml0YWxpYyI+LAotICAgICAgICAnPC9zcGFuPiZndDsgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+LCAnJycmbHQ7PC9zdHJvbmc+PC9zcGFuPiwgYW5kCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPiZndDs9PC9zdHJvbmc+PC9zcGFuPiBjYW4gY29tcGFyZSBhcmJpdHJhcnkKLSAgICAgICAgc2VxdWVuY2VzLiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYW55IHBhaXIgb2YgaXRlbXMgZnJvbSB0aGUgdHdvCi0gICAgICAgIHNlcXVlbmNlcyBoYXMgdGhlIHNwZWNpZmllZCByZWxhdGlvbnNoaXAsIGZvciBleGFtcGxlIDxzcGFuIGNsYXNzPSJpdGFsaWMiPiRBID0gJEI8L3NwYW4+IGlzIHRydWUgaWYgdGhlcmUgaXMgYW4gaXRlbSBpbgotICAgICAgICA8c3BhbiBjbGFzcz0iaXRhbGljIj4kQTwvc3Bhbj4gdGhhdCBpcyBlcXVhbCB0byBzb21lIGl0ZW0gaW4KLSAgICAgICAgPHNwYW4gY2xhc3M9Iml0YWxpYyI+JEI8L3NwYW4+LjwvcD48cD5UaGUgb3BlcmF0b3JzIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmlzPC9zdHJvbmc+PC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+aXNub3Q8L3N0cm9uZz48L3NwYW4+IHRlc3Qgd2hldGhlciB0aGUgb3BlcmFuZHMgcmVwcmVzZW50IHRoZQotICAgICAgICBzYW1lIChpZGVudGljYWwpIG5vZGUuIEZvciBleGFtcGxlLCA8c3BhbiBjbGFzcz0iaXRhbGljIj50aXRsZQotICAgICAgICA8YSBjbGFzcz0idWxpbmsiIGhyZWY9IjEiIHRhcmdldD0iX3RvcCI+MTwvYT4gaXMgKiA8YSBjbGFzcz0idWxpbmsiIGhyZWY9IkBub3RlIiB0YXJnZXQ9Il90b3AiPkBub3RlPC9hPiA8YSBjbGFzcz0idWxpbmsiIGhyZWY9IjEiIHRhcmdldD0iX3RvcCI+MTwvYT4gPC9zcGFuPiBpcyB0cnVlIGlmIHRoZSBmaXJzdCB0aXRsZSBjaGlsZCBpcyB0aGUKLSAgICAgICAgZmlyc3QgY2hpbGQgZWxlbWVudCB0aGF0IGhhcyBhIDxzcGFuIGNsYXNzPSJpdGFsaWMiPkBub3RlPC9zcGFuPiBhdHRyaWJ1dGUuIElmIGVpdGhlciBvcGVyYW5kIGlzIGFuCi0gICAgICAgIGVtcHR5IHNlcXVlbmNlIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgc2VxdWVuY2UgKHdoaWNoIHdpbGwgdXN1YWxseSBiZQotICAgICAgICB0cmVhdGVkIGFzIGZhbHNlKS48L3A+PHA+VGhlIG9wZXJhdG9ycyA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4mbHQ7Jmx0Ozwvc3Ryb25nPjwvc3Bhbj4gYW5kCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPiZndDsmZ3Q7PC9zdHJvbmc+PC9zcGFuPiB0ZXN0IHdoZXRoZXIgb25lIG5vZGUKLSAgICAgICAgcHJlY2VkZXMgb3IgZm9sbG93cyBhbm90aGVyIGluIGRvY3VtZW50IG9yZGVyLiBDb25zaWRlciB0aGlzIFhNTAotICAgICAgICBkb2N1bWVudDo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiZsdDtib29rJmd0OwotICZsdDt0aXRsZSZndDtCZWluZyBhIERvZyBJcyBhIEZ1bGwtVGltZSBKb2ImbHQ7L3RpdGxlJmd0OwotICZsdDthdXRob3ImZ3Q7Q2hhcmxlcyBNLiBTY2h1bHombHQ7L2F1dGhvciZndDsKLSAmbHQ7Y2hhcmFjdGVyJmd0OwotICAgJmx0O25hbWUmZ3Q7U25vb3B5Jmx0Oy9uYW1lJmd0OwotICAgJmx0O2ZyaWVuZC1vZiZndDtQZXBwZXJtaW50IFBhdHR5Jmx0Oy9mcmllbmQtb2YmZ3Q7Ci0gICAmbHQ7c2luY2UmZ3Q7MTk1MC0xMC0wNCZsdDsvc2luY2UmZ3Q7Ci0gICAmbHQ7YWdlJmd0OzImbHQ7L2FnZSZndDsKLSAgICZsdDtxdWFsaWZpY2F0aW9uJmd0O2V4dHJvdmVydGVkIGJlYWdsZSZsdDsvcXVhbGlmaWNhdGlvbiZndDsKLSAmbHQ7L2NoYXJhY3RlciZndDsKLSAmbHQ7Y2hhcmFjdGVyJmd0OwotICAgJmx0O25hbWUmZ3Q7UGVwcGVybWludCBQYXR0eSZsdDsvbmFtZSZndDsKLSAgICZsdDtzaW5jZSZndDsxOTY2LTA4LTIyJmd0Oy9zaW5jZSZndDsKLSAgICZsdDthZ2UmZ3Q7NCZsdDsvYWdlJmd0OwotICAgJmx0O3F1YWxpZmljYXRpb24mZ3Q7Ym9sZCwgYnJhc2ggYW5kIHRvbWJveWlzaCZsdDsvcXVhbGlmaWNhdGlvbiZndDsKLSAmbHQ7L2NoYXJhY3RlciZndDsKLSZsdDsvYm9vayZndDsKLTwvcHJlPjxwPkV4YW1wbGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ib29rL2NoYXJhY3RlciBuYW1lPSJTbm9vcHkiICZsdDsmbHQ7IGJvb2svY2hhcmFjdGVyIFBhdHR5IiA8L3ByZT48L3A+PHA+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6Ym9vbGVhbjogdHJ1ZTwvcD48L2xpPjwvb2w+PC9kaXY+PHA+Ym9vay9jaGFyYWN0ZXIgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJuYW1lPSUyMlBlcHBlcm1pbnQiIHRhcmdldD0iX3RvcCI+UGF0dHkiPC9hPgotICAgICAgICAmbHQ7Jmx0OyBib29rL2NoYXJhY3RlciA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Im5hbWU9JTIyU25vb3B5JTIyIiB0YXJnZXQ9Il90b3AiPm5hbWU9IlNub29weSI8L2E+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOmJvb2xlYW46IGZhbHNlPC9wPjwvbGk+PC9vbD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwOC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OGZlZmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Q29uZGl0aW9uYWwgRXhwcmVzc2lvbnM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMnMwM3MwNy5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwOS5odG1sIiB0aXRsZT0iUXVhbnRpZmllZCBFeHByZXNzaW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iQ29uZGl0aW9uYWxfRXhwcmVzc2lvbnMiPjwvYT5Db25kaXRpb25hbCBFeHByZXNzaW9uczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+WFBhdGggMi4wIGFsbG93cyBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gPHNwYW4gY2xhc3M9Iml0YWxpYyI+aWYgKCBFMSApIHRoZW4gRTIgZWxzZSBFMzwvc3Bhbj4uIEZvciBleGFtcGxlLAotICAgICAgICA8c3BhbiBjbGFzcz0iaXRhbGljIj5pZiAoQGRpc2NvdW50KSB0aGVuIEBkaXNjb3VudCBlbHNlCi0gICAgICAgIDA8L3NwYW4+IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBkaXNjb3VudCBhdHRyaWJ1dGUgaWYgaXQgaXMKLSAgICAgICAgcHJlc2VudCwgb3IgemVybyBvdGhlcndpc2UuPC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQwZTg3Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+UXVhbnRpZmllZCBFeHByZXNzaW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDJzMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAyczAzczA4Lmh0bWwiIHRpdGxlPSJDb25kaXRpb25hbCBFeHByZXNzaW9ucyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAzczEwLmh0bWwiIHRpdGxlPSJBbmQsIE9yIEV4cHJlc3Npb25zIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJRdWFudGlmaWVkX0V4cHJlc3Npb25zIj48L2E+UXVhbnRpZmllZCBFeHByZXNzaW9uczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhlIGV4cHJlc3Npb24gPHNwYW4gY2xhc3M9Iml0YWxpYyI+c29tZSAkeCBpbiBFMSBzYXRpc2ZpZXMKLSAgICAgICAgRTI8L3NwYW4+IHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBFMSBmb3IKLSAgICAgICAgd2hpY2ggdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlIG9mIEUyIGlzIHRydWUuIE5vdGUgdGhhdCBFMiBtdXN0IHVzZQotICAgICAgICB0aGUgcmFuZ2UgdmFyaWFibGUgPHNwYW4gY2xhc3M9Iml0YWxpYyI+JHg8L3NwYW4+IHRvIHJlZmVyIHRvCi0gICAgICAgIHRoZSBpdGVtIGJlaW5nIHRlc3RlZDsgaXQgZG9lcyBub3QgYmVjb21lIHRoZSBjb250ZXh0IGl0ZW0uIEZvcgotICAgICAgICBleGFtcGxlLCA8c3BhbiBjbGFzcz0iaXRhbGljIj5zb21lICR4IGluIEAqIHNhdGlzZmllcyAkeCBlcQotICAgICAgICAiIjwvc3Bhbj4gaXMgdHJ1ZSBpZiB0aGUgY29udGV4dCBpdGVtIGlzIGFuIGVsZW1lbnQgdGhhdCBoYXMgYXQKLSAgICAgICAgbGVhc3Qgb25lIHplcm8tbGVuZ3RoIGF0dHJpYnV0ZSB2YWx1ZS48L3A+PHA+U2ltaWxhcmx5LCB0aGUgZXhwcmVzc2lvbiA8c3BhbiBjbGFzcz0iaXRhbGljIj5ldmVyeSAkeCBpbiBFMQotICAgICAgICBzYXRpc2ZpZXMgRTI8L3NwYW4+IHJldHVybnMgdHJ1ZSBpZiBldmVyeSBpdGVtIGluIHRoZSBzZXF1ZW5jZQotICAgICAgICBnaXZlbiBieSBFMSBzYXRpc2ZpZXMgdGhlIGNvbmRpdGlvbi48L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMTAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTRmZjg0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkFuZCwgT3IgRXhwcmVzc2lvbnM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMnMwM3MwOS5odG1sIiB0aXRsZT0iUXVhbnRpZmllZCBFeHByZXNzaW9ucyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAzczExLmh0bWwiIHRpdGxlPSJTZXF1ZW5jZVR5cGUgTWF0Y2hpbmcgRXhwcmVzc2lvbnMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkFuZC4yQ19Pcl9FeHByZXNzaW9ucyI+PC9hPkFuZCwgT3IgRXhwcmVzc2lvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBleHByZXNzaW9uIDxzcGFuIGNsYXNzPSJpdGFsaWMiPkUxIGFuZCBFMjwvc3Bhbj4KLSAgICAgICAgcmV0dXJucyB0cnVlIGlmIHRoZSBlZmZlY3RpdmUgYm9vbGVhbiB2YWx1ZXMgb2YgRTEgYW5kIEUyIGFyZSBib3RoCi0gICAgICAgIHRydWUuIFRoZSBleHByZXNzaW9uIDxzcGFuIGNsYXNzPSJpdGFsaWMiPkUxIG9yIEUyPC9zcGFuPgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlcyBvZiBlaXRoZXIgb3IgYm90aCBvZiBFMQotICAgICAgICBhbmQgRTIgYXJlIHRydWUuPC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gKGZvciBhIHRydXRoIHRhYmxlKSAxIGFuZCAxPC9wcmU+PC9wPjxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOmJvb2xlYW46IHRydWU8L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4xIGFuZCAwPC9wcmU+PC9wPjxwPiA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5yZXN1bHQ6PC9zdHJvbmc+PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD54czpib29sZWFuOiBmYWxzZTwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjEgb3IgMDwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6Ym9vbGVhbjogdHJ1ZTwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjAgb3IgMTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6Ym9vbGVhbjogdHJ1ZTwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczExLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMTEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4NWM2OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMTEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+U2VxdWVuY2VUeXBlIE1hdGNoaW5nIEV4cHJlc3Npb25zPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMTAuaHRtbCIgdGl0bGU9IkFuZCwgT3IgRXhwcmVzc2lvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iU2VxdWVuY2VUeXBlX01hdGNoaW5nX0V4cHJlc3Npb25zIj48L2E+U2VxdWVuY2VUeXBlIE1hdGNoaW5nIEV4cHJlc3Npb25zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD5UaGUgcnVsZXMgZm9yIFNlcXVlbmNlVHlwZSBtYXRjaGluZyBjb21wYXJlIHRoZSBhY3R1YWwgdHlwZSBvZiBhCi0gICAgICAgIHZhbHVlIHdpdGggYW4gZXhwZWN0ZWQgdHlwZS4gVGhlc2UgcnVsZXMgYXJlIGEgc3Vic2V0IG9mIHRoZSBmb3JtYWwKLSAgICAgICAgcnVsZXMgdGhhdCBtYXRjaCBhIHZhbHVlIHdpdGggYW4gZXhwZWN0ZWQgdHlwZSBkZWZpbmVkIGluIFhRdWVyeSAxLjAKLSAgICAgICAgYW5kIFhQYXRoIDIuMCBGb3JtYWwgU2VtYW50aWNzIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgyMC8jWFF1ZXJ5Rm9ybWFsU2VtYW50aWNzIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoMjAvI1hRdWVyeUZvcm1hbFNlbWFudGljczwvYT4sCi0gICAgICAgIGJlY2F1c2UgdGhlIEZvcm1hbCBTZW1hbnRpY3MgbXVzdCBiZSBhYmxlIHRvIG1hdGNoIGEgdmFsdWUgd2l0aCBhbnkKLSAgICAgICAgWE1MIFNjaGVtYSB0eXBlLCB3aGVyZWFzIHRoZSBydWxlcyBiZWxvdyBvbmx5IG1hdGNoIHZhbHVlcyBhZ2FpbnN0Ci0gICAgICAgIHRob3NlIHR5cGVzIGV4cHJlc3NpYmxlIGJ5IHRoZSBTZXF1ZW5jZVR5cGUgc3ludGF4LjwvcD48cD5Tb21lIG9mIHRoZSBydWxlcyBmb3IgU2VxdWVuY2VUeXBlIG1hdGNoaW5nIHJlcXVpcmUgZGV0ZXJtaW5pbmcKLSAgICAgICAgd2hldGhlciBhIGdpdmVuIHR5cGUgbmFtZSBpcyB0aGUgc2FtZSBhcyBvciBkZXJpdmVkIGZyb20gYW4gZXhwZWN0ZWQKLSAgICAgICAgdHlwZSBuYW1lLiBUaGUgZ2l2ZW4gdHlwZSBuYW1lIG1heSBiZSAia25vd24iIChkZWZpbmVkIGluIHRoZSBpbi1zY29wZQotICAgICAgICBzY2hlbWEgZGVmaW5pdGlvbnMpLCBvciAidW5rbm93biIgKG5vdCBkZWZpbmVkIGluIHRoZSBpbi1zY29wZSBzY2hlbWEKLSAgICAgICAgZGVmaW5pdGlvbnMpLiBBbiB1bmtub3duIHR5cGUgbmFtZSBtaWdodCBiZSBlbmNvdW50ZXJlZCwgZm9yIGV4YW1wbGUsCi0gICAgICAgIGlmIGEgc291cmNlIGRvY3VtZW50IGhhcyBiZWVuIHZhbGlkYXRlZCB1c2luZyBhIHNjaGVtYSB0aGF0IHdhcyBub3QKLSAgICAgICAgaW1wb3J0ZWQgaW50byB0aGUgc3RhdGljIGNvbnRleHQuIEluIHRoaXMgY2FzZSwgYW4gaW1wbGVtZW50YXRpb24gaXMKLSAgICAgICAgYWxsb3dlZCAoYnV0IGlzIG5vdCByZXF1aXJlZCkgdG8gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQKLSAgICAgICAgbWVjaGFuaXNtIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSB1bmtub3duIHR5cGUgbmFtZSBpcyBkZXJpdmVkCi0gICAgICAgIGZyb20gdGhlIGV4cGVjdGVkIHR5cGUgbmFtZS4gRm9yIGV4YW1wbGUsIGFuIGltcGxlbWVudGF0aW9uIG1pZ2h0Ci0gICAgICAgIG1haW50YWluIGEgZGF0YSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdHlwZQotICAgICAgICBoaWVyYXJjaGllcy4gY29uc2lkZXIgdGhlIGZvbGxvd2luZyBYTUwgZG9jdW1lbnQ6PC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4mbHQ7c29yYm8mZ3Q7Ci0gJmx0O2lzJmd0O2VsaXRlJmx0Oy9pcyZndDsKLSAmbHQ7IS0tIGxpZmUgc3V4IC0tJmd0OwotJmx0Oy9zb3JibyZndDsKLTwvcHJlPjxwPlRoZW4sIHRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZSBvZiBTZXF1ZW5jZVR5cGUKLSAgICAgICAgbWF0Y2hpbmdzOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+IGVsZW1lbnQoeyp9KTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+ZWxlbWVudDogc29yYm88L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5lbGVtZW50KGVsaXRlKTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+RW1wdHkgcmVzdWx0czwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnNvcmJvL2NvbW1lbnQoKTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+Y29tbWVudDogbGlmZSBzdXg8L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5kYXRhKC9zb3Jiby9jb21tZW50KCkpPC9wcmU+PC9wPjxwPiA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5yZXN1bHQ6PC9zdHJvbmc+PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD54czpzdHJpbmc6IGxpZmUgc3V4PC9wPjwvbGk+PC9vbD48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c29yYm8vbm9kZSgpPC9wcmU+PC9wPjxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnRleHQ6PC9wPjwvbGk+PGxpPjxwPmVsZW1lbnQ6IGlzPC9wPjwvbGk+PGxpPjxwPmNvbW1lbnQ6IGxpZmUgc3V4PC9wPjwvbGk+PGxpPjxwPnRleHQ6PC9wPjwvbGk+PC9vbD48L2Rpdj48cD48L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2FjMzk2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Ib3cgdG8gdXNlIFhQYXRoIDIuMCBmdW5jdGlvbnMgd2l0aCBQc3ljaG9QYXRoPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMnMwM3MxMS5odG1sIiB0aXRsZT0iU2VxdWVuY2VUeXBlIE1hdGNoaW5nIEV4cHJlc3Npb25zIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDNzMDIuaHRtbCIgdGl0bGU9IkNvbnN0cnVjdG9yIEZ1bmN0aW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iSG93X3RvX3VzZV9YUGF0aF8yLjBfZnVuY3Rpb25zX3dpdGhfUHN5Y2hvUGF0aCI+PC9hPkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGg8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDMuaHRtbCNBY2Nlc3NvcnMiPkFjY2Vzc29yczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDIuaHRtbCI+Q29uc3RydWN0b3IgRnVuY3Rpb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MwMy5odG1sIj5GdW5jdGlvbnMgb24gTnVtZXJpYyBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA0Lmh0bWwiPkZ1bmN0aW9ucyB0byBBc3NlbWJsZSBhbmQgRGlzYXNzZW1ibGUgU3RyaW5nczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDUuaHRtbCI+Q29tcGFyZSBhbmQgT3RoZXIgRnVuY3Rpb25zIG9uIFN0cmluZyBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA2Lmh0bWwiPkZ1bmN0aW9ucyBCYXNlZCBvbiBTdWJzdHJpbmcgTWF0Y2hpbmc8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA3Lmh0bWwiPlN0cmluZyBGdW5jdGlvbnMgdGhhdCBVc2UgUGF0dGVybiBNYXRjaGluZzwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDguaHRtbCI+RnVuY3Rpb25zIG9uIEJvb2xlYW4gVmFsdWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MwOS5odG1sIj5Db21wb25lbnQgRXh0cmFjdGlvbiBGdW5jdGlvbnMgb24gRHVyYXRpb25zLCBEYXRlcyBhbmQKLSAgICAgIFRpbWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMC5odG1sIj5GdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExLmh0bWwiPkZ1bmN0aW9ucyBvbiBOb2RlczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMS5odG1sI0dlbmVyYWxfRnVuY3Rpb25zX29uX1NlcXVlbmNlcyI+R2VuZXJhbCBGdW5jdGlvbnMgb24gU2VxdWVuY2VzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMXMwMi5odG1sIj5GdW5jdGlvbnMgVGhhdCBUZXN0IHRoZSBDYXJkaW5hbGl0eSBvZiBTZXF1ZW5jZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExczAzLmh0bWwiPkRlZXAtRXF1YWwsIEFnZ3JlZ2F0ZSBGdW5jdGlvbnMsIGFuZCBGdW5jdGlvbnMgdGhhdCBHZW5lcmF0ZQotICAgICAgICBTZXF1ZW5jZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExczA0Lmh0bWwiPkNvbnRleHQgRnVuY3Rpb25zPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48L3VsPjwvZGl2PjxwPlRoZSBhaW0gb2YgdGhpcyBzZWN0aW9uIGlzIHRvIGdpdmUgdGhlIHVzZXIgYW4gb3ZlcnZpZXcgb2YgdGhlCi0gICAgYXZhaWxhYmxlIFhQYXRoIDIuMCBmdW5jdGlvbnMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gUHN5Y2hvUGF0aC4gRm9yIHRoZQotICAgIGZvcm1hbCBzcGVjaWZpY2F0aW9ucywgc2VlIHRoZSBXM0Mgd2ViLXNpdGUgZm9yIFhQYXRoIDIuMCBmdW5jdGlvbnMgYW5kCi0gICAgb3BlcmF0b3JzIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZnVuY3Rpb25zLyIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aC1mdW5jdGlvbnMvPC9hPi48L3A+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iQWNjZXNzb3JzIj48L2E+QWNjZXNzb3JzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD5JbiBvcmRlciBmb3IgUHN5Y2hvUGF0aCB0byBvcGVyYXRlIG9uIGluc3RhbmNlcyBvZiB0aGUgWFBhdGggMi4wCi0gICAgICBkYXRhIG1vZGVsLCB0aGUgbW9kZWwgbXVzdCBleHBvc2UgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGl0Ci0gICAgICBjb250YWlucy4gSXQgZG9lcyB0aGlzIGJ5IGRlZmluaW5nIGEgZmFtaWx5IG9mIGFjY2Vzc29yIGZ1bmN0aW9ucy4gVGhlc2UKLSAgICAgIGZ1bmN0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSB0byB1c2VycyBvciBhcHBsaWNhdGlvbnMgdG8gY2FsbCBkaXJlY3RseS4KLSAgICAgIEluc3RlYWQsIHRoZXkgYXJlIGRlc2NyaXB0aW9ucyBvZiB0aGUgaW5mb3JtYXRpb24gdGhhdCBhbiBpbXBsZW1lbnRhdGlvbgotICAgICAgb2YgdGhlIG1vZGVsIG11c3QgZXhwb3NlIHRvIGFwcGxpY2F0aW9ucy48L3A+PHA+ZGF0YSgmbHNxdW87c3RyaW5nJnJzcXVvOyk8L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlN0cmluZyBuID0gKChYU1N0cmluZylycy5maXJzdCgpKS5zdHJpbmd2YWx1ZSgpOwotcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2YgJmxzcXVvO3N0cmluZyZyc3F1bzs8L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGRmMjFmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbnN0cnVjdG9yIEZ1bmN0aW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAzczAzLmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgb24gTnVtZXJpYyBWYWx1ZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iQ29uc3RydWN0b3JfRnVuY3Rpb25zIj48L2E+Q29uc3RydWN0b3IgRnVuY3Rpb25zPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+eHM6ZGF0ZVRpbWUoIjIwMDItMDItMDFUMTA6MDA6MDArMDY6MDAiKTwvcHJlPjwvcD48cD5Gcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+U3RyaW5nIG4gPSAoKFhTRGF0ZVRpbWUpcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2YgJmxzcXVvOzIwMDItMDItMDFUMDQ6MDA6MDBaJnJzcXVvOzwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwMy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczAzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MjAzZWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczAzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+RnVuY3Rpb25zIG9uIE51bWVyaWMgVmFsdWVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczAyLmh0bWwiIHRpdGxlPSJDb25zdHJ1Y3RvciBGdW5jdGlvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MwNC5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIHRvIEFzc2VtYmxlIGFuZCBEaXNhc3NlbWJsZSBTdHJpbmdzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IkZ1bmN0aW9uc19vbl9OdW1lcmljX1ZhbHVlcyI+PC9hPkZ1bmN0aW9ucyBvbiBOdW1lcmljIFZhbHVlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNlaWxpbmcoeHM6ZmxvYXQoJmxzcXVvOzEwLjQmcnNxdW87KSk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmZsb2F0IG4gPSAoKFhTRmxvYXQpcnMuZmlyc3QoKSkuZmxvYXR2YWx1ZSgpOwotcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2YgJmxzcXVvOzExLjAmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczA0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NlZjgyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5GdW5jdGlvbnMgdG8gQXNzZW1ibGUgYW5kIERpc2Fzc2VtYmxlIFN0cmluZ3M8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBmdW5jdGlvbnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDNzMDMuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBvbiBOdW1lcmljIFZhbHVlcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAzczA1Lmh0bWwiIHRpdGxlPSJDb21wYXJlIGFuZCBPdGhlciBGdW5jdGlvbnMgb24gU3RyaW5nIFZhbHVlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJGdW5jdGlvbnNfdG9fQXNzZW1ibGVfYW5kX0Rpc2Fzc2VtYmxlX1N0cmluZ3MiPjwvYT5GdW5jdGlvbnMgdG8gQXNzZW1ibGUgYW5kIERpc2Fzc2VtYmxlIFN0cmluZ3M8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb2RlcG9pbnRzLXRvLXN0cmluZygwMTExKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+U3RyaW5nIG4gPSAoKFhTU3RyaW5nKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7Ci1wcmludGxuKG4pOyZsdDsvc291cmNlJmd0OzwvcHJlPjwvcD48cD5JbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87byZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzU0ZjVjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbXBhcmUgYW5kIE90aGVyIEZ1bmN0aW9ucyBvbiBTdHJpbmcgVmFsdWVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczA0Lmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgdG8gQXNzZW1ibGUgYW5kIERpc2Fzc2VtYmxlIFN0cmluZ3MiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MwNi5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIEJhc2VkIG9uIFN1YnN0cmluZyBNYXRjaGluZyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJDb21wYXJlX2FuZF9PdGhlcl9GdW5jdGlvbnNfb25fU3RyaW5nX1ZhbHVlcyI+PC9hPkNvbXBhcmUgYW5kIE90aGVyIEZ1bmN0aW9ucyBvbiBTdHJpbmcgVmFsdWVzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uY2F0KCZsc3F1bzt1biZyc3F1bzssICZsc3F1bztncmF0ZWZ1bCZyc3F1bzspPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5TdHJpbmcgbiA9ICgoWFNTdHJpbmcpcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsKLXByaW50bG4obik7PC9wcmU+PC9wPjxwPkluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bzt1bmdyYXRlZnVsJnJzcXVvOzwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczA2Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MDllMTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczA2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+RnVuY3Rpb25zIEJhc2VkIG9uIFN1YnN0cmluZyBNYXRjaGluZzwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwNS5odG1sIiB0aXRsZT0iQ29tcGFyZSBhbmQgT3RoZXIgRnVuY3Rpb25zIG9uIFN0cmluZyBWYWx1ZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MwNy5odG1sIiB0aXRsZT0iU3RyaW5nIEZ1bmN0aW9ucyB0aGF0IFVzZSBQYXR0ZXJuIE1hdGNoaW5nIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IkZ1bmN0aW9uc19CYXNlZF9vbl9TdWJzdHJpbmdfTWF0Y2hpbmciPjwvYT5GdW5jdGlvbnMgQmFzZWQgb24gU3Vic3RyaW5nIE1hdGNoaW5nPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29udGFpbnMoImFiYyIsICJlZGYiKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsKLXByaW50bG4obik7PC9wcmU+PC9wPjxwPkluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bztmYWxzZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTJhY2M2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlN0cmluZyBGdW5jdGlvbnMgdGhhdCBVc2UgUGF0dGVybiBNYXRjaGluZzwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwNi5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIEJhc2VkIG9uIFN1YnN0cmluZyBNYXRjaGluZyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAzczA4Lmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgb24gQm9vbGVhbiBWYWx1ZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iU3RyaW5nX0Z1bmN0aW9uc190aGF0X1VzZV9QYXR0ZXJuX01hdGNoaW5nIj48L2E+U3RyaW5nIEZ1bmN0aW9ucyB0aGF0IFVzZSBQYXR0ZXJuIE1hdGNoaW5nPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+bWF0Y2hlcygmbHNxdW87YWJjZCZyc3F1bzssICZsc3F1bzthYmNkJnJzcXVvOyk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmJvb2xlYW4gbiA9ICgoWFNCb29sZWFuKXJzLmZpcnN0KCkpLnZhbHVlKCk7Ci1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5JbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87dHJ1ZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwOC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGVlMjY4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwOC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkZ1bmN0aW9ucyBvbiBCb29sZWFuIFZhbHVlczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwNy5odG1sIiB0aXRsZT0iU3RyaW5nIEZ1bmN0aW9ucyB0aGF0IFVzZSBQYXR0ZXJuIE1hdGNoaW5nIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDNzMDkuaHRtbCIgdGl0bGU9IkNvbXBvbmVudCBFeHRyYWN0aW9uIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMsIERhdGVzIGFuZCBUaW1lcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJGdW5jdGlvbnNfb25fQm9vbGVhbl9WYWx1ZXMiPjwvYT5GdW5jdGlvbnMgb24gQm9vbGVhbiBWYWx1ZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ub3QodHJ1ZSgpKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsKLXByaW50bG4obik7PC9wcmU+PC9wPjxwPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bztmYWxzZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwOS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzY0ZGQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwOS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbXBvbmVudCBFeHRyYWN0aW9uIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMsIERhdGVzIGFuZCBUaW1lczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwOC5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIG9uIEJvb2xlYW4gVmFsdWVzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDNzMTAuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBSZWxhdGVkIHRvIFFOYW1lcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJDb21wb25lbnRfRXh0cmFjdGlvbl9GdW5jdGlvbnNfb25fRHVyYXRpb25zLjJDX0RhdGVzX2FuZF9UaW1lcyI+PC9hPkNvbXBvbmVudCBFeHRyYWN0aW9uIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMsIERhdGVzIGFuZAotICAgICAgVGltZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50aW1lem9uZS1mcm9tLXRpbWUoeHM6dGltZSgiMTM6MjA6MDArMDU6MDAiKSk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlN0cmluZyBuID0gKChYRFREYXlUaW1lRHVyYXRpb24pcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87UFQ1SCZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWQyZTQwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkZ1bmN0aW9ucyBSZWxhdGVkIHRvIFFOYW1lczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwOS5odG1sIiB0aXRsZT0iQ29tcG9uZW50IEV4dHJhY3Rpb24gRnVuY3Rpb25zIG9uIER1cmF0aW9ucywgRGF0ZXMgYW5kIFRpbWVzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDNzMTEuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBvbiBOb2RlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJGdW5jdGlvbnNfUmVsYXRlZF90b19RTmFtZXMiPjwvYT5GdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5sb2NhbC1uYW1lLWZyb20tUU5hbWUoUU5hbWUoJmxzcXVvOyA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vZXhhbXBsZSIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmV4YW1wbGUuY29tL2V4YW1wbGU8L2E+JnJzcXVvOywgJmxzcXVvO3BlcnNvbiZyc3F1bzspKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+U3RyaW5nIG4gPSAoKFhTTkNOYW1lKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7Ci1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87cGVyc29uJnJzcXVvOzwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczExLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1OGM3YjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczExLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+RnVuY3Rpb25zIG9uIE5vZGVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczEwLmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MxMXMwMi5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIFRoYXQgVGVzdCB0aGUgQ2FyZGluYWxpdHkgb2YgU2VxdWVuY2VzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IkZ1bmN0aW9uc19vbl9Ob2RlcyI+PC9hPkZ1bmN0aW9ucyBvbiBOb2RlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJHZW5lcmFsX0Z1bmN0aW9uc19vbl9TZXF1ZW5jZXMiPjwvYT5HZW5lcmFsIEZ1bmN0aW9ucyBvbiBTZXF1ZW5jZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5yZW1vdmUoKCZsc3F1bztzJnJzcXVvOywmbHNxdW87byZyc3F1bzssJmxzcXVvO20mcnNxdW87LCZsc3F1bztlJnJzcXVvOywmbHNxdW87dCZyc3F1bzssJmxzcXVvO2gmcnNxdW87LCZsc3F1bztpJnJzcXVvOywmbHNxdW87biZyc3F1bzssJmxzcXVvO2cmcnNxdW87KSwgNik8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Zm9yIChJdGVyYXRvciBpdGVyID0gcnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0gIE9iamVjdCBpdGVtID0gaXRlci5uZXh0KCk7IAotICBTdHJpbmcgbiA9ICgoWFNTdHJpbmcpaXRlbSkuc3RyaW5ndmFsdWUoKTsKLSAgcHJpbnQobiArICIgIik7Ci19IHByaW50bG4oIiIpOwotPC9wcmU+PHA+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2YgJmxzcXVvO3MgbyBtIGUgdCBpIG4gZyZyc3F1bzs8L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMXMwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmE0NDBhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMXMwMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkZ1bmN0aW9ucyBUaGF0IFRlc3QgdGhlIENhcmRpbmFsaXR5IG9mIFNlcXVlbmNlczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDNzMTEuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBvbiBOb2RlcyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczExLmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgb24gTm9kZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MxMXMwMy5odG1sIiB0aXRsZT0iRGVlcC1FcXVhbCwgQWdncmVnYXRlIEZ1bmN0aW9ucywgYW5kIEZ1bmN0aW9ucyB0aGF0IEdlbmVyYXRlIFNlcXVlbmNlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iRnVuY3Rpb25zX1RoYXRfVGVzdF90aGVfQ2FyZGluYWxpdHlfb2ZfU2VxdWVuY2VzIj48L2E+RnVuY3Rpb25zIFRoYXQgVGVzdCB0aGUgQ2FyZGluYWxpdHkgb2YgU2VxdWVuY2VzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+b25lLW9yLW1vcmUoKDEsMiwzLDQsNSkpPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmZvciAoSXRlcmF0b3IgaXRlciA9IHJzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotIE9iamVjdCBpdGVtID0gaXRlci5uZXh0KCk7Ci0gaW50IG4gPSAoKFhTSW50ZWdlcilpdGVtKS5pbnR2YWx1ZSgpOwotIHByaW50KG4gKyAiICIpOwotfSBwcmludGxuKCIiKTsKLTwvcHJlPjxwPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bzsxIDIgMyA0IDUmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczExczAzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg3MzRlMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5EZWVwLUVxdWFsLCBBZ2dyZWdhdGUgRnVuY3Rpb25zLCBhbmQgRnVuY3Rpb25zIHRoYXQgR2VuZXJhdGUgU2VxdWVuY2VzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwM3MxMS5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIG9uIE5vZGVzIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDNzMTFzMDIuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBUaGF0IFRlc3QgdGhlIENhcmRpbmFsaXR5IG9mIFNlcXVlbmNlcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAzczExczA0Lmh0bWwiIHRpdGxlPSJDb250ZXh0IEZ1bmN0aW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iRGVlcC1FcXVhbC4yQ19BZ2dyZWdhdGVfRnVuY3Rpb25zLjJDX2FuZF9GdW5jdGlvbnNfdGhhdF9HZW5lcmF0ZV9TZXF1ZW5jZXMiPjwvYT5EZWVwLUVxdWFsLCBBZ2dyZWdhdGUgRnVuY3Rpb25zLCBhbmQgRnVuY3Rpb25zIHRoYXQgR2VuZXJhdGUKLSAgICAgICAgU2VxdWVuY2VzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+YXZnKCgzLDQsNSkpPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmRvdWJsZSBhdmcgPSAoKFhTRG91YmxlKXJzLmZpcnN0KCkpLmRvdWJsZXZhbHVlKCk7Ci1wcmludGxuKGF2Zyk7PC9wcmU+PC9wPjxwPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bzs0LjAmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczExczA0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyNDNkNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Db250ZXh0IEZ1bmN0aW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDNzMTEuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBvbiBOb2RlcyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczExczAzLmh0bWwiIHRpdGxlPSJEZWVwLUVxdWFsLCBBZ2dyZWdhdGUgRnVuY3Rpb25zLCBhbmQgRnVuY3Rpb25zIHRoYXQgR2VuZXJhdGUgU2VxdWVuY2VzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDQuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGgiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkNvbnRleHRfRnVuY3Rpb25zIj48L2E+Q29udGV4dCBGdW5jdGlvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4oMTAgdG8gMjApID0gMjwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgcG9zID0gKChYU0ludGVnZXIpcnMuZmlyc3QoKSkuaW50dmFsdWUoKTsgcHJpbnRsbihwb3MpOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87MTEmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5ZjYxMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Ib3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MxMXMwNC5odG1sIiB0aXRsZT0iQ29udGV4dCBGdW5jdGlvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwMi5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbiBvZiBOdW1lcmljIFZhbHVlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iSG93X3RvX3VzZV9YUGF0aF8yLjBfb3BlcmF0b3JzX3dpdGhfUHN5Y2hvUGF0aCI+PC9hPkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGg8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDQuaHRtbCNPcGVyYXRvcnNfb25fTnVtZXJpY19WYWx1ZXMiPk9wZXJhdG9ycyBvbiBOdW1lcmljIFZhbHVlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDIuaHRtbCI+Q29tcGFyaXNvbiBvZiBOdW1lcmljIFZhbHVlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDMuaHRtbCI+T3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwNC5odG1sIj5Db21wYXJpc29ucyBvZiBEdXJhdGlvbiwgRGF0ZSBhbmQgVGltZSBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDA0czA1Lmh0bWwiPkFyaXRobWV0aWMgRnVuY3Rpb25zIG9uIER1cmF0aW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDYuaHRtbCI+QXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwNy5odG1sIj5PcGVyYXRvcnMgUmVsYXRlZCB0byBRTmFtZXMgQW5kIE5vZGVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwOC5odG1sIj5VbmlvbiwgSW50ZXJzZWN0aW9uIGFuZCBFeGNlcHQ8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDA0czA5Lmh0bWwiPk9wZXJhdG9ycyB0aGF0IEdlbmVyYXRlIFNlcXVlbmNlczwvYT48L3NwYW4+PC9saT48L3VsPjwvZGl2PjxwPlRoZSBhaW0gb2YgdGhpcyBzZWN0aW9uIGlzIHRvIGdpdmUgdGhlIHVzZXIgYW4gb3ZlcnZpZXcgb2YgdGhlCi0gICAgYXZhaWxhYmxlIFhQYXRoIDIuMCBvcGVyYXRvcnMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gUHN5Y2hvUGF0aC4gRm9yIHRoZQotICAgIGZvcm1hbCBzcGVjaWZpY2F0aW9ucywgc2VlIHRoZSBXM0Mgd2ViLXNpdGUgZm9yIFhQYXRoIDIuMCBmdW5jdGlvbnMgYW5kCi0gICAgb3BlcmF0b3JzIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZnVuY3Rpb25zLyIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aC1mdW5jdGlvbnMvPC9hPi48L3A+PHA+PC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9Ik9wZXJhdG9yc19vbl9OdW1lcmljX1ZhbHVlcyI+PC9hPk9wZXJhdG9ycyBvbiBOdW1lcmljIFZhbHVlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnhzOmludGVnZXIoNCkgKyB4czppbnRlZ2VyKDMpPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5JbnRlZ2VyIG4gPSAoKFhTSW50ZWdlcilycy5maXJzdCgpKS5pbnRlZ2VydmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87NyZyc3F1bzs8L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmQ0MGE1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbXBhcmlzb24gb2YgTnVtZXJpYyBWYWx1ZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDQuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwMy5odG1sIiB0aXRsZT0iT3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IkNvbXBhcmlzb25fb2ZfTnVtZXJpY19WYWx1ZXMiPjwvYT5Db21wYXJpc29uIG9mIE51bWVyaWMgVmFsdWVzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+eHM6ZGVjaW1hbCgzLjMpID0geHM6ZGVjaW1hbCg2LjYpPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOyBwcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87ZmFsc2UmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czAzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwMmIxZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5PcGVyYXRvcnMgb24gQm9vbGVhbiBWYWx1ZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDRzMDIuaHRtbCIgdGl0bGU9IkNvbXBhcmlzb24gb2YgTnVtZXJpYyBWYWx1ZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwNC5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbnMgb2YgRHVyYXRpb24sIERhdGUgYW5kIFRpbWUgVmFsdWVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9Ik9wZXJhdG9yc19vbl9Cb29sZWFuX1ZhbHVlcyI+PC9hPk9wZXJhdG9ycyBvbiBCb29sZWFuIFZhbHVlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnhzOmJvb2xlYW4oJnJzcXVvO3RydWUmcnNxdW87KSBndCB4czpib29sZWFuKCZyc3F1bztmYWxzZSZyc3F1bzspPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOyBwcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87dHJ1ZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWNjOWM1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbXBhcmlzb25zIG9mIER1cmF0aW9uLCBEYXRlIGFuZCBUaW1lIFZhbHVlczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDQuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwNHMwMy5odG1sIiB0aXRsZT0iT3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDRzMDUuaHRtbCIgdGl0bGU9IkFyaXRobWV0aWMgRnVuY3Rpb25zIG9uIER1cmF0aW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJDb21wYXJpc29uc19vZl9EdXJhdGlvbi4yQ19EYXRlX2FuZF9UaW1lX1ZhbHVlcyI+PC9hPkNvbXBhcmlzb25zIG9mIER1cmF0aW9uLCBEYXRlIGFuZCBUaW1lIFZhbHVlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnhzOnRpbWUoIjIzOjAwOjAwKzA2OjAwIikgbHQgeHM6dGltZSgiMTI6MDA6MDAtMDY6MDAiKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87dHJ1ZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTFiODY4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkFyaXRobWV0aWMgRnVuY3Rpb25zIG9uIER1cmF0aW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDQuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwNHMwNC5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbnMgb2YgRHVyYXRpb24sIERhdGUgYW5kIFRpbWUgVmFsdWVzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDRzMDYuaHRtbCIgdGl0bGU9IkFyaXRobWV0aWMgRnVuY3Rpb25zIERhdGVzIGFuZCBUaW1lcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJBcml0aG1ldGljX0Z1bmN0aW9uc19vbl9EdXJhdGlvbnMiPjwvYT5Bcml0aG1ldGljIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5tdWx0aXBseS1kYXlUaW1lRHVyYXRpb24oeHM6ZGF5VGltZUR1cmF0aW9uKCJQVDJIMTBNIiksIDIuMSk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlN0cmluZyBuID0gKChYRFREYXlUaW1lRHVyYXRpb24pcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD53aGljaCByZXR1cm5zIGEgeGR0OmRheVRpbWVEdXJhdGlvbiB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIDQgaG91cnMKLSAgICAgIGFuZCAzMyBtaW51dGVzICZsc3F1bztQVDRIMzNNJnJzcXVvOzwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czA2Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNzIyZWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czA2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+QXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwNC5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgb3BlcmF0b3JzIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDA0czA1Lmh0bWwiIHRpdGxlPSJBcml0aG1ldGljIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwNy5odG1sIiB0aXRsZT0iT3BlcmF0b3JzIFJlbGF0ZWQgdG8gUU5hbWVzIEFuZCBOb2RlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJBcml0aG1ldGljX0Z1bmN0aW9uc19EYXRlc19hbmRfVGltZXMiPjwvYT5Bcml0aG1ldGljIEZ1bmN0aW9ucyBEYXRlcyBhbmQgVGltZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5hZGQteWVhck1vbnRoRHVyYXRpb24tdG8tZGF0ZVRpbWUoIHhzOmRhdGVUaW1lKCIyMDAwLTEwLTMwVDExOjEyOjAwIiksIHhkdDp5ZWFyTW9udGhEdXJhdGlvbigiUDFZMk0iKSk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlN0cmluZyBuID0gKChYU0RhdGVUaW1lKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7IAotcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+d2hpY2ggcmV0dXJucyBhbiB4czpkYXRlVGltZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZXhpY2FsCi0gICAgICByZXByZXNlbnRhdGlvbiAmbHNxdW87MjAwMS0xMi0zMFQxMToxMjowMCZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDdkODM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPk9wZXJhdG9ycyBSZWxhdGVkIHRvIFFOYW1lcyBBbmQgTm9kZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDRzMDYuaHRtbCIgdGl0bGU9IkFyaXRobWV0aWMgRnVuY3Rpb25zIERhdGVzIGFuZCBUaW1lcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDA0czA4Lmh0bWwiIHRpdGxlPSJVbmlvbiwgSW50ZXJzZWN0aW9uIGFuZCBFeGNlcHQiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iT3BlcmF0b3JzX1JlbGF0ZWRfdG9fUU5hbWVzX0FuZF9Ob2RlcyI+PC9hPk9wZXJhdG9ycyBSZWxhdGVkIHRvIFFOYW1lcyBBbmQgTm9kZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj54czpRTmFtZSgmcnNxdW87YW8mcnNxdW87KSBlcSB4czpRTmFtZSgmcnNxdW87YW8mcnNxdW87KTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD53aGljaCByZXR1cm5zIHRoZSByZXN1bHQgb2YgJmxzcXVvO3RydWUmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czA4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0YTMwOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5VbmlvbiwgSW50ZXJzZWN0aW9uIGFuZCBFeGNlcHQ8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDRzMDcuaHRtbCIgdGl0bGU9Ik9wZXJhdG9ycyBSZWxhdGVkIHRvIFFOYW1lcyBBbmQgTm9kZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwOS5odG1sIiB0aXRsZT0iT3BlcmF0b3JzIHRoYXQgR2VuZXJhdGUgU2VxdWVuY2VzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IlVuaW9uLjJDX0ludGVyc2VjdGlvbl9hbmRfRXhjZXB0Ij48L2E+VW5pb24sIEludGVyc2VjdGlvbiBhbmQgRXhjZXB0PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dW5pb24oJHNlcTIsICRzZXEzKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Zm9yIChJdGVyYXRvciBpdGVyID0gcnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0gIE9iamVjdCBpdGVtID0gaXRlci5uZXh0KCk7Ci0gIFN0cmluZyBuID0gKChYU1N0cmluZylpdGVtKS5zdHJpbmd2YWx1ZSgpOwotICBwcmludChuICsgIiwgIik7Ci19Ci1wcmludGxuKCIiKTsKLTwvcHJlPjxwPiA8L3A+PHA+d2hpY2ggcmV0dXJucyB0aGUgc2VxdWVuY2UgY29uc2lzdGluZyBvZiAkaXRlbTEsICRpdGVtMiwKLSAgICAgICRpdGVtMy48L3A+PHA+PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czA5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgyMmEwMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5PcGVyYXRvcnMgdGhhdCBHZW5lcmF0ZSBTZXF1ZW5jZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDRzMDguaHRtbCIgdGl0bGU9IlVuaW9uLCBJbnRlcnNlY3Rpb24gYW5kIEV4Y2VwdCI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJPcGVyYXRvcnNfdGhhdF9HZW5lcmF0ZV9TZXF1ZW5jZXMiPjwvYT5PcGVyYXRvcnMgdGhhdCBHZW5lcmF0ZSBTZXF1ZW5jZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4oMSB0byAzKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IG4gPSAoWFNJbnRlZ2VyKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7IAotcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+d2hpY2ggcmV0dXJucyB0aGUgc2VxdWVuY2UgY29uc2lzdGluZyBvZiAxLCAyLCAzLjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ExYzE5MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+WFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbDwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iSW50cm9kdWN0aW9uIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9ImJvb2siIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDEgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJOMTAwMDEiPjwvYT5YUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsPC9oMT48L2Rpdj48L2Rpdj48aHI+PC9kaXY+PGRpdiBjbGFzcz0idG9jIj48cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+PHVsPjxsaT48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iY2gwMS5odG1sIj5JbnRyb2R1Y3Rpb248L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDEuaHRtbCNHZXR0aW5nX1BzeWNob1BhdGgiPkdldHRpbmcgUHN5Y2hvUGF0aDwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDAyLmh0bWwiPlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSTwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMi5odG1sI05vbi1TY2hlbWFfQXdhcmUiPk5vbi1TY2hlbWEgQXdhcmU8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAyLmh0bWwiPlNjaGVtYSBBd2FyZTwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDMuaHRtbCI+SG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoPC9hPjwvc3Bhbj48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzLmh0bWwjQ29uc3RhbnRzIj5Db25zdGFudHM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczAyLmh0bWwiPlBhdGggZXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczAzLmh0bWwiPkF4aXMgc3RlcHM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA0Lmh0bWwiPlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNS5odG1sIj5Bcml0aG1ldGljIEV4cHJlc3Npb25zPC9hPjwvc3Bhbj48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA1Lmh0bWwjVW5hcnkiPlVuYXJ5PC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNXMwMi5odG1sIj5NdWx0aXBsaWNhdGlvbiBhbmQgRGl2aXNpb246PC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNXMwMy5odG1sIj5BZGRpdGlvbiBhbmQgU3VidHJhY3Rpb246PC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDYuaHRtbCI+UmFuZ2UgZXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA3Lmh0bWwiPkNvbXBhcmlzb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwOC5odG1sIj5Db25kaXRpb25hbCBFeHByZXNzaW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDkuaHRtbCI+UXVhbnRpZmllZCBFeHByZXNzaW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMTAuaHRtbCI+QW5kLCBPciBFeHByZXNzaW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMTEuaHRtbCI+U2VxdWVuY2VUeXBlIE1hdGNoaW5nIEV4cHJlc3Npb25zPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDAzLmh0bWwiPkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGg8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDMuaHRtbCNBY2Nlc3NvcnMiPkFjY2Vzc29yczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDIuaHRtbCI+Q29uc3RydWN0b3IgRnVuY3Rpb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MwMy5odG1sIj5GdW5jdGlvbnMgb24gTnVtZXJpYyBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA0Lmh0bWwiPkZ1bmN0aW9ucyB0byBBc3NlbWJsZSBhbmQgRGlzYXNzZW1ibGUgU3RyaW5nczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDUuaHRtbCI+Q29tcGFyZSBhbmQgT3RoZXIgRnVuY3Rpb25zIG9uIFN0cmluZyBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA2Lmh0bWwiPkZ1bmN0aW9ucyBCYXNlZCBvbiBTdWJzdHJpbmcgTWF0Y2hpbmc8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA3Lmh0bWwiPlN0cmluZyBGdW5jdGlvbnMgdGhhdCBVc2UgUGF0dGVybiBNYXRjaGluZzwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDguaHRtbCI+RnVuY3Rpb25zIG9uIEJvb2xlYW4gVmFsdWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MwOS5odG1sIj5Db21wb25lbnQgRXh0cmFjdGlvbiBGdW5jdGlvbnMgb24gRHVyYXRpb25zLCBEYXRlcyBhbmQKLSAgICAgIFRpbWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMC5odG1sIj5GdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExLmh0bWwiPkZ1bmN0aW9ucyBvbiBOb2RlczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMS5odG1sI0dlbmVyYWxfRnVuY3Rpb25zX29uX1NlcXVlbmNlcyI+R2VuZXJhbCBGdW5jdGlvbnMgb24gU2VxdWVuY2VzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMXMwMi5odG1sIj5GdW5jdGlvbnMgVGhhdCBUZXN0IHRoZSBDYXJkaW5hbGl0eSBvZiBTZXF1ZW5jZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExczAzLmh0bWwiPkRlZXAtRXF1YWwsIEFnZ3JlZ2F0ZSBGdW5jdGlvbnMsIGFuZCBGdW5jdGlvbnMgdGhhdCBHZW5lcmF0ZQotICAgICAgICBTZXF1ZW5jZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExczA0Lmh0bWwiPkNvbnRleHQgRnVuY3Rpb25zPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDA0Lmh0bWwiPkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGg8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDQuaHRtbCNPcGVyYXRvcnNfb25fTnVtZXJpY19WYWx1ZXMiPk9wZXJhdG9ycyBvbiBOdW1lcmljIFZhbHVlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDIuaHRtbCI+Q29tcGFyaXNvbiBvZiBOdW1lcmljIFZhbHVlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDMuaHRtbCI+T3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwNC5odG1sIj5Db21wYXJpc29ucyBvZiBEdXJhdGlvbiwgRGF0ZSBhbmQgVGltZSBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDA0czA1Lmh0bWwiPkFyaXRobWV0aWMgRnVuY3Rpb25zIG9uIER1cmF0aW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDYuaHRtbCI+QXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwNy5odG1sIj5PcGVyYXRvcnMgUmVsYXRlZCB0byBRTmFtZXMgQW5kIE5vZGVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwOC5odG1sIj5VbmlvbiwgSW50ZXJzZWN0aW9uIGFuZCBFeGNlcHQ8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDA0czA5Lmh0bWwiPk9wZXJhdG9ycyB0aGF0IEdlbmVyYXRlIFNlcXVlbmNlczwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PC91bD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2xpYi8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvbGliLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOWJiMzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvbGliLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LmNvcmVfMS4xLjIuSTIwMDkwODEzLTE5MDAtZTN4Lmphcgotb3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQubWVkaWF3aWtpLmNvcmVfMS4xLjIuSTIwMDkwODEzLTE5MDAtZTN4LmphcgotcGx1Z2lucwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvbWVkaWF3aWtpLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9tZWRpYXdpa2kvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1MmY5ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9tZWRpYXdpa2kvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVzZXJtYW51YWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NzlkMjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wuZG9jCi12ZW5kb3JOYW1lID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXBsdWdpbk5hbWUgPSBYUGF0aCAyLjAgKFBzeWNob1BhdGgpIFVzZXIgRG9jdW1lbnRhdGlvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDI3OTEyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgIDx0b2MKLSAgICAgICAgICAgIGZpbGU9InRvYy54bWwiCi0gICAgICAgICAgICBwcmltYXJ5PSJ0cnVlIj4KLSAgICAgIDwvdG9jPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTE2YjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTx0b2MgdG9waWM9Imh0bWwvaW5kZXguaHRtbCIgbGFiZWw9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjx0b3BpYyBocmVmPSJodG1sL2NoMDEuaHRtbCIgbGFiZWw9IkludHJvZHVjdGlvbiI+PHRvcGljIGhyZWY9Imh0bWwvY2gwMS5odG1sI0dldHRpbmdfUHN5Y2hvUGF0aCIgbGFiZWw9IkdldHRpbmcgUHN5Y2hvUGF0aCI+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDIuaHRtbCIgbGFiZWw9IlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSSI+PHRvcGljIGhyZWY9Imh0bWwvY2gwMi5odG1sI05vbi1TY2hlbWFfQXdhcmUiIGxhYmVsPSJOb24tU2NoZW1hIEF3YXJlIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDIuaHRtbCIgbGFiZWw9IlNjaGVtYSBBd2FyZSI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAyczAzLmh0bWwiIGxhYmVsPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDMuaHRtbCNDb25zdGFudHMiIGxhYmVsPSJDb25zdGFudHMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwMnMwM3MwMi5odG1sIiBsYWJlbD0iUGF0aCBleHByZXNzaW9ucyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAyczAzczAzLmh0bWwiIGxhYmVsPSJBeGlzIHN0ZXBzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDQuaHRtbCIgbGFiZWw9IlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDUuaHRtbCIgbGFiZWw9IkFyaXRobWV0aWMgRXhwcmVzc2lvbnMiPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDUuaHRtbCNVbmFyeSIgbGFiZWw9IlVuYXJ5Ij48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDVzMDIuaHRtbCIgbGFiZWw9Ik11bHRpcGxpY2F0aW9uIGFuZCBEaXZpc2lvbjoiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwMnMwM3MwNXMwMy5odG1sIiBsYWJlbD0iQWRkaXRpb24gYW5kIFN1YnRyYWN0aW9uOiI+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDYuaHRtbCIgbGFiZWw9IlJhbmdlIGV4cHJlc3Npb25zIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDcuaHRtbCIgbGFiZWw9IkNvbXBhcmlzb25zIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDguaHRtbCIgbGFiZWw9IkNvbmRpdGlvbmFsIEV4cHJlc3Npb25zIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDkuaHRtbCIgbGFiZWw9IlF1YW50aWZpZWQgRXhwcmVzc2lvbnMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwMnMwM3MxMC5odG1sIiBsYWJlbD0iQW5kLCBPciBFeHByZXNzaW9ucyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAyczAzczExLmh0bWwiIGxhYmVsPSJTZXF1ZW5jZVR5cGUgTWF0Y2hpbmcgRXhwcmVzc2lvbnMiPjwvdG9waWM+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDMuaHRtbCIgbGFiZWw9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjx0b3BpYyBocmVmPSJodG1sL2NoMDMuaHRtbCNBY2Nlc3NvcnMiIGxhYmVsPSJBY2Nlc3NvcnMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MwMi5odG1sIiBsYWJlbD0iQ29uc3RydWN0b3IgRnVuY3Rpb25zIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDNzMDMuaHRtbCIgbGFiZWw9IkZ1bmN0aW9ucyBvbiBOdW1lcmljIFZhbHVlcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAzczA0Lmh0bWwiIGxhYmVsPSJGdW5jdGlvbnMgdG8gQXNzZW1ibGUgYW5kIERpc2Fzc2VtYmxlIFN0cmluZ3MiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MwNS5odG1sIiBsYWJlbD0iQ29tcGFyZSBhbmQgT3RoZXIgRnVuY3Rpb25zIG9uIFN0cmluZyBWYWx1ZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MwNi5odG1sIiBsYWJlbD0iRnVuY3Rpb25zIEJhc2VkIG9uIFN1YnN0cmluZyBNYXRjaGluZyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAzczA3Lmh0bWwiIGxhYmVsPSJTdHJpbmcgRnVuY3Rpb25zIHRoYXQgVXNlIFBhdHRlcm4gTWF0Y2hpbmciPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MwOC5odG1sIiBsYWJlbD0iRnVuY3Rpb25zIG9uIEJvb2xlYW4gVmFsdWVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDNzMDkuaHRtbCIgbGFiZWw9IkNvbXBvbmVudCBFeHRyYWN0aW9uIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMsIERhdGVzIGFuZCBUaW1lcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAzczEwLmh0bWwiIGxhYmVsPSJGdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MxMS5odG1sIiBsYWJlbD0iRnVuY3Rpb25zIG9uIE5vZGVzIj48dG9waWMgaHJlZj0iaHRtbC9jaDAzczExLmh0bWwjR2VuZXJhbF9GdW5jdGlvbnNfb25fU2VxdWVuY2VzIiBsYWJlbD0iR2VuZXJhbCBGdW5jdGlvbnMgb24gU2VxdWVuY2VzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDNzMTFzMDIuaHRtbCIgbGFiZWw9IkZ1bmN0aW9ucyBUaGF0IFRlc3QgdGhlIENhcmRpbmFsaXR5IG9mIFNlcXVlbmNlcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAzczExczAzLmh0bWwiIGxhYmVsPSJEZWVwLUVxdWFsLCBBZ2dyZWdhdGUgRnVuY3Rpb25zLCBhbmQgRnVuY3Rpb25zIHRoYXQgR2VuZXJhdGUgU2VxdWVuY2VzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDNzMTFzMDQuaHRtbCIgbGFiZWw9IkNvbnRleHQgRnVuY3Rpb25zIj48L3RvcGljPjwvdG9waWM+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDA0Lmh0bWwiIGxhYmVsPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48dG9waWMgaHJlZj0iaHRtbC9jaDA0Lmh0bWwjT3BlcmF0b3JzX29uX051bWVyaWNfVmFsdWVzIiBsYWJlbD0iT3BlcmF0b3JzIG9uIE51bWVyaWMgVmFsdWVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDRzMDIuaHRtbCIgbGFiZWw9IkNvbXBhcmlzb24gb2YgTnVtZXJpYyBWYWx1ZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwNHMwMy5odG1sIiBsYWJlbD0iT3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDRzMDQuaHRtbCIgbGFiZWw9IkNvbXBhcmlzb25zIG9mIER1cmF0aW9uLCBEYXRlIGFuZCBUaW1lIFZhbHVlcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDA0czA1Lmh0bWwiIGxhYmVsPSJBcml0aG1ldGljIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwNHMwNi5odG1sIiBsYWJlbD0iQXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDRzMDcuaHRtbCIgbGFiZWw9Ik9wZXJhdG9ycyBSZWxhdGVkIHRvIFFOYW1lcyBBbmQgTm9kZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwNHMwOC5odG1sIiBsYWJlbD0iVW5pb24sIEludGVyc2VjdGlvbiBhbmQgRXhjZXB0Ij48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDRzMDkuaHRtbCIgbGFiZWw9Ik9wZXJhdG9ycyB0aGF0IEdlbmVyYXRlIFNlcXVlbmNlcyI+PC90b3BpYz48L3RvcGljPjwvdG9jPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvLmNsYXNzcGF0aCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjNWUzMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NjZlN2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDE4NDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNUaHUgQXVnIDI3IDAwOjU3OjQ2IEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNjRhNjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYzsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy5BY3RpdmF0b3IKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzMDAwMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5BdWd1c3QsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzFmOWM1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGRvYy8sXAotICAgICAgICAgICAgICAgdGVzdFRvYy54bWwsXAotICAgICAgICAgICAgICAgdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGJpbi8KLWJpbi5leGNsdWRlcyA9IGRvYy9qZWwueG1sLFwKLSAgICAgICAgICAgICAgIGRvYy9qZWx0b2h0bWwueHNsLFwKLSAgICAgICAgICAgICAgIGRvYy9qZWx0b3RvYy54c2wsXAotICAgICAgICAgICAgICAgZG9jL2h0bWwvZGVsZXRlbWUuaHRtbAotc3JjLmluY2x1ZGVzID0gYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBzcmMvLFwKLSAgICAgICAgICAgICAgIHRvYy54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBkb2MvCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjE0ZGVmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvYnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAgSnVsIDIxLCAyMDA4IDY6NDY6MDIgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgIFNESyBEb2N1bWVudGF0aW9uICAgIAotICAgICBCdWlsZHMgU0RLIFRPQyBEb2N1bWVudGF0aW9uIHVzaW5nIEpFTERvY2xldC4KLSAgICAgICAgICAgICAgICAgICAKLSAgICAgZGNhcnZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTxwcm9qZWN0IG5hbWU9IlNESyBEb2N1bWVudGF0aW9uIiBkZWZhdWx0PSJkZWZhdWx0Ij4KLSAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICBCdWlsZHMgU0RLIFRPQyBEb2N1bWVudGF0aW9uIHVzaW5nIEpFTERvY2xldC4KLSAgICA8L2Rlc2NyaXB0aW9uPgotCQotCTxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2UiIGxvY2F0aW9uPSIuIi8+Ci0JPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZWxvYyIgbG9jYXRpb249Ii4uIi8+Ci0KLSAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAgICAgICB0YXJnZXQ6IGRlZmF1bHQgICAgICAgICAgICAgIAotICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgIDx0YXJnZXQgbmFtZT0iZGVmYXVsdCIgZGVzY3JpcHRpb249IkJ1aWxkcyBTREsgVE9DIERvY3VtZW50YXRpb24gdXNpbmcgSkVMRG9jbGV0LiI+Ci0KLSAgCSAgPGphdmFkb2MgZGVzdGRpcj0iZG9jIiBwYWNrYWdlPSJ0cnVlIiBkb2NsZXRwYXRoPSIke3dvcmtzcGFjZX0vbGliL2plbGRvY2xldC5qYXIiPgotICAJICAJIDxmaWxlc2V0IGRpcj0iJHt3b3Jrc3BhY2Vsb2N9Ij4KLQkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yLyouamF2YSIvPgotCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvYXN0LyouamF2YSIvPgotCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvZnVuY3Rpb24vKi5qYXZhIi8+Ci0JICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy8qLmphdmEiLz4KLSAgCSAgCSA8L2ZpbGVzZXQ+Ci0gIAkgICAgIDxkb2NsZXQgbmFtZT0iY29tLmplbGRvY2xldC5KRUxEb2NsZXQiLz4KLSAgCSAgPC9qYXZhZG9jPgotICAgIAkKLSAgICAgPHhzbHQgYmFzZWRpcj0iLiIgc3R5bGU9ImRvYy9qZWx0b2h0bWwueHNsIiBpbj0iZG9jL2plbC54bWwiIG91dD0iZG9jL2h0bWwvZGVsZXRlbWUuaHRtbCI+Ci0gIAkJPGZhY3RvcnkgbmFtZT0ib3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCI+Ci0gIAkJCTxhdHRyaWJ1dGUgbmFtZT0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuL2ZlYXR1cmVzL29wdGltaXplIiB2YWx1ZT0idHJ1ZSIvPgotICAJCQkKLSAgCQk8L2ZhY3Rvcnk+Ci0gICAgIDwveHNsdD4KLSAgICAJCi0gICAgCQotICAgICA8eHNsdCBzdHlsZT0iZG9jL2plbHRvdG9jLnhzbCIgaW49ImRvYy9qZWwueG1sIiBvdXQ9InRvYy54bWwiIGRlc3RkaXI9Ii4iPgotICAJCTxmYWN0b3J5IG5hbWU9Im9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiPgotICAJCQk8YXR0cmlidXRlIG5hbWU9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9mZWF0dXJlcy9vcHRpbWl6ZSIgdmFsdWU9InRydWUiLz4KLSAgCQk8L2ZhY3Rvcnk+Ci0gICAgIAk8cGFyYW0gbmFtZT0ic2RrbmFtZSIgZXhwcmVzc2lvbj0iWFNMIFRvb2xzIFNESyBEb2N1bWVudGF0aW9uIi8+Ci0gICAgIDwveHNsdD4KLSAgICAJCi0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUJ1aWxkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUJ1aWxkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI3MmU5ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01CdWlsZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRE9NQnVpbGRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRPTUJ1aWxkZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRoZSBET00gYnVpbGRlciBsb2FkcyBhbiBET00gZnJvbSBhbiBJbnB1dFN0cmVhbS4gVGhlIGxvYWRpbmcgaXMgYWx3YXlzIG5hbWVzcGFjZSBhd2FyZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX19uYW1lc3BhY2VfYXdhcmUiPl9uYW1lc3BhY2VfYXdhcmU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fdmFsaWRhdGluZyI+X3ZhbGlkYXRpbmc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RPTUJ1aWxkZXIiPkRPTUJ1aWxkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sb2FkIj5sb2FkPC9hPihqYXZhLmlvLklucHV0U3RyZWFtIGluKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIExvYWRzIFRoZSBYTUwgZG9jdW1lbnQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3ZhbGlkYXRpbmciPnNldF92YWxpZGF0aW5nPC9hPihib29sZWFuIHgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHZhbGlkYXRpbmcgYm9vbGVhbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX19uYW1lc3BhY2VfYXdhcmUiPl9uYW1lc3BhY2VfYXdhcmU8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgYm9vbGVhbiA8c3Ryb25nPl9uYW1lc3BhY2VfYXdhcmU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfX3ZhbGlkYXRpbmciPl92YWxpZGF0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW4gPHN0cm9uZz5fdmFsaWRhdGluZzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRE9NQnVpbGRlciI+RE9NQnVpbGRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRPTUJ1aWxkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIERPTSBidWlsZGVyLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2xvYWQiPmxvYWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uRG9jdW1lbnQgPHN0cm9uZz5sb2FkPC9zdHJvbmc+KGphdmEuaW8uSW5wdXRTdHJlYW0gaW4pPC9jb2RlPjwvcD48cD5Mb2FkcyBUaGUgWE1MIGRvY3VtZW50LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW48L2NvZGU+IC0gaXMgdGhlIGlucHV0IHN0cmVhbS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLkRvY3VtZW50PC9jb2RlPiAtIFRoZSBsb2FkZWQgZG9jdW1lbnQuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uIC0gRE9NIGxvYWRlciBleGNlcHRpb24uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfdmFsaWRhdGluZyI+c2V0X3ZhbGlkYXRpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF92YWxpZGF0aW5nPC9zdHJvbmc+KGJvb2xlYW4geCk8L2NvZGU+PC9wPjxwPlNldCB2YWxpZGF0aW5nIGJvb2xlYW4uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54PC9jb2RlPiAtIGlzIHRoZSB2YWx1ZSB0byBzZXQgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbiB0by48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmZTcxNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERPTUxvYWRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRPTUxvYWRlcjwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5UaGUgRE9NIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VtZW50Ljxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uRG9jdW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9hZCI+bG9hZDwvYT4oamF2YS5pby5JbnB1dFN0cmVhbSBpbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgRE9NIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VlbW50PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3ZhbGlkYXRpbmciPnNldF92YWxpZGF0aW5nPC9hPihib29sZWFuIHZhbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdmFsaWRhdGluZyBib29sZWFuLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfbG9hZCI+bG9hZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudCA8c3Ryb25nPmxvYWQ8L3N0cm9uZz4oamF2YS5pby5JbnB1dFN0cmVhbSBpbik8L2NvZGU+PC9wPjxwPlRoZSBET00gbG9hZGVyIGxvYWRzIHRoZSBYTUwgZG9jdWVtbnQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmluPC9jb2RlPiAtIGlzIHRoZSBpbnB1dCBzdHJlYW0uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT4gLSBUaGUgbG9hZGVkIGRvY3VtZW50LiBUaGUgZG9jdW1lbnQgaXMgYWx3YXlzIGxvYWRlZCBhcyBuYW1lc3BhY2UtYXdhcmU8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXJFeGNlcHRpb24gLSBET00gbG9hZGVyIGV4Y2VwdGlvbi48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF92YWxpZGF0aW5nIj5zZXRfdmFsaWRhdGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X3ZhbGlkYXRpbmc8L3N0cm9uZz4oYm9vbGVhbiB2YWwpPC9jb2RlPjwvcD48cD5TZXQgdmFsaWRhdGluZyBib29sZWFuLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFsPC9jb2RlPiAtIGlzIHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUxvYWRlckV4Y2VwdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YThlMjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBET01Mb2FkZXJFeGNlcHRpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5ET01Mb2FkZXJFeGNlcHRpb248L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uPC9wcmU+RXhjZXB0aW9uIGNhdXNlZCBieSBET00gbG9hZGVyLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9ET01Mb2FkZXJFeGNlcHRpb24iPkRPTUxvYWRlckV4Y2VwdGlvbjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZWFzb24pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9ET01Mb2FkZXJFeGNlcHRpb24iPkRPTUxvYWRlckV4Y2VwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRPTUxvYWRlckV4Y2VwdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBET00gbG9hZGVyIGV4Y2VwdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdER5bmFtaWNDb250ZXh0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RHluYW1pY0NvbnRleHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2Yzc2Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RHluYW1pY0NvbnRleHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZWZhdWx0RHluYW1pY0NvbnRleHQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5EZWZhdWx0RHluYW1pY0NvbnRleHQ8L3N0cm9uZz4KLWV4dGVuZHMgRGVmYXVsdFN0YXRpY0NvbnRleHQ8L3ByZT5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhIER5bmFtaWMgQ29udGV4dC4KLSAKLSBJbml0aWFsaXplcyBhbmQgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBvZiBhIGR5bmFtaWMgY29udGV4dCBhY2NvcmRpbmcgdG8gdGhlCi0gWFBhdGggMi4wIHNwZWNpZmljYXRpb24uPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RlZmF1bHREeW5hbWljQ29udGV4dCI+RGVmYXVsdER5bmFtaWNDb250ZXh0PC9hPjwvc3Ryb25nPihYU01vZGVsIHNjaGVtYQotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uRG9jdW1lbnQgZG9jKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkX2Z1bmN0aW9uX2xpYnJhcnkiPmFkZF9mdW5jdGlvbl9saWJyYXJ5PC9hPihGdW5jdGlvbkxpYnJhcnkgZmwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkcyBmdW5jdGlvbiBkZWZpbml0aW9ucy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udGV4dF9pdGVtIj5jb250ZXh0X2l0ZW08L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSBjb250ZXh0IGl0ZW0gdGhhdCBpcyBpbiBmb2N1czwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udGV4dF9wb3NpdGlvbiI+Y29udGV4dF9wb3NpdGlvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZm9jdXM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2N1cnJlbnRfZGF0ZV90aW1lIj5jdXJyZW50X2RhdGVfdGltZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldHMgdGhlIEN1cnJlbnQgc3RhYmxlIGRhdGUgdGltZSBmcm9tIHRoZSBkeW5hbWljIGNvbnRleHQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ldmFsdWF0ZV9mdW5jdGlvbiI+ZXZhbHVhdGVfZnVuY3Rpb248L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBhcmdzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBGb2N1czwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mb2N1cyI+Zm9jdXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm4gdGhlIGZvY3VzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRfZG9jIj5nZXRfZG9jPC9hPihqYXZhLm5ldC5VUkkgcmVzb2x2ZWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZ2V0IGRvY3VtZW50PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldF92YXJpYWJsZSI+Z2V0X3ZhcmlhYmxlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgdmFyaWFibGUgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbGFzdCI+bGFzdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBmb2N1czwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLm5ldC5VUkk8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzb2x2ZV91cmkiPnJlc29sdmVfdXJpPC9hPihqYXZhLmxhbmcuU3RyaW5nIHVyaSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfZm9jdXMiPnNldF9mb2N1czwvYT4oRm9jdXMgZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGFuZ2VzIHRoZSBjdXJyZW50IGZvY3VzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF92YXJpYWJsZSI+c2V0X3ZhcmlhYmxlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSB2YWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHoiPnR6PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmVhZHMgdGhlIGRheSBmcm9tIGEgVGltZUR1cmF0aW9uIHR5cGU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9EZWZhdWx0RHluYW1pY0NvbnRleHQiPkRlZmF1bHREeW5hbWljQ29udGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlZmF1bHREeW5hbWljQ29udGV4dDwvc3Ryb25nPihYU01vZGVsIHNjaGVtYQotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uRG9jdW1lbnQgZG9jKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkX2Z1bmN0aW9uX2xpYnJhcnkiPmFkZF9mdW5jdGlvbl9saWJyYXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRfZnVuY3Rpb25fbGlicmFyeTwvc3Ryb25nPihGdW5jdGlvbkxpYnJhcnkgZmwpPC9jb2RlPjwvcD48cD5BZGRzIGZ1bmN0aW9uIGRlZmluaXRpb25zLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Zmw8L2NvZGU+IC0gRnVuY3Rpb24gbGlicmFyeSB0byBhZGQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnRleHRfaXRlbSI+Y29udGV4dF9pdGVtPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Y29udGV4dF9pdGVtPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIGNvbnRleHQgaXRlbSB0aGF0IGlzIGluIGZvY3VzPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT4gLSBhbiBBbnlUeXBlIHJlc3VsdCBmcm9tIF9mb2N1cy5jb250ZXh0X2l0ZW0oKTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb250ZXh0X3Bvc2l0aW9uIj5jb250ZXh0X3Bvc2l0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmNvbnRleHRfcG9zaXRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBmb2N1czwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIGFuIGludGVnZXIgcmVzdWx0IGZyb20gX2ZvY3VzLnBvc2l0aW9uKCk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3VycmVudF9kYXRlX3RpbWUiPmN1cnJlbnRfZGF0ZV90aW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhciA8c3Ryb25nPmN1cnJlbnRfZGF0ZV90aW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldHMgdGhlIEN1cnJlbnQgc3RhYmxlIGRhdGUgdGltZSBmcm9tIHRoZSBkeW5hbWljIGNvbnRleHQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2V2YWx1YXRlX2Z1bmN0aW9uIj5ldmFsdWF0ZV9mdW5jdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5ldmFsdWF0ZV9mdW5jdGlvbjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLkNvbGxlY3Rpb24gYXJncyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT48L3A+PHA+PGNvZGU+YXJnczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBhIFJlc3VsdFNlcXVlbmNlIGZyb20gZnVuY3QuZXZhbHVhdGUoYXJncyk8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ZvY3VzIj5mb2N1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBGb2N1cyA8c3Ryb25nPmZvY3VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybiB0aGUgZm9jdXM8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkZvY3VzPC9jb2RlPiAtIF9mb2N1czwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfZG9jIj5nZXRfZG9jPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmdldF9kb2M8L3N0cm9uZz4oamF2YS5uZXQuVVJJIHJlc29sdmVkKTwvY29kZT48L3A+PHA+Z2V0IGRvY3VtZW50PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXNvbHZlZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBhIFJlc3VsdFNlcXVlbmNlIGZyb20gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfdmFyaWFibGUiPmdldF92YXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmdldF92YXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIHRoZSB2YXJpYWJsZSBuYW1lPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+IC0gYW4gQW55VHlwZSByZXN1bHQgZnJvbSBnZXRfdmFyKG5hbWUpIG9yIHJldHVybiBOVUxMPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xhc3QiPmxhc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bGFzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgZm9jdXM8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBhbiBpbnRlZ2VyIHJlc3VsdCBmcm9tIF9mb2N1cy5sYXN0KCk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVzb2x2ZV91cmkiPnJlc29sdmVfdXJpPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubmV0LlVSSSA8c3Ryb25nPnJlc29sdmVfdXJpPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT51cmk8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLm5ldC5VUkk8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF9mb2N1cyI+c2V0X2ZvY3VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfZm9jdXM8L3N0cm9uZz4oRm9jdXMgZik8L2NvZGU+PC9wPjxwPkNoYW5nZXMgdGhlIGN1cnJlbnQgZm9jdXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mPC9jb2RlPiAtIGZvY3VzIHRvIHNldDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfdmFyaWFibGUiPnNldF92YXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X3ZhcmlhYmxlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB2YXIKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIHZhbCk8L2NvZGU+PC9wPjxwPlNldHMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52YXI8L2NvZGU+IC0gVmFyaWFibGUgbmFtZS48L3A+PHA+PGNvZGU+dmFsPC9jb2RlPiAtIFZhcmlhYmxlIHZhbHVlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eiI+dHo8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz50ejwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZWFkcyB0aGUgZGF5IGZyb20gYSBUaW1lRHVyYXRpb24gdHlwZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+IC0gYW4geHM6aW50ZWdlciBfdHo8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTAzZGU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHRFdmFsdWF0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRGVmYXVsdEV2YWx1YXRvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRlZmF1bHRFdmFsdWF0b3I8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkRlZmF1bHQgZXZhbHVhdG9yIGludGVyZmFjZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EZWZhdWx0RXZhbHVhdG9yIj5EZWZhdWx0RXZhbHVhdG9yPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLkRvY3VtZW50IGRvYyk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXZhbHVhdGUiPmV2YWx1YXRlPC9hPihYUGF0aE5vZGUgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBldmFsdWF0ZSB0aGUgeHBhdGggbm9kZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCB4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBpdGVyYXRlIHRocm91Z2ggeHBhdGggZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oRm9yRXhwciBmZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgZm9yIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFF1YW50aWZpZWRFeHByIHFleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBxdWFudGlmaWVkIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KElmRXhwciBpZmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGlmIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KE9yRXhwciBvcmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IG9yIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEFuZEV4cHIgYW5kZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgYW5kIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KENtcEV4cHIgY21wZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgY29tcGFyZSBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihSYW5nZUV4cHIgcmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHJhbmdlIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEFkZEV4cHIgYWRkZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgYW5kIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFN1YkV4cHIgc3ViZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgc3ViIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KE11bEV4cHIgbXVsZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgbXVsdGlwbHkgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oRGl2RXhwciBtdWxleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBkaXZpc2lvbiBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihJRGl2RXhwciBtdWxleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBpbnRlZ2VyIGRpdmlzaW9uIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KE1vZEV4cHIgbXVsZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgbW9kdWxhciBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihVbmlvbkV4cHIgdW5leCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCB1bmlvbiBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihQaXBlRXhwciBwaXBleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBwaXBlIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEludGVyc2VjdEV4cHIgaWV4cHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgaW50ZXJzZWN0IGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEV4Y2VwdEV4cHIgZWV4cHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgZXhjZXB0IGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEluc3RPZkV4cHIgaW9leHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oVHJlYXRBc0V4cHIgdGFleHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgdHJlYXQtYXMgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oQ2FzdGFibGVFeHByIGNleHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgY2FzdGFibGUgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oQ2FzdEV4cHIgY2V4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBjYXN0IGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KE1pbnVzRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IG1pbnVzIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFBsdXNFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgcGx1cyBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihYUGF0aEV4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBYUGF0aCBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihGb3J3YXJkU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGEgZm9yd2FyZCBzdGVwIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFJldmVyc2VTdGVwIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgYSByZXZlcnNlIHN0ZXAgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oTmFtZVRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBhIG5hbWUgdGVzdCBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihWYXJSZWYgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCB2YXJpYWJsZSByZWZlcmVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFN0cmluZ0xpdGVyYWwgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBzdHJpbmcgbGl0ZXJhbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEludGVnZXJMaXRlcmFsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgaW50ZWdlciBsaXRlcmFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oRG91YmxlTGl0ZXJhbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGRvdWJsZSBsaXRlcmFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oRGVjaW1hbExpdGVyYWwgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBkZWNpbWFsIGxpdGVyYWwuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihQYXJFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgcGFyZW50IGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihDbnR4SXRlbUV4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEZ1bmN0aW9uQ2FsbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGZ1bmN0aW9uIGNhbGwuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihTaW5nbGVUeXBlIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgc2luZ2xlIHR5cGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihTZXF1ZW5jZVR5cGUgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBzZXF1ZW5jZSB0eXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oSXRlbVR5cGUgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBpdGVtIHR5cGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihBbnlLaW5kVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGFueSBraW5kIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihEb2N1bWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBkb2N1bWVudCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oVGV4dFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCB0ZXh0IHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihDb21tZW50VGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGNvbW1lbnQgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFBJVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IFBJIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihBdHRyaWJ1dGVUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgYXR0cmlidXRlIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihTY2hlbWFBdHRyVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEVsZW1lbnRUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgZWxlbWVudCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oU2NoZW1hRWxlbVRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBzY2hlbWEgZWxlbWVudCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oQXhpc1N0ZXAgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBheGlzIHN0ZXAuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihGaWx0ZXJFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgZmlsdGVyIGV4cHJlc3Npb248L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9EZWZhdWx0RXZhbHVhdG9yIj5EZWZhdWx0RXZhbHVhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RGVmYXVsdEV2YWx1YXRvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLkRvY3VtZW50IGRvYyk8L2NvZGU+PC9wPjxwPnNldCBwYXJhbWV0ZXJzPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZXZhbHVhdGUiPmV2YWx1YXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmV2YWx1YXRlPC9zdHJvbmc+KFhQYXRoTm9kZSBub2RlKTwvY29kZT48L3A+PHA+ZXZhbHVhdGUgdGhlIHhwYXRoIG5vZGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gaXMgdGhlIHhwYXRoIG5vZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gcmVzdWx0IHNlcXVlbmNlLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoIHhwKTwvY29kZT48L3A+PHA+aXRlcmF0ZSB0aHJvdWdoIHhwYXRoIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnhwPC9jb2RlPiAtIGlzIHRoZSB4cGF0aC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gcmVzdWx0IHNlcXVlbmNlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEZvckV4cHIgZmV4KTwvY29kZT48L3A+PHA+dmlzaXQgZm9yIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZleDwvY29kZT4gLSBpcyB0aGUgZm9yIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFF1YW50aWZpZWRFeHByIHFleCk8L2NvZGU+PC9wPjxwPnZpc2l0IHF1YW50aWZpZWQgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cWV4PC9jb2RlPiAtIGlzIHRoZSBxdWFudGlmaWVkIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uIG9yIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oSWZFeHByIGlmZXgpPC9jb2RlPjwvcD48cD52aXNpdCBpZiBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pZmV4PC9jb2RlPiAtIGlzIHRoZSBpZiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIGlmZXgudGhlbl9jbGF1c2UoKS5hY2NlcHQodGhpcykuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oT3JFeHByIG9yZXgpPC9jb2RlPjwvcD48cD52aXNpdCBvciBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vcmV4PC9jb2RlPiAtIGlzIHRoZSBvciBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEFuZEV4cHIgYW5kZXgpPC9jb2RlPjwvcD48cD52aXNpdCBhbmQgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5kZXg8L2NvZGU+IC0gaXMgdGhlIGFuZCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KENtcEV4cHIgY21wZXgpPC9jb2RlPjwvcD48cD52aXNpdCBjb21wYXJlIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNtcGV4PC9jb2RlPiAtIGlzIHRoZSBjb21wYXJlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uIG9yIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihSYW5nZUV4cHIgcmV4KTwvY29kZT48L3A+PHA+dmlzaXQgcmFuZ2UgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmV4PC9jb2RlPiAtIGlzIHRoZSByYW5nZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEFkZEV4cHIgYWRkZXgpPC9jb2RlPjwvcD48cD52aXNpdCBhbmQgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWRkZXg8L2NvZGU+IC0gaXMgdGhlIGFuZCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFN1YkV4cHIgc3ViZXgpPC9jb2RlPjwvcD48cD52aXNpdCBzdWIgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3ViZXg8L2NvZGU+IC0gaXMgdGhlIHN1YiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KE11bEV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD52aXNpdCBtdWx0aXBseSBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tdWxleDwvY29kZT4gLSBpcyB0aGUgbXVsIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oRGl2RXhwciBtdWxleCk8L2NvZGU+PC9wPjxwPnZpc2l0IGRpdmlzaW9uIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBkaXZpc2lvbiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KElEaXZFeHByIG11bGV4KTwvY29kZT48L3A+PHA+dmlzaXQgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tdWxleDwvY29kZT4gLSBpcyB0aGUgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KE1vZEV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD52aXNpdCBtb2R1bGFyIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBtb2R1bGFyIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oVW5pb25FeHByIHVuZXgpPC9jb2RlPjwvcD48cD52aXNpdCB1bmlvbiBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT51bmV4PC9jb2RlPiAtIGlzIHRoZSB1bmlvbiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFBpcGVFeHByIHBpcGV4KTwvY29kZT48L3A+PHA+dmlzaXQgcGlwZSBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5waXBleDwvY29kZT4gLSBpcyB0aGUgcGlwZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEludGVyc2VjdEV4cHIgaWV4cHIpPC9jb2RlPjwvcD48cD52aXNpdCBpbnRlcnNlY3QgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aWV4cHI8L2NvZGU+IC0gaXMgdGhlIGludGVyc2VjdCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEV4Y2VwdEV4cHIgZWV4cHIpPC9jb2RlPjwvcD48cD52aXNpdCBleGNlcHQgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWV4cHI8L2NvZGU+IC0gaXMgdGhlIGV4Y2VwdCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEluc3RPZkV4cHIgaW9leHApPC9jb2RlPjwvcD48cD52aXNpdCBpbnN0YW5jZSBvZiBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pb2V4cDwvY29kZT4gLSBpcyB0aGUgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihUcmVhdEFzRXhwciB0YWV4cCk8L2NvZGU+PC9wPjxwPnZpc2l0IHRyZWF0LWFzIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRhZXhwPC9jb2RlPiAtIGlzIHRoZSB0cmVhdC1hcyBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KENhc3RhYmxlRXhwciBjZXhwKTwvY29kZT48L3A+PHA+dmlzaXQgY2FzdGFibGUgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2V4cDwvY29kZT4gLSBpcyB0aGUgY2FzdGFibGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihDYXN0RXhwciBjZXhwKTwvY29kZT48L3A+PHA+dmlzaXQgY2FzdCBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jZXhwPC9jb2RlPiAtIGlzIHRoZSBjYXN0IGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oTWludXNFeHByIGUpPC9jb2RlPjwvcD48cD52aXNpdCBtaW51cyBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBtaW51cyBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFBsdXNFeHByIGUpPC9jb2RlPjwvcD48cD52aXNpdCBwbHVzIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHBsdXMgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihYUGF0aEV4cHIgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IFhQYXRoIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIFhQYXRoIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oRm9yd2FyZFN0ZXAgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGEgZm9yd2FyZCBzdGVwIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGZvcndhcmQgc3RlcC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihSZXZlcnNlU3RlcCBlKTwvY29kZT48L3A+PHA+dmlzaXQgYSByZXZlcnNlIHN0ZXAgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgcmV2ZXJzZSBzdGVwLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KE5hbWVUZXN0IGUpPC9jb2RlPjwvcD48cD52aXNpdCBhIG5hbWUgdGVzdCBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZW5hbWUgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihWYXJSZWYgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IHZhcmlhYmxlIHJlZmVyZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgdmFyaWFibGUgcmVmZXJlbmNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFN0cmluZ0xpdGVyYWwgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IHN0cmluZyBsaXRlcmFsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgc3RyaW5nIGxpdGVyYWwuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oSW50ZWdlckxpdGVyYWwgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGludGVnZXIgbGl0ZXJhbC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGludGVnZXIgbGl0ZXJhbC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihEb3VibGVMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD52aXNpdCBkb3VibGUgbGl0ZXJhbC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGRvdWJsZSBsaXRlcmFsLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KERlY2ltYWxMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD52aXNpdCBkZWNpbWFsIGxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBkZWNpbWFsIGxpdGVyYWwuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oUGFyRXhwciBlKTwvY29kZT48L3A+PHA+dmlzaXQgcGFyZW50IGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBwYXJlbnQgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihDbnR4SXRlbUV4cHIgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGNvbnRleHQgaXRlbSBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgY29udGV4dCBpdGVtIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oRnVuY3Rpb25DYWxsIGUpPC9jb2RlPjwvcD48cD52aXNpdCBmdW5jdGlvbiBjYWxsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZnVuY3Rpb24gY2FsbC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb24gb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFNpbmdsZVR5cGUgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IHNpbmdsZSB0eXBlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgc2luZ2xlIHR5cGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihTZXF1ZW5jZVR5cGUgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IHNlcXVlbmNlIHR5cGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBzZXF1ZW5jZSB0eXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oSXRlbVR5cGUgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGl0ZW0gdHlwZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGl0ZW0gdHlwZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEFueUtpbmRUZXN0IGUpPC9jb2RlPjwvcD48cD52aXNpdCBhbnkga2luZCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgYW55IGtpbmQgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihEb2N1bWVudFRlc3QgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGRvY3VtZW50IHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBkb2N1bWVudCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihUZXh0VGVzdCBlKTwvY29kZT48L3A+PHA+dmlzaXQgdGV4dCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgdGV4dCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KENvbW1lbnRUZXN0IGUpPC9jb2RlPjwvcD48cD52aXNpdCBjb21tZW50IHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSB0ZXh0IHRlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oUElUZXN0IGUpPC9jb2RlPjwvcD48cD52aXNpdCBQSSB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgUEkgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBhcmd1bWVudDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEF0dHJpYnV0ZVRlc3QgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGF0dHJpYnV0ZSB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgYXR0cmlidXRlIHRlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oU2NoZW1hQXR0clRlc3QgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihFbGVtZW50VGVzdCBlKTwvY29kZT48L3A+PHA+dmlzaXQgZWxlbWVudCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZWxlbWVudCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFNjaGVtYUVsZW1UZXN0IGUpPC9jb2RlPjwvcD48cD52aXNpdCBzY2hlbWEgZWxlbWVudCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgc2NoZW1hIGVsZW1lbnQgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihBeGlzU3RlcCBlKTwvY29kZT48L3A+PHA+dmlzaXQgYXhpcyBzdGVwLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgYXhpcyBzdGVwLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEZpbHRlckV4cHIgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGZpbHRlciBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMGFlNDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEeW5hbWljQ29udGV4dDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkR5bmFtaWNDb250ZXh0PC9zdHJvbmc+Ci1leHRlbmRzIDwvcHJlPkludGVyZmFjZSBmb3IgZHluYW1pYyBjb250ZXh0Ljxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udGV4dF9pdGVtIj5jb250ZXh0X2l0ZW08L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgY29udGV4dCBpdGVtLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udGV4dF9wb3NpdGlvbiI+Y29udGV4dF9wb3NpdGlvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBjb250ZXh0IG5vZGUgcG9zaXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jdXJyZW50X2RhdGVfdGltZSI+Y3VycmVudF9kYXRlX3RpbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IGRhdGUgdGltZSB1c2luZyB0aGUgR3JlZ29yaWFuQ2FsZW5kYXIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ldmFsdWF0ZV9mdW5jdGlvbiI+ZXZhbHVhdGVfZnVuY3Rpb248L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBhcmdzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEV2YWx1YXRlIHRoZSBmdW5jdGlvbiBvZiB0aGUgYXJndW1lbnRzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBGb2N1czwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mb2N1cyI+Zm9jdXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm4gZm9jdXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRfZG9jIj5nZXRfZG9jPC9hPihqYXZhLm5ldC5VUkkgdXJpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBkb2N1bWVudC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0X3ZhcmlhYmxlIj5nZXRfdmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB2YXJpYWJsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xhc3QiPmxhc3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgcG9zaXRpb24gb2YgbGFzdCBpdGVtLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLm5ldC5VUkk8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzb2x2ZV91cmkiPnJlc29sdmVfdXJpPC9hPihqYXZhLmxhbmcuU3RyaW5nIHVyaSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXNvbHZlIGFuIFVSSTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF9mb2N1cyI+c2V0X2ZvY3VzPC9hPihGb2N1cyBmb2N1cyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgZm9jdXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3ZhcmlhYmxlIj5zZXRfdmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB2YXIKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIHZhbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdmFyaWFibGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R6Ij50ejwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJlYWRzIHRoZSBkYXkgZnJvbSBhIFRpbWVEdXJhdGlvbiB0eXBlPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb250ZXh0X2l0ZW0iPmNvbnRleHRfaXRlbTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmNvbnRleHRfaXRlbTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgY29udGV4dCBpdGVtLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+IC0gdGhlIGNvbnRleHQgaXRlbS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29udGV4dF9wb3NpdGlvbiI+Y29udGV4dF9wb3NpdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5jb250ZXh0X3Bvc2l0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCBjb250ZXh0IG5vZGUgcG9zaXRpb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gcG9zaXRpb24gb2YgY29udGV4dCBub2RlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jdXJyZW50X2RhdGVfdGltZSI+Y3VycmVudF9kYXRlX3RpbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyIDxzdHJvbmc+Y3VycmVudF9kYXRlX3RpbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY3VycmVudCBkYXRlIHRpbWUgdXNpbmcgdGhlIEdyZWdvcmlhbkNhbGVuZGFyLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPiAtIFRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUsIHdoaWNoIHdpbGwgYWx3YXlzIGJlIHNhbWUgZm9yIHRoZSBkeW5hbWljIGNvbnRleHQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2V2YWx1YXRlX2Z1bmN0aW9uIj5ldmFsdWF0ZV9mdW5jdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5ldmFsdWF0ZV9mdW5jdGlvbjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLkNvbGxlY3Rpb24gYXJncyk8L2NvZGU+PC9wPjxwPkV2YWx1YXRlIHRoZSBmdW5jdGlvbiBvZiB0aGUgYXJndW1lbnRzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyB0aGUgbmFtZS48L3A+PHA+PGNvZGU+YXJnczwvY29kZT4gLSBhcmUgdGhlIGFyZ3VtZW50cy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGV2YWx1YXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIC0gZHluYW1pYyBlcnJvci48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ZvY3VzIj5mb2N1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBGb2N1cyA8c3Ryb25nPmZvY3VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybiBmb2N1cy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkZvY3VzPC9jb2RlPiAtIEZvY3VzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldF9kb2MiPmdldF9kb2M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Z2V0X2RvYzwvc3Ryb25nPihqYXZhLm5ldC5VUkkgdXJpKTwvY29kZT48L3A+PHA+R2V0IGRvY3VtZW50LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dXJpPC9jb2RlPiAtIGlzIHRoZSBVUkkgb2YgdGhlIGRvY3VtZW50LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIGRvY3VtZW50LjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfdmFyaWFibGUiPmdldF92YXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmdldF92YXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPkdldCB2YXJpYWJsZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+IC0gdmFyaWFibGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xhc3QiPmxhc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bGFzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgcG9zaXRpb24gb2YgbGFzdCBpdGVtLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIGxhc3QgaXRlbSBwb3NpdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVzb2x2ZV91cmkiPnJlc29sdmVfdXJpPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubmV0LlVSSSA8c3Ryb25nPnJlc29sdmVfdXJpPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48L3A+PHA+UmVzb2x2ZSBhbiBVUkk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnVyaTwvY29kZT4gLSBpcyB0aGUgcG9zc2libHkgcmVsYXRpdmUgVVJJIHRvIHJlc29sdmU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubmV0LlVSSTwvY29kZT4gLSB0aGUgYWJzb2x1dGl6ZWQsIHJlc29sdmVkIFVSSS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X2ZvY3VzIj5zZXRfZm9jdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF9mb2N1czwvc3Ryb25nPihGb2N1cyBmb2N1cyk8L2NvZGU+PC9wPjxwPlNldCBmb2N1cy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZvY3VzPC9jb2RlPiAtIGlzIGZvY3VzIHRvIGJlIHNldC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X3ZhcmlhYmxlIj5zZXRfdmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF92YXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSB2YWwpPC9jb2RlPjwvcD48cD5TZXQgdmFyaWFibGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52YXI8L2NvZGU+IC0gaXMgbmFtZSBvZiB0aGUgdmFyaWFibGUuPC9wPjxwPjxjb2RlPnZhbDwvY29kZT4gLSBpcyB0aGUgdmFsdWUgdG8gYmUgc2V0IGZvciB0aGUgdmFyaWFibGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R6Ij50ejwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiA8c3Ryb25nPnR6PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJlYWRzIHRoZSBkYXkgZnJvbSBhIFRpbWVEdXJhdGlvbiB0eXBlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT4gLSBjdXJyZW50IGRhdGUgdGltZSBhbmQgaW1wbGljaXQgdGltZXpvbmUuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOTBkNDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRHluYW1pY0Vycm9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RHluYW1pY0Vycm9yPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aEV4Y2VwdGlvbjwvcHJlPkR5bmFtaWMgRXJyb3IgbGlrZSBkaXZpc2lvbiBieSAwIG9yIHR5cGUgZXJyb3JzLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EeW5hbWljRXJyb3IiPkR5bmFtaWNFcnJvcjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBjb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0R5bmFtaWNFcnJvciI+RHluYW1pY0Vycm9yPC9hPjwvc3Ryb25nPihUeXBlRXJyb3IgdGUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FudF9jYXN0Ij5jYW50X2Nhc3Q8L2E+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29kZSI+Y29kZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHN0cmluZyBvZiB0aGUgY29kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udGV4dFVuZGVmaW5lZCI+Y29udGV4dFVuZGVmaW5lZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXZfemVybyI+ZGl2X3plcm88L2E+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBhIERpdmlzaW9uIGJ5IHplcm88L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZG9jX25vdF9mb3VuZCI+ZG9jX25vdF9mb3VuZDwvYT4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIGZuOmRvYyBjYW5ub3QgbG9hZCBpdHMgZG9jdW1lbnQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW1wdHlfc2VxIj5lbXB0eV9zZXE8L2E+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW52YWxpZF9kb2MiPmludmFsaWRfZG9jPC9hPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gcmVhZHMgSW52YWxpZCBhcmd1bWVudCB0byBmbjpkb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW52YWxpZEZvckNhc3RDb25zdHJ1Y3RvciI+aW52YWxpZEZvckNhc3RDb25zdHJ1Y3RvcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIERhdGEgaXMgaW52YWxpZCBmb3IgY2FzdGluZyBvciB0aGUgZGF0YSB0eXBlIGNvbnN0cnVjdG9yLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnZhbGlkUHJlZml4Ij5pbnZhbGlkUHJlZml4PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTm8gbmFtZXNwYWNlIGZvdW5kIGZvciBwcmVmaXguPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xleGljYWxfZXJyb3IiPmxleGljYWxfZXJyb3I8L2E+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBhbiBJbnZhbGlkIGxleGljYWwgdmFsdWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbW9yZV9vbmVfaXRlbSI+bW9yZV9vbmVfaXRlbTwvYT4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub0NvbnRleHREb2MiPm5vQ29udGV4dERvYzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE5vIGNvbnRleHQgZG9jdW1lbnQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm90X2NtcCI+bm90X2NtcDwvYT4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEl0ZW1zIG5vdCBjb21wYXJhYmxlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25vdF9vbmUiPm5vdF9vbmU8L2E+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbnVtZXJpY19vdmVyZmxvdyI+bnVtZXJpY19vdmVyZmxvdzwvYT4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTnVtZXJpYyBvcGVyYXRpb24gb3ZlcmZsb3cvdW5kZXJmbG93PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlZ2V4X2Vycm9yIj5yZWdleF9lcnJvcjwvYT4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVnZXhfZmxhZ3NfZXJyb3IiPnJlZ2V4X2ZsYWdzX2Vycm9yPC9hPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBEeW5hbWljIEVycm9yIGZvciBpbnZhbGlkIGZsYWdzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVnZXhfbWF0Y2hfemVyb19sZW5ndGgiPnJlZ2V4X21hdGNoX3plcm9fbGVuZ3RoPC9hPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aHJvd190eXBlX2Vycm9yIj50aHJvd190eXBlX2Vycm9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdW5zdXBwb3J0ZWRfY29kZXBvaW50Ij51bnN1cHBvcnRlZF9jb2RlcG9pbnQ8L2E+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIFVuaWNvZGUgY29kZXBvaW50PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Vuc3VwcG9ydGVkX25vcm1hbGl6YXRpb25fZm9ybSI+dW5zdXBwb3J0ZWRfbm9ybWFsaXphdGlvbl9mb3JtPC9hPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yIGZvciBhbiB1bnN1cHBvcnRlZCBub3JtYWxpemF0aW9uIGZvcm08L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXNlcl9lcnJvciI+dXNlcl9lcnJvcjwvYT4oamF2YS5sYW5nLlN0cmluZyBucwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBjb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGRlc2MpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXNlcl9lcnJvciI+dXNlcl9lcnJvcjwvYT4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9EeW5hbWljRXJyb3IiPkR5bmFtaWNFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkR5bmFtaWNFcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIER5bmFtaWMgRXJyb3IuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0R5bmFtaWNFcnJvciI+RHluYW1pY0Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RHluYW1pY0Vycm9yPC9zdHJvbmc+KFR5cGVFcnJvciB0ZSk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBEeW5hbWljIEVycm9yLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbnRfY2FzdCI+Y2FudF9jYXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5jYW50X2Nhc3Q8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXJyPC9jb2RlPiAtIGlzIHRoZSBlcnJvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgRHluYW1pY0Vycm9yLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb2RlIj5jb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5jb2RlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHN0cmluZyBvZiB0aGUgY29kZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIGNvZGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnRleHRVbmRlZmluZWQiPmNvbnRleHRVbmRlZmluZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPmNvbnRleHRVbmRlZmluZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXZfemVybyI+ZGl2X3plcm88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPmRpdl96ZXJvPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGEgRGl2aXNpb24gYnkgemVybzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPiAtIGlzIHRoZSBtZXNzYWdlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBtYWtlX2Vycm9yPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RvY19ub3RfZm91bmQiPmRvY19ub3RfZm91bmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPmRvY19ub3RfZm91bmQ8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gZm46ZG9jIGNhbm5vdCBsb2FkIGl0cyBkb2N1bWVudDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPiAtIGlzIHRoZSBtZXNzYWdlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBtYWtlX2Vycm9yPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VtcHR5X3NlcSI+ZW1wdHlfc2VxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5lbXB0eV9zZXE8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tc2c8L2NvZGU+IC0gaXMgdGhlIG1lc3NhZ2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+IC0gdGhlIG1ha2VfZXJyb3I8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW52YWxpZF9kb2MiPmludmFsaWRfZG9jPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5pbnZhbGlkX2RvYzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBJbnZhbGlkIGFyZ3VtZW50IHRvIGZuOmRvYzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPiAtIGlzIHRoZSBtZXNzYWdlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBtYWtlX2Vycm9yPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ludmFsaWRGb3JDYXN0Q29uc3RydWN0b3IiPmludmFsaWRGb3JDYXN0Q29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPmludmFsaWRGb3JDYXN0Q29uc3RydWN0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+RGF0YSBpcyBpbnZhbGlkIGZvciBjYXN0aW5nIG9yIHRoZSBkYXRhIHR5cGUgY29uc3RydWN0b3IuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIEZPUkcwMDAxPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ludmFsaWRQcmVmaXgiPmludmFsaWRQcmVmaXg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPmludmFsaWRQcmVmaXg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Tm8gbmFtZXNwYWNlIGZvdW5kIGZvciBwcmVmaXguPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sZXhpY2FsX2Vycm9yIj5sZXhpY2FsX2Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5sZXhpY2FsX2Vycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEludmFsaWQgbGV4aWNhbCB2YWx1ZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPiAtIGlzIHRoZSBtZXNzYWdlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBtYWtlX2Vycm9yPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21vcmVfb25lX2l0ZW0iPm1vcmVfb25lX2l0ZW08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPm1vcmVfb25lX2l0ZW08L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tc2c8L2NvZGU+IC0gaXMgdGhlIG1lc3NhZ2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+IC0gdGhlIG1ha2VfZXJyb3I8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfbm9Db250ZXh0RG9jIj5ub0NvbnRleHREb2M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPm5vQ29udGV4dERvYzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5ObyBjb250ZXh0IGRvY3VtZW50PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ub3RfY21wIj5ub3RfY21wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5ub3RfY21wPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEl0ZW1zIG5vdCBjb21wYXJhYmxlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tc2c8L2NvZGU+IC0gaXMgdGhlIG1lc3NhZ2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+IC0gdGhlIG1ha2VfZXJyb3I8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfbm90X29uZSI+bm90X29uZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+bm90X29uZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1zZzwvY29kZT4gLSBpcyB0aGUgbWVzc2FnZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgbWFrZV9lcnJvcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9udW1lcmljX292ZXJmbG93Ij5udW1lcmljX292ZXJmbG93PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5udW1lcmljX292ZXJmbG93PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48L3A+PHA+TnVtZXJpYyBvcGVyYXRpb24gb3ZlcmZsb3cvdW5kZXJmbG93PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tc2c8L2NvZGU+IC0gaXMgdGhlIG1lc3NhZ2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+IC0gdGhlIG1ha2VfZXJyb3I8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVnZXhfZXJyb3IiPnJlZ2V4X2Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5yZWdleF9lcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lcnI8L2NvZGU+IC0gaXMgdGhlIGVycm9yPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBEeW5hbWljRXJyb3IuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlZ2V4X2ZsYWdzX2Vycm9yIj5yZWdleF9mbGFnc19lcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+cmVnZXhfZmxhZ3NfZXJyb3I8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBEeW5hbWljIEVycm9yIGZvciBpbnZhbGlkIGZsYWdzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnM8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVycjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlZ2V4X21hdGNoX3plcm9fbGVuZ3RoIj5yZWdleF9tYXRjaF96ZXJvX2xlbmd0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+cmVnZXhfbWF0Y2hfemVyb19sZW5ndGg8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXJyPC9jb2RlPiAtIGlzIHRoZSBlcnJvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgRHluYW1pY0Vycm9yLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aHJvd190eXBlX2Vycm9yIj50aHJvd190eXBlX2Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz50aHJvd190eXBlX2Vycm9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBEeW5hbWljRXJyb3IuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIC0gYSBEeW5hbWljIEVycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91bnN1cHBvcnRlZF9jb2RlcG9pbnQiPnVuc3VwcG9ydGVkX2NvZGVwb2ludDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+dW5zdXBwb3J0ZWRfY29kZXBvaW50PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgVW5pY29kZSBjb2RlcG9pbnQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVycjwvY29kZT4gLSBpcyB0aGUgZXJyb3I8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+IC0gdGhlIER5bmFtaWNFcnJvci48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdW5zdXBwb3J0ZWRfbm9ybWFsaXphdGlvbl9mb3JtIj51bnN1cHBvcnRlZF9ub3JtYWxpemF0aW9uX2Zvcm08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPnVuc3VwcG9ydGVkX25vcm1hbGl6YXRpb25fZm9ybTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIG5vcm1hbGl6YXRpb24gZm9ybTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXJyPC9jb2RlPiAtIGlzIHRoZSBlcnJvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgRHluYW1pY0Vycm9yLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91c2VyX2Vycm9yIj51c2VyX2Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz51c2VyX2Vycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbnMKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgY29kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBkZXNjKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5zPC9jb2RlPjwvcD48cD48Y29kZT5jb2RlPC9jb2RlPjwvcD48cD48Y29kZT5kZXNjPC9jb2RlPiAtIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3I8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+IC0gdGhlIER5bmFtaWNFcnJvci48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXNlcl9lcnJvciI+dXNlcl9lcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+dXNlcl9lcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lcnI8L2NvZGU+IC0gaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgRHluYW1pY0Vycm9yLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5FdmFsdWF0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkV2YWx1YXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDg4ZGQ4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkV2YWx1YXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRXZhbHVhdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RXZhbHVhdG9yPC9zdHJvbmc+Ci1leHRlbmRzIDwvcHJlPmludGVyZmFjZSB0byBFdmFsdWF0b3I8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ldmFsdWF0ZSI+ZXZhbHVhdGU8L2E+KFhQYXRoTm9kZSByb290KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEV2YWx1YXRlIHRoZSByb290IG5vZGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9ldmFsdWF0ZSI+ZXZhbHVhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZXZhbHVhdGU8L3N0cm9uZz4oWFBhdGhOb2RlIHJvb3QpPC9jb2RlPjwvcD48cD5FdmFsdWF0ZSB0aGUgcm9vdCBub2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cm9vdDwvY29kZT4gLSBpcyB0aGUgWFBhdGggbm9kZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBSZXN1bHQgb2YgZXZhbHVhdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgLSBkeW5hbWljIGVycm9yLjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuSkZsZXhDdXBQYXJzZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkpGbGV4Q3VwUGFyc2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5OTRhMzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuSkZsZXhDdXBQYXJzZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEpGbGV4Q3VwUGFyc2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SkZsZXhDdXBQYXJzZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkpGbGV4Q3VwUGFyc2VyIHBhcnNlcyB0aGUgeHBhdGggZXhwcmVzc2lvbjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9KRmxleEN1cFBhcnNlciI+SkZsZXhDdXBQYXJzZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlIj5wYXJzZTwvYT4oamF2YS5sYW5nLlN0cmluZyB4cGF0aCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUcmllcyB0byBwYXJzZSB0aGUgeHBhdGggZXhwcmVzc2lvbjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0pGbGV4Q3VwUGFyc2VyIj5KRmxleEN1cFBhcnNlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkpGbGV4Q3VwUGFyc2VyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlIj5wYXJzZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoIDxzdHJvbmc+cGFyc2U8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4cGF0aCk8L2NvZGU+PC9wPjxwPlRyaWVzIHRvIHBhcnNlIHRoZSB4cGF0aCBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54cGF0aDwvY29kZT4gLSBpcyB0aGUgeHBhdGggc3RyaW5nLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aDwvY29kZT4gLSB0aGUgeHBhdGggdmFsdWUuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDgxMmE2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUmVzdWx0U2VxdWVuY2U8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5SZXN1bHRTZXF1ZW5jZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+SW50ZXJmYWNlIHRvIHRoZSBtZXRob2RzIG9mIHJhbmdlIG9mIHJlc3VsdCBzZXF1ZW5jZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9SZXN1bHRTZXF1ZW5jZSI+UmVzdWx0U2VxdWVuY2U8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZCI+YWRkPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBpdGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGFkZCBpdGVtPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2xlYXIiPmNsZWFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgY2xlYXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25jYXQiPmNvbmNhdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGNvbmNhdGluYXRlIGZyb20gcnM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZV9uZXciPmNyZWF0ZV9uZXc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgcmVzdWx0IHNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW1wdHkiPmVtcHR5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgY2hlY2sgaXMgdGhlIHNlcXVlbmNlIGlzIGVtcHR5PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZpcnN0Ij5maXJzdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHJldHJpZXZlIHRoZSBmaXJzdCBpdGVtPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldCI+Z2V0PC9hPihpbnQgaSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBnZXQgaXRlbSBpbiBpbmRleCBpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0SXRlcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlcmF0b3IiPml0ZXJhdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTGlzdCBJdGVyYXRvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgcmVsZWFzZSB0aGUgcmVzdWx0IHNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zaXplIj5zaXplPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZ2V0IHRoZSBzaXplPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nIj5zdHJpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICByZXRyaWV2ZSBpdGVtcyBpbiBzZXF1ZW5jZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1Jlc3VsdFNlcXVlbmNlIj5SZXN1bHRTZXF1ZW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlJlc3VsdFNlcXVlbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZCI+YWRkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgaXRlbSk8L2NvZGU+PC9wPjxwPmFkZCBpdGVtPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pdGVtPC9jb2RlPiAtIGlzIGFuIGl0ZW0gb2YgYW55IHR5cGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NsZWFyIj5jbGVhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y2xlYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Y2xlYXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uY2F0Ij5jb25jYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNvbmNhdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvcD48cD5jb25jYXRpbmF0ZSBmcm9tIHJzPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT4gLSBpcyBhIFJlc3VsdCBTZXF1ZW5jZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlX25ldyI+Y3JlYXRlX25ldzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jcmVhdGVfbmV3PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPmNyZWF0ZSBhIG5ldyByZXN1bHQgc2VxdWVuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBhIG5ldyByZXN1bHQgc2VxdWVuY2UuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VtcHR5Ij5lbXB0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZW1wdHk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Y2hlY2sgaXMgdGhlIHNlcXVlbmNlIGlzIGVtcHR5PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW4uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ZpcnN0Ij5maXJzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmZpcnN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPnJldHJpZXZlIHRoZSBmaXJzdCBpdGVtPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT4gLSB0aGUgZmlyc3QgaXRlbS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Ij5nZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5nZXQ8L3N0cm9uZz4oaW50IGkpPC9jb2RlPjwvcD48cD5nZXQgaXRlbSBpbiBpbmRleCBpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pPC9jb2RlPiAtIGlzIHRoZSBwb3NpdGlvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3RJdGVyYXRvciA8c3Ryb25nPml0ZXJhdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkxpc3QgSXRlcmF0b3IuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdEl0ZXJhdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZWxlYXNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPnJlbGVhc2UgdGhlIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zaXplIj5zaXplPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnNpemU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Z2V0IHRoZSBzaXplPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIHNpemUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZyI+c3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+cmV0cmlldmUgaXRlbXMgaW4gc2VxdWVuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gcmVzdWx0IHN0cmluZzwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3RvcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWQ2NDdhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFJlc3VsdFNlcXVlbmNlRmFjdG9yeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlJlc3VsdFNlcXVlbmNlRmFjdG9yeTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+UmVzdWx0IHNlcXVlbmNlIGZhY3Rvcnk8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ij5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZV9uZXciPmNyZWF0ZV9uZXc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVfbmV3Ij5jcmVhdGVfbmV3PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBpdGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZmFjdF9jcmVhdGVfbmV3Ij5mYWN0X2NyZWF0ZV9uZXc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZhY3RfY3JlYXRlX25ldyI+ZmFjdF9jcmVhdGVfbmV3PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBpdGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZhY3RfcHJpbnRfZGVidWciPmZhY3RfcHJpbnRfZGVidWc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mYWN0X3JlbGVhc2UiPmZhY3RfcmVsZWFzZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmludF9kZWJ1ZyI+cHJpbnRfZGVidWc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBmYWN0b3J5IGRlYnVnPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlbGVhc2UiPnJlbGVhc2U8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9SZXN1bHRTZXF1ZW5jZUZhY3RvcnkiPlJlc3VsdFNlcXVlbmNlRmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlJlc3VsdFNlcXVlbmNlRmFjdG9yeTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVfbmV3Ij5jcmVhdGVfbmV3PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNyZWF0ZV9uZXc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVfbmV3Ij5jcmVhdGVfbmV3PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNyZWF0ZV9uZXc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgaXRlbSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aXRlbTwvY29kZT4gLSBpcyBhbiBpdGVtIG9mIGFueSB0eXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIGZhY3RvcnkgY3JlYXRpbmcgbmV3IGl0ZW08L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmFjdF9jcmVhdGVfbmV3Ij5mYWN0X2NyZWF0ZV9uZXc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZmFjdF9jcmVhdGVfbmV3PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mYWN0X2NyZWF0ZV9uZXciPmZhY3RfY3JlYXRlX25ldzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5mYWN0X2NyZWF0ZV9uZXc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgaXRlbSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aXRlbTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmFjdF9wcmludF9kZWJ1ZyI+ZmFjdF9wcmludF9kZWJ1ZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+ZmFjdF9wcmludF9kZWJ1Zzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmFjdF9yZWxlYXNlIj5mYWN0X3JlbGVhc2U8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmZhY3RfcmVsZWFzZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmludF9kZWJ1ZyI+cHJpbnRfZGVidWc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnByaW50X2RlYnVnPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPmZhY3RvcnkgZGVidWc8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVsZWFzZSI+cmVsZWFzZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVsZWFzZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJzPC9jb2RlPiAtIGlzIHRoZSByZXN1bHQgc2VxdWVuY2UgZmFjdG9yeSByZWxlYXNlIHJzPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NoZWNrZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NoZWNrZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkYjBjYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDaGVja2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdGF0aWNDaGVja2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3RhdGljQ2hlY2tlcjwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5JbnRlcmZhY2UgdG8gc3RhdGljIGNoZWNrZXIuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NoZWNrIj5jaGVjazwvYT4oWFBhdGhOb2RlIHJvb3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgY2hlY2tzIFhQYXRoTm9kZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2hlY2siPmNoZWNrPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jaGVjazwvc3Ryb25nPihYUGF0aE5vZGUgcm9vdCk8L2NvZGU+PC9wPjxwPmNoZWNrcyBYUGF0aE5vZGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJvb3Q8L2NvZGU+IC0gaXMgYW4gWFBhdGggbm9kZS48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNFcnJvcjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWQ3MmU2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdGF0aWNDb250ZXh0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3RhdGljQ29udGV4dDwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5pbnRlcmZhY2UgdG8gc3RhdGljIGNvbnRleHQ8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkX2Z1bmN0aW9uX2xpYnJhcnkiPmFkZF9mdW5jdGlvbl9saWJyYXJ5PC9hPihGdW5jdGlvbkxpYnJhcnkgZmwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgYWRkIGZ1bmN0aW9uIHRvIGxpYnJhcnk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRfbmFtZXNwYWNlIj5hZGRfbmFtZXNwYWNlPC9hPihqYXZhLmxhbmcuU3RyaW5nIHByZWZpeAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBucyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBhZGQgbmFtZXNwYWNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkX3ZhcmlhYmxlIj5hZGRfdmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGFkZCB2YXJpYWJsZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2F0dHJpYnV0ZV9kZWNsYXJlZCI+YXR0cmlidXRlX2RlY2xhcmVkPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgYXR0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBpcyB0aGUgYXR0cmlidXRlIGRlY2xhcmVkPzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBYU1R5cGVEZWZpbml0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2F0dHJpYnV0ZV90eXBlX2RlZmluaXRpb24iPmF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb248L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBhdHRyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYmFzZV91cmkiPmJhc2VfdXJpPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgYmFzZSB1cmk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZSI+ZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBmdW5jdGlvbiBuYW1lc3BhY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZWZhdWx0X25hbWVzcGFjZSI+ZGVmYXVsdF9uYW1lc3BhY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBuYW1lc3BhY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZWxfdmFyaWFibGUiPmRlbF92YXJpYWJsZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZGVsZXRlIHRoZSB2YXJpYWJsZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rlcml2ZXNfZnJvbSI+ZGVyaXZlc19mcm9tPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYXQKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZXJpdmVzX2Zyb20iPmRlcml2ZXNfZnJvbTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGF0Ci0gICAgICAgICAsCi0gICAgICBYU1R5cGVEZWZpbml0aW9uIGV0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rlc3Ryb3lfc2NvcGUiPmRlc3Ryb3lfc2NvcGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBkZXN0cm95IHNjb3BlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZWxlbWVudF9kZWNsYXJlZCI+ZWxlbWVudF9kZWNsYXJlZDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGVsZW0pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgaXMgdGhlIGVsZW1lbnQgZGVjbGFyZWQ/PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFhTVHlwZURlZmluaXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZWxlbWVudF90eXBlX2RlZmluaXRpb24iPmVsZW1lbnRfdHlwZV9kZWZpbml0aW9uPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgZWxlbSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9leHBhbmRfZWxlbV90eXBlX3FuYW1lIj5leHBhbmRfZWxlbV90eXBlX3FuYW1lPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBleHBhbmQgZWxlbWVudCB0eXBlIHFuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXhwYW5kX2Z1bmN0aW9uX3FuYW1lIj5leHBhbmRfZnVuY3Rpb25fcW5hbWU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGV4cGFuZCBmdW5jdGlvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4cGFuZF9xbmFtZSI+ZXhwYW5kX3FuYW1lPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBleHBhbmQgcW5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mdW5jdGlvbl9leGlzdHMiPmZ1bmN0aW9uX2V4aXN0czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGludCBhcml0eSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBpcyB0aGUgZWxlbWVudCBkZWNsYXJlZD88L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWFrZV9hdG9taWMiPm1ha2VfYXRvbWljPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZXdfc2NvcGUiPm5ld19zY29wZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIG5ldyBzY29wZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByZWZpeF9leGlzdHMiPnByZWZpeF9leGlzdHM8L2E+KGphdmEubGFuZy5TdHJpbmcgcHJlZml4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgZG9lcyB0aGUgcHJlZml4IGV4aXN0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzb2x2ZV9wcmVmaXgiPnJlc29sdmVfcHJlZml4PC9hPihqYXZhLmxhbmcuU3RyaW5nIHByZWZpeCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfYmFzZV91cmkiPnNldF9iYXNlX3VyaTwvYT4oamF2YS5sYW5nLlN0cmluZyBiYXNldXJpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldHMgdGhlIGJhc2UgdXJpIGZvciB0aGUgY29udGV4dC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX2RlZmluZWQiPnR5cGVfZGVmaW5lZDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFyaWFibGVfZXhpc3RzIj52YXJpYWJsZV9leGlzdHM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhcmlhYmxlX2luX3Njb3BlIj52YXJpYWJsZV9pbl9zY29wZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHZhcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF94cGF0aDFfY29tcGF0aWJsZSI+eHBhdGgxX2NvbXBhdGlibGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBpcyBpdCB4cGF0aCAxLjAgY29tcGF0aWJsZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZF9mdW5jdGlvbl9saWJyYXJ5Ij5hZGRfZnVuY3Rpb25fbGlicmFyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkX2Z1bmN0aW9uX2xpYnJhcnk8L3N0cm9uZz4oRnVuY3Rpb25MaWJyYXJ5IGZsKTwvY29kZT48L3A+PHA+YWRkIGZ1bmN0aW9uIHRvIGxpYnJhcnk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZsPC9jb2RlPiAtIGlzIHRoZSBmdW5jdGlvbiBsaWJyYXJ5PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZF9uYW1lc3BhY2UiPmFkZF9uYW1lc3BhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZF9uYW1lc3BhY2U8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbnMpPC9jb2RlPjwvcD48cD5hZGQgbmFtZXNwYWNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVmaXg8L2NvZGU+IC0gdGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlPC9wPjxwPjxjb2RlPm5zPC9jb2RlPiAtIGlzIHRoZSBYU1R5cGVEZWZpbml0aW9uIG9mIHRoZSBub2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZF92YXJpYWJsZSI+YWRkX3ZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRfdmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvcD48cD5hZGQgdmFyaWFibGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIHFuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2F0dHJpYnV0ZV9kZWNsYXJlZCI+YXR0cmlidXRlX2RlY2xhcmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5hdHRyaWJ1dGVfZGVjbGFyZWQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGF0dHIpPC9jb2RlPjwvcD48cD5pcyB0aGUgYXR0cmlidXRlIGRlY2xhcmVkPzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXR0cjwvY29kZT4gLSBpcyB0aGUgYXR0cmlidXRlIG9mIHRoZSBxbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBib29sZWFuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2F0dHJpYnV0ZV90eXBlX2RlZmluaXRpb24iPmF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgWFNUeXBlRGVmaW5pdGlvbiA8c3Ryb25nPmF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb248L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGF0dHIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0dHI8L2NvZGU+IC0gaXMgdGhlIHFuYW1lIHZhcmlhYmxlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5YU1R5cGVEZWZpbml0aW9uPC9jb2RlPiAtIGF0dHJpYnV0ZXMncyB0eXBlIGRlZmluaXRpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYmFzZV91cmkiPmJhc2VfdXJpPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSSA8c3Ryb25nPmJhc2VfdXJpPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPmJhc2UgdXJpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk8L2NvZGU+IC0gdXJpPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlIj5kZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+ZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+dGhlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHN0cmluZzwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWZhdWx0X25hbWVzcGFjZSI+ZGVmYXVsdF9uYW1lc3BhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmRlZmF1bHRfbmFtZXNwYWNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPnRoZSBkZWZhdWx0IG5hbWVzcGFjZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBzdHJpbmc8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGVsX3ZhcmlhYmxlIj5kZWxfdmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmRlbF92YXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPmRlbGV0ZSB0aGUgdmFyaWFibGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIHFuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW4gaWYgZGVsZXRlZCB2YXJpYWJsZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZXJpdmVzX2Zyb20iPmRlcml2ZXNfZnJvbTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZGVyaXZlc19mcm9tPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBhdAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGV0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hdDwvY29kZT4gLSB0aGUgbm9kZSB0eXBlPC9wPjxwPjxjb2RlPmV0PC9jb2RlPiAtIGlzIHRoZSBxbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBib29sZWFuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Rlcml2ZXNfZnJvbSI+ZGVyaXZlc19mcm9tPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5kZXJpdmVzX2Zyb208L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGF0Ci0gICAgICAgICAsCi0gICAgICBYU1R5cGVEZWZpbml0aW9uIGV0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hdDwvY29kZT4gLSB0aGUgbm9kZSB0eXBlPC9wPjxwPjxjb2RlPmV0PC9jb2RlPiAtIGlzIHRoZSBYU1R5cGVEZWZpbml0aW9uIG9mIHRoZSBub2RlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGVzdHJveV9zY29wZSI+ZGVzdHJveV9zY29wZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGVzdHJveV9zY29wZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5kZXN0cm95IHNjb3BlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VsZW1lbnRfZGVjbGFyZWQiPmVsZW1lbnRfZGVjbGFyZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVsZW1lbnRfZGVjbGFyZWQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGVsZW0pPC9jb2RlPjwvcD48cD5pcyB0aGUgZWxlbWVudCBkZWNsYXJlZD88L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW08L2NvZGU+IC0gaXMgdGhlIGVsZW0gb2YgdGhlIHFuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZWxlbWVudF90eXBlX2RlZmluaXRpb24iPmVsZW1lbnRfdHlwZV9kZWZpbml0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFhTVHlwZURlZmluaXRpb24gPHN0cm9uZz5lbGVtZW50X3R5cGVfZGVmaW5pdGlvbjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgZWxlbSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbTwvY29kZT4gLSBpcyB0aGUgZWxlbSBvZiB0aGUgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlhTVHlwZURlZmluaXRpb248L2NvZGU+IC0gZWxlbWVudCdzIHR5cGUgZGVmaW5pdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHBhbmRfZWxlbV90eXBlX3FuYW1lIj5leHBhbmRfZWxlbV90eXBlX3FuYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5leHBhbmRfZWxlbV90eXBlX3FuYW1lPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48L3A+PHA+ZXhwYW5kIGVsZW1lbnQgdHlwZSBxbmFtZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyB0aGUgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXhwYW5kX2Z1bmN0aW9uX3FuYW1lIj5leHBhbmRfZnVuY3Rpb25fcW5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmV4cGFuZF9mdW5jdGlvbl9xbmFtZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPmV4cGFuZCBmdW5jdGlvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyB0aGUgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXhwYW5kX3FuYW1lIj5leHBhbmRfcW5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmV4cGFuZF9xbmFtZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPmV4cGFuZCBxbmFtZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyB0aGUgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZnVuY3Rpb25fZXhpc3RzIj5mdW5jdGlvbl9leGlzdHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmZ1bmN0aW9uX2V4aXN0czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgaW50IGFyaXR5KTwvY29kZT48L3A+PHA+aXMgdGhlIGVsZW1lbnQgZGVjbGFyZWQ/PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIGlzIHRoZSBxbmFtZSBuYW1lPC9wPjxwPjxjb2RlPmFyaXR5PC9jb2RlPiAtIGludGVnZXIgb2YgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tYWtlX2F0b21pYyI+bWFrZV9hdG9taWM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUgPHN0cm9uZz5tYWtlX2F0b21pYzwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyB0aGUgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlPC9jb2RlPiAtIGFueSBhdG9taWMgdHlwZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZXdfc2NvcGUiPm5ld19zY29wZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+bmV3X3Njb3BlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPm5ldyBzY29wZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmVmaXhfZXhpc3RzIj5wcmVmaXhfZXhpc3RzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5wcmVmaXhfZXhpc3RzPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcHJlZml4KTwvY29kZT48L3A+PHA+bmFtZXNwYWNlcyBkb2VzIHRoZSBwcmVmaXggZXhpc3Q8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnByZWZpeDwvY29kZT4gLSBpcyB0aGUgcHJlZml4PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVzb2x2ZV9wcmVmaXgiPnJlc29sdmVfcHJlZml4PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5yZXNvbHZlX3ByZWZpeDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHByZWZpeCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cHJlZml4PC9jb2RlPiAtIGlzIHRoZSBwcmVmaXg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gc3RyaW5nPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF9iYXNlX3VyaSI+c2V0X2Jhc2VfdXJpPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfYmFzZV91cmk8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBiYXNldXJpKTwvY29kZT48L3A+PHA+U2V0cyB0aGUgYmFzZSB1cmkgZm9yIHRoZSBjb250ZXh0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YmFzZXVyaTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9kZWZpbmVkIj50eXBlX2RlZmluZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnR5cGVfZGVmaW5lZDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyBxbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBib29sZWFuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhcmlhYmxlX2V4aXN0cyI+dmFyaWFibGVfZXhpc3RzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz52YXJpYWJsZV9leGlzdHM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIHFuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW4gaWYgdmFyaWFibGUgZXhpc3RzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhcmlhYmxlX2luX3Njb3BlIj52YXJpYWJsZV9pbl9zY29wZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dmFyaWFibGVfaW5fc2NvcGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHZhcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFyPC9jb2RlPiAtIGlzIHRoZSB2YXJpYWJsZSBvZiBxbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfeHBhdGgxX2NvbXBhdGlibGUiPnhwYXRoMV9jb21wYXRpYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz54cGF0aDFfY29tcGF0aWJsZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5pcyBpdCB4cGF0aCAxLjAgY29tcGF0aWJsZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNFcnJvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRhNGYyMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNFcnJvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFN0YXRpY0Vycm9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3RhdGljRXJyb3I8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uPC9wcmU+QmFzZSBjbGFzcyBmb3IgYWxsIHN0YXRpYyBlcnJvcnMgYXMgZGVmaW5lZCBieSB0aGUgWFBhdGggMi4wIHNwZWNpZmljYXRpb248aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3RhdGljRXJyb3IiPlN0YXRpY0Vycm9yPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29kZSI+Y29kZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0YXRpY0Vycm9yIj5TdGF0aWNFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0YXRpY0Vycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgY29kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgYSBnZW5lcmljIHN0YXRpYyBlcnJvcjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvZGUiPmNvZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmNvZGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIGVycm9yIGNvZGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgZXJyb3I8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljTmFtZVJlc29sdmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EwNGMzYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3RhdGljTmFtZVJlc29sdmVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3RhdGljTmFtZVJlc29sdmVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5UaGlzIGNsYXNzIHJlc29sdmVzIHN0YXRpYyBuYW1lcy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3RhdGljTmFtZVJlc29sdmVyIj5TdGF0aWNOYW1lUmVzb2x2ZXI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0IHNjKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2hlY2siPmNoZWNrPC9hPihYUGF0aE5vZGUgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayB0aGUgWFBhdGggbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmludEJpbkV4cHIiPnByaW50QmluRXhwcjwvYT4oamF2YS5sYW5nLlN0cmluZyBuYW1lCi0gICAgICAgICAsCi0gICAgICBCaW5FeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBiaW5hcnkgZXhwcmVzc2lvbiBieSBjaGVja2luZyBpdHMgbGVmdCBhbmQgcmlnaHQgY2hpbGRyZW4uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJpbnRVbkV4cHIiPnByaW50VW5FeHByPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIFVuRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgdW5hcnkgZXhwcmVzc2lvbiBieSBjaGVja2luZyBpdHMgb25lIGNoaWxkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCB4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBYUGF0aCBieSB2aXNpdGluZyBhbGwgdGhlIG5vZGVzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oRm9yRXhwciBmZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBmb3IgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFF1YW50aWZpZWRFeHByIHFleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHF1YW50aWZpZWQgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KElmRXhwciBpZmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIGlmIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihPckV4cHIgb3JleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBPUiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oQW5kRXhwciBhbmRleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBBTkQgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KENtcEV4cHIgY21wZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBjb21wYXJpc29uIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihSYW5nZUV4cHIgcmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgcmFuZ2UgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEFkZEV4cHIgYWRkZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYW4gYWRkaXRvbiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oU3ViRXhwciBzdWJleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHN1YnRyYWN0aW9uIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihNdWxFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgbXVsdGlwbGljYXRpb24gZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KERpdkV4cHIgbXVsZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBkaXZpc2lvbiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oSURpdkV4cHIgbXVsZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYW4gaW50ZWdlciBkaXZpc29uIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihNb2RFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgbW9kIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihVbmlvbkV4cHIgdW5leCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHVuaW9uIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihQaXBlRXhwciBwaXBleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHBpcGVkIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihJbnRlcnNlY3RFeHByIGlleHByKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIGludGVyc2VjdGlvbiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oRXhjZXB0RXhwciBlZXhwcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBleGNlcHQgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEluc3RPZkV4cHIgaW9leHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYW4gJ2luc3RhbmNlIG9mJyBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oVHJlYXRBc0V4cHIgdGFleHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSAndHJlYXQgYXMnIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihDYXN0YWJsZUV4cHIgY2V4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIGNhc3RhYmxlIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihDYXN0RXhwciBjZXhwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgY2FzdCBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oTWludXNFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBtaW51cyBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oUGx1c0V4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHBsdXMgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFhQYXRoRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIHhwYXRoIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihGb3J3YXJkU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgZm9yd2FyZCBzdGVwLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oUmV2ZXJzZVN0ZXAgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHJldmVyc2Ugc3RlcC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KE5hbWVUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBuYW1lIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihWYXJSZWYgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHZhcmlhYmxlIHJlZmVyZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFN0cmluZ0xpdGVyYWwgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHN0cmluZyBsaXRlcmFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oSW50ZWdlckxpdGVyYWwgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBpbnRlZ2VyIGxpdGVyYWwuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihEb3VibGVMaXRlcmFsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBkb3VibGUgbGl0ZXJhbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KERlY2ltYWxMaXRlcmFsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBkZWNpbWFsIGxpdGVyYWwuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihQYXJFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihDbnR4SXRlbUV4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIGNvbnRleHQgaXRlbSBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oRnVuY3Rpb25DYWxsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBmdW5jdGlvbiBjYWxsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oU2luZ2xlVHlwZSBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgc2luZ2xlIHR5cGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihTZXF1ZW5jZVR5cGUgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHNlcXVlbmNlIHR5cGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihJdGVtVHlwZSBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIGl0ZW0gdHlwZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEFueUtpbmRUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYW4gYW55IGtpbmQgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KERvY3VtZW50VGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgZG9jdW1lbnQgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KFRleHRUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSB0ZXh0IHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihDb21tZW50VGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgY29tbWVudCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oUElUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBwcm9jZXNzaW5nIGluc3RydWN0aW5nIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihBdHRyaWJ1dGVUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYW4gYXR0cmlidXRlIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihTY2hlbWFBdHRyVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oRWxlbWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBlbGVtZW50IHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihTY2hlbWFFbGVtVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgc2NoZW1hIGVsZW1lbnQgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KEF4aXNTdGVwIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYW4gYXhpcyBzdGVwLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4oRmlsdGVyRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgZmlsdGVyIGV4cHJlc3Npb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3RhdGljTmFtZVJlc29sdmVyIj5TdGF0aWNOYW1lUmVzb2x2ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdGF0aWNOYW1lUmVzb2x2ZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQgc2MpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3Igc3RhdGljIG5hbWUgcmVzb2x2ZXI8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jaGVjayI+Y2hlY2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNoZWNrPC9zdHJvbmc+KFhQYXRoTm9kZSBub2RlKTwvY29kZT48L3A+PHA+Q2hlY2sgdGhlIFhQYXRoIG5vZGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIGlzIHRoZSBYUGF0aCBub2RlIHRvIGNoZWNrLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yIC0gc3RhdGljIGVycm9yLjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJpbnRCaW5FeHByIj5wcmludEJpbkV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnByaW50QmluRXhwcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIEJpbkV4cHIgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgYmluYXJ5IGV4cHJlc3Npb24gYnkgY2hlY2tpbmcgaXRzIGxlZnQgYW5kIHJpZ2h0IGNoaWxkcmVuLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyB0aGUgbmFtZSBvZiB0aGUgYmluYXJ5IGV4cHJlc3Npb24uPC9wPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24gaXRzZWxmLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmludFVuRXhwciI+cHJpbnRVbkV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnByaW50VW5FeHByPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbmFtZQotICAgICAgICAgLAotICAgICAgVW5FeHByIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIHVuYXJ5IGV4cHJlc3Npb24gYnkgY2hlY2tpbmcgaXRzIG9uZSBjaGlsZC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIG5hbWUgb2YgdGhlIGV4cHJlc3Npb24uPC9wPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24gaXRzZWxmLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGggeHApPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBYUGF0aCBieSB2aXNpdGluZyBhbGwgdGhlIG5vZGVzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eHA8L2NvZGU+IC0gaXMgdGhlIFhQYXRoLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEZvckV4cHIgZmV4KTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBmb3IgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZleDwvY29kZT4gLSBpcyB0aGUgZm9yIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oUXVhbnRpZmllZEV4cHIgcWV4KTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBxdWFudGlmaWVkIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5xZXg8L2NvZGU+IC0gaXMgdGhlIHF1YW50aWZpZWQgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihJZkV4cHIgaWZleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuIGlmIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pZmV4PC9jb2RlPiAtIGlzIHRoZSBpZiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KE9yRXhwciBvcmV4KTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gT1IgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9yZXg8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oQW5kRXhwciBhbmRleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuIEFORCBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5kZXg8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oQ21wRXhwciBjbXBleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgY29tcGFyaXNvbiBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y21wZXg8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oUmFuZ2VFeHByIHJleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgcmFuZ2UgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJleDwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihBZGRFeHByIGFkZGV4KTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gYWRkaXRvbiBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWRkZXg8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oU3ViRXhwciBzdWJleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgc3VidHJhY3Rpb24gZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN1YmV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KE11bEV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIG11bHRpcGxpY2F0aW9uIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tdWxleDwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihEaXZFeHByIG11bGV4KTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBkaXZpc2lvbiBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXVsZXg8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oSURpdkV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBpbnRlZ2VyIGRpdmlzb24gZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KE1vZEV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIG1vZCBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXVsZXg8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oVW5pb25FeHByIHVuZXgpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIHVuaW9uIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT51bmV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFBpcGVFeHByIHBpcGV4KTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBwaXBlZCBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGlwZXg8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oSW50ZXJzZWN0RXhwciBpZXhwcik8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuIGludGVyc2VjdGlvbiBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aWV4cHI8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oRXhjZXB0RXhwciBlZXhwcik8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuIGV4Y2VwdCBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWV4cHI8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oSW5zdE9mRXhwciBpb2V4cCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuICdpbnN0YW5jZSBvZicgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlvZXhwPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFRyZWF0QXNFeHByIHRhZXhwKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSAndHJlYXQgYXMnIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50YWV4cDwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihDYXN0YWJsZUV4cHIgY2V4cCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgY2FzdGFibGUgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNleHA8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oQ2FzdEV4cHIgY2V4cCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgY2FzdCBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2V4cDwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihNaW51c0V4cHIgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgbWludXMgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oUGx1c0V4cHIgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgcGx1cyBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihYUGF0aEV4cHIgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuIHhwYXRoIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEZvcndhcmRTdGVwIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIGZvcndhcmQgc3RlcC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oUmV2ZXJzZVN0ZXAgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgcmV2ZXJzZSBzdGVwLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihOYW1lVGVzdCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBuYW1lIHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFZhclJlZiBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSB2YXJpYWJsZSByZWZlcmVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFN0cmluZ0xpdGVyYWwgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgc3RyaW5nIGxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KEludGVnZXJMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBpbnRlZ2VyIGxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KERvdWJsZUxpdGVyYWwgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgZG91YmxlIGxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KERlY2ltYWxMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIGRlY2ltYWwgbGl0ZXJhbC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oUGFyRXhwciBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KENudHhJdGVtRXhwciBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oRnVuY3Rpb25DYWxsIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIGZ1bmN0aW9uIGNhbGwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFNpbmdsZVR5cGUgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgc2luZ2xlIHR5cGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFNlcXVlbmNlVHlwZSBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBzZXF1ZW5jZSB0eXBlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihJdGVtVHlwZSBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gaXRlbSB0eXBlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihBbnlLaW5kVGVzdCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gYW55IGtpbmQgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oRG9jdW1lbnRUZXN0IGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIGRvY3VtZW50IHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KFRleHRUZXN0IGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIHRleHQgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oQ29tbWVudFRlc3QgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgY29tbWVudCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihQSVRlc3QgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgcHJvY2Vzc2luZyBpbnN0cnVjdGluZyB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihBdHRyaWJ1dGVUZXN0IGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBhdHRyaWJ1dGUgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4oU2NoZW1hQXR0clRlc3QgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihFbGVtZW50VGVzdCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gZWxlbWVudCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihTY2hlbWFFbGVtVGVzdCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBzY2hlbWEgZWxlbWVudCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihBeGlzU3RlcCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gYXhpcyBzdGVwLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihGaWx0ZXJFeHByIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIGZpbHRlciBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMmVlN2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoRXhjZXB0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhFeGNlcHRpb248L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLkV4Y2VwdGlvbjwvcHJlPlRoaXMgZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGFuIFhQYXRoIGV4Y2VwdGlvbi48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhFeGNlcHRpb24iPlhQYXRoRXhjZXB0aW9uPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlYXNvbiI+cmVhc29uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhFeGNlcHRpb24iPlhQYXRoRXhjZXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhFeGNlcHRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZWFzb24pPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgWFBhdGhFeGNlcHRpb248L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWFzb24iPnJlYXNvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+cmVhc29uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgcmVhc29uIHdoeSB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93LjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxZGY3NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhQYXJzZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aFBhcnNlcjwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5UaGlzIGlzIGFuIGludGVyZmFjZSBjbGFzcyBmb3IgdGhlIFhQYXRoIHBhcnNlci48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGg8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2UiPnBhcnNlPC9hPihqYXZhLmxhbmcuU3RyaW5nIHhwYXRoKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIGZvciB0aGUgWFBhdGggcGFyc2VyIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlIj5wYXJzZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoIDxzdHJvbmc+cGFyc2U8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4cGF0aCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciB0aGUgWFBhdGggcGFyc2VyIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnhwYXRoPC9jb2RlPiAtIGlzIHRoZSBpbnB1dCBYUGF0aCB0byBiZSBwYXJzZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoPC9jb2RlPiAtIFRoZSBwYXJzZWQgWFBhdGguPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXJFeGNlcHRpb24gLSBYUGF0aCBwYXJzZXIgZXhjZXB0aW9uLjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXJFeGNlcHRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyRXhjZXB0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjU4YjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXJFeGNlcHRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoUGFyc2VyRXhjZXB0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhQYXJzZXJFeGNlcHRpb248L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yPC9wcmU+VGhpcyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBYUGF0aCBwYXJzZXIuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lOVkFMSURfWFBBVEhfRVhQUkVTU0lPTiI+SU5WQUxJRF9YUEFUSF9FWFBSRVNTSU9OPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSB0eXBlIG9mIGV4Y2VwdGlvbi48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhQYXJzZXJFeGNlcHRpb24iPlhQYXRoUGFyc2VyRXhjZXB0aW9uPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfSU5WQUxJRF9YUEFUSF9FWFBSRVNTSU9OIj5JTlZBTElEX1hQQVRIX0VYUFJFU1NJT048L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SU5WQUxJRF9YUEFUSF9FWFBSRVNTSU9OPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgdHlwZSBvZiBleGNlcHRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhQYXJzZXJFeGNlcHRpb24iPlhQYXRoUGFyc2VyRXhjZXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhQYXJzZXJFeGNlcHRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZWFzb24pPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgWFBhdGhQYXJzZXJFeGNlcHRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhlcmNlc0xvYWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWGVyY2VzTG9hZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YjdmYTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWGVyY2VzTG9hZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWGVyY2VzTG9hZGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WGVyY2VzTG9hZGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5YZXJjZXMgbG9hZGVyIGNsYXNzLiBUaGUgbG9hZGluZyBpcyBhbHdheXMgbmFtZXNwYWNlIGF3YXJlLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZheC54bWwudmFsaWRhdGlvbi5TY2hlbWE8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fc2NoZW1hIj5fc2NoZW1hPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfX3ZhbGlkYXRpbmciPl92YWxpZGF0aW5nPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ET0NVTUVOVF9JTVBMRU1FTlRBVElPTl9QUk9QRVJUWSI+RE9DVU1FTlRfSU1QTEVNRU5UQVRJT05fUFJPUEVSVFk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0RPQ1VNRU5UX1BTVklfSU1QTEVNRU5UQVRJT04iPkRPQ1VNRU5UX1BTVklfSU1QTEVNRU5UQVRJT048L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0RZTkFNSUNfVkFMSURBVElPTl9GRUFUVVJFIj5EWU5BTUlDX1ZBTElEQVRJT05fRkVBVFVSRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSkFYUF9TQ0hFTUFfTEFOR1VBR0UiPkpBWFBfU0NIRU1BX0xBTkdVQUdFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9MT0FEX0VYVEVSTkFMX0RURF9GRUFUVVJFIj5MT0FEX0VYVEVSTkFMX0RURF9GRUFUVVJFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OQU1FU1BBQ0VTX0ZFQVRVUkUiPk5BTUVTUEFDRVNfRkVBVFVSRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfU0NIRU1BX0ZVTExfQ0hFQ0tJTkdfRkVBVFVSRSI+U0NIRU1BX0ZVTExfQ0hFQ0tJTkdfRkVBVFVSRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfU0NIRU1BX1ZBTElEQVRJT05fRkVBVFVSRSI+U0NIRU1BX1ZBTElEQVRJT05fRkVBVFVSRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVkFMSURBVElPTl9GRUFUVVJFIj5WQUxJREFUSU9OX0ZFQVRVUkU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1czQ19YTUxfU0NIRU1BIj5XM0NfWE1MX1NDSEVNQTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWGVyY2VzTG9hZGVyIj5YZXJjZXNMb2FkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hlcmNlc0xvYWRlciI+WGVyY2VzTG9hZGVyPC9hPjwvc3Ryb25nPihqYXZheC54bWwudmFsaWRhdGlvbi5TY2hlbWEgc2NoZW1hKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkRvY3VtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xvYWQiPmxvYWQ8L2E+KGphdmEuaW8uSW5wdXRTdHJlYW0gaW4pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIFhlcmNlcyBsb2FkZXIgbG9hZHMgdGhlIFhNTCBkb2N1bWVudDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF92YWxpZGF0aW5nIj5zZXRfdmFsaWRhdGluZzwvYT4oYm9vbGVhbiB4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCB2YWxpZGF0aW5nIGJvb2xlYW4uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9fc2NoZW1hIj5fc2NoZW1hPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmF4LnhtbC52YWxpZGF0aW9uLlNjaGVtYSA8c3Ryb25nPl9zY2hlbWE8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfX3ZhbGlkYXRpbmciPl92YWxpZGF0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW4gPHN0cm9uZz5fdmFsaWRhdGluZzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9ET0NVTUVOVF9JTVBMRU1FTlRBVElPTl9QUk9QRVJUWSI+RE9DVU1FTlRfSU1QTEVNRU5UQVRJT05fUFJPUEVSVFk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+RE9DVU1FTlRfSU1QTEVNRU5UQVRJT05fUFJPUEVSVFk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfRE9DVU1FTlRfUFNWSV9JTVBMRU1FTlRBVElPTiI+RE9DVU1FTlRfUFNWSV9JTVBMRU1FTlRBVElPTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5ET0NVTUVOVF9QU1ZJX0lNUExFTUVOVEFUSU9OPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RZTkFNSUNfVkFMSURBVElPTl9GRUFUVVJFIj5EWU5BTUlDX1ZBTElEQVRJT05fRkVBVFVSRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5EWU5BTUlDX1ZBTElEQVRJT05fRkVBVFVSRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9KQVhQX1NDSEVNQV9MQU5HVUFHRSI+SkFYUF9TQ0hFTUFfTEFOR1VBR0U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SkFYUF9TQ0hFTUFfTEFOR1VBR0U8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTE9BRF9FWFRFUk5BTF9EVERfRkVBVFVSRSI+TE9BRF9FWFRFUk5BTF9EVERfRkVBVFVSRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5MT0FEX0VYVEVSTkFMX0RURF9GRUFUVVJFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05BTUVTUEFDRVNfRkVBVFVSRSI+TkFNRVNQQUNFU19GRUFUVVJFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5BTUVTUEFDRVNfRkVBVFVSRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9TQ0hFTUFfRlVMTF9DSEVDS0lOR19GRUFUVVJFIj5TQ0hFTUFfRlVMTF9DSEVDS0lOR19GRUFUVVJFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlNDSEVNQV9GVUxMX0NIRUNLSU5HX0ZFQVRVUkU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfU0NIRU1BX1ZBTElEQVRJT05fRkVBVFVSRSI+U0NIRU1BX1ZBTElEQVRJT05fRkVBVFVSRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5TQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1ZBTElEQVRJT05fRkVBVFVSRSI+VkFMSURBVElPTl9GRUFUVVJFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlZBTElEQVRJT05fRkVBVFVSRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9XM0NfWE1MX1NDSEVNQSI+VzNDX1hNTF9TQ0hFTUE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VzNDX1hNTF9TQ0hFTUE8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hlcmNlc0xvYWRlciI+WGVyY2VzTG9hZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WGVyY2VzTG9hZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBYZXJjZXMgbG9hZGVyLjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YZXJjZXNMb2FkZXIiPlhlcmNlc0xvYWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhlcmNlc0xvYWRlcjwvc3Ryb25nPihqYXZheC54bWwudmFsaWRhdGlvbi5TY2hlbWEgc2NoZW1hKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfbG9hZCI+bG9hZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudCA8c3Ryb25nPmxvYWQ8L3N0cm9uZz4oamF2YS5pby5JbnB1dFN0cmVhbSBpbik8L2NvZGU+PC9wPjxwPlRoZSBYZXJjZXMgbG9hZGVyIGxvYWRzIHRoZSBYTUwgZG9jdW1lbnQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmluPC9jb2RlPiAtIGlzIHRoZSBpbnB1dCBzdHJlYW0uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT4gLSBUaGUgbG9hZGVkIGRvY3VtZW50LjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUxvYWRlckV4Y2VwdGlvbiAtIERPTSBsb2FkZXIgZXhjZXB0aW9uLjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X3ZhbGlkYXRpbmciPnNldF92YWxpZGF0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfdmFsaWRhdGluZzwvc3Ryb25nPihib29sZWFuIHgpPC9jb2RlPjwvcD48cD5TZXQgdmFsaWRhdGluZyBib29sZWFuLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eDwvY29kZT4gLSBpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OTRlZTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoPC9zdHJvbmc+Ci1leHRlbmRzIFhQYXRoTm9kZTwvcHJlPlN1cHBvcnQgZm9yIFhQYXRoLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aCI+WFBhdGg8L2E+PC9zdHJvbmc+KGphdmEudXRpbC5Db2xsZWN0aW9uIGV4cHJzKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KFhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuSXRlcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlcmF0b3IiPml0ZXJhdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoIj5YUGF0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoPC9zdHJvbmc+KGphdmEudXRpbC5Db2xsZWN0aW9uIGV4cHJzKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIFhQYXRoLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4oWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlcmF0b3IiPml0ZXJhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5JdGVyYXRvciA8c3Ryb25nPml0ZXJhdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5JdGVyYXRvcjwvY29kZT4gLSBSZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uRm5GdW5jdGlvbkxpYnJhcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAxOTIyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb248L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRm5GdW5jdGlvbkxpYnJhcnk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5GbkZ1bmN0aW9uTGlicmFyeTwvc3Ryb25nPgotZXh0ZW5kcyBGdW5jdGlvbkxpYnJhcnk8L3ByZT5NYWludGFpbnMgYSBsaWJyYXJ5IG9mIGNvcmUgZnVuY3Rpb25zIGFuZCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF9GVU5DVElPTlNfTlMiPlhQQVRIX0ZVTkNUSU9OU19OUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXRoIHRvIHhwYXRoIGZ1bmN0aW9ucyBzcGVjaWZpY2F0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9GbkZ1bmN0aW9uTGlicmFyeSI+Rm5GdW5jdGlvbkxpYnJhcnk8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfWFBBVEhfRlVOQ1RJT05TX05TIj5YUEFUSF9GVU5DVElPTlNfTlM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBBVEhfRlVOQ1RJT05TX05TPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXRoIHRvIHhwYXRoIGZ1bmN0aW9ucyBzcGVjaWZpY2F0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0ZuRnVuY3Rpb25MaWJyYXJ5Ij5GbkZ1bmN0aW9uTGlicmFyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkZuRnVuY3Rpb25MaWJyYXJ5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBGbkZ1bmN0aW9uTGlicmFyeS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uWFNDdHJMaWJyYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5YU0N0ckxpYnJhcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjNzg1OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5YU0N0ckxpYnJhcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb248L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTQ3RyTGlicmFyeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTQ3RyTGlicmFyeTwvc3Ryb25nPgotZXh0ZW5kcyBDb25zdHJ1Y3RvckZMPC9wcmU+WE1MIFNjaGVtYSBjb250cm9sIGxpYnJhcnkgc3VwcG9ydC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWE1MX1NDSEVNQV9OUyI+WE1MX1NDSEVNQV9OUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXRoIHRvIHczLm9yZyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTQ3RyTGlicmFyeSI+WFNDdHJMaWJyYXJ5PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1hNTF9TQ0hFTUFfTlMiPlhNTF9TQ0hFTUFfTlM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WE1MX1NDSEVNQV9OUzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGF0aCB0byB3My5vcmcgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTQ3RyTGlicmFyeSI+WFNDdHJMaWJyYXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNDdHJMaWJyYXJ5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBYU0N0ckxpYnJhcnkuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI3ZWEzOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBbnlBdG9taWNUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QW55QXRvbWljVHlwZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZTwvcHJlPkNvbW1vbiBiYXNlIGZvciBldmVyeSBhdG9taWMgdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BbnlBdG9taWNUeXBlIj5BbnlBdG9taWNUeXBlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BbnlBdG9taWNUeXBlIj5BbnlBdG9taWNUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QW55QXRvbWljVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQwODhkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVNpbXBsZVR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFueVNpbXBsZVR5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BbnlTaW1wbGVUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9wcmU+Q29tbW9uIGJhc2UgZm9yIGV2ZXJ5IHNpbXBsZSB0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0FueVNpbXBsZVR5cGUiPkFueVNpbXBsZVR5cGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0FueVNpbXBsZVR5cGUiPkFueVNpbXBsZVR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BbnlTaW1wbGVUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZDUzYTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFueVR5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BbnlUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5Db21tb24gYmFzZSBmb3IgZXZlcnkgdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BbnlUeXBlIj5BbnlUeXBlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BbnlUeXBlIj5BbnlUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QW55VHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIERhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIERhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BdHRyVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQXR0clR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY4M2FjMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BdHRyVHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEF0dHJUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QXR0clR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQXR0cmlidXRlVHlwZSBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BdHRyVHlwZSI+QXR0clR5cGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0F0dHJUeXBlIj5BdHRyVHlwZTwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uQXR0ciB2KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNBdHRyVHlwZSI+aXNBdHRyVHlwZTwvYT4oamF2YS5sYW5nLlN0cmluZyB0eXBlTmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEIj5pc0lEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BdHRyVHlwZSI+QXR0clR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BdHRyVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB0byBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0F0dHJUeXBlIj5BdHRyVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkF0dHJUeXBlPC9zdHJvbmc+KG9yZy53M2MuZG9tLkF0dHIgdik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzQXR0clR5cGUiPmlzQXR0clR5cGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmlzQXR0clR5cGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB0eXBlTmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHlwZU5hbWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEIj5pc0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRFJFRjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vZGVfbmFtZSI+bm9kZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5vZGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT4gLSBOYW1lIG9mIHRoZSBub2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImF0dHJpYnV0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnR5cGVkX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4Y2EwZGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDYWxlbmRhclR5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5DYWxlbmRhclR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGU8L3ByZT5Db21tb24gYmFzZSBmb3IgYWxsIENhbGVuZGFyIGJhc2VkIGNsYXNzZXM8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQ2FsZW5kYXJUeXBlIj5DYWxlbmRhclR5cGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0NhbGVuZGFyVHlwZSI+Q2FsZW5kYXJUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q2FsZW5kYXJUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Db21tZW50VHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ29tbWVudFR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE3OTIyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Db21tZW50VHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIENvbW1lbnRUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+Q29tbWVudFR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ29tbWVudFR5cGUgZGF0YXR5cGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQ29tbWVudFR5cGUiPkNvbW1lbnRUeXBlPC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Db21tZW50IHYpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEIj5pc0lEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVbnN1cHBvcnRlZCBtZXRob2QgZm9yIHRoaXMgbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21tZW50IGJlaW5nIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBjb21tZW50IHN0b3JlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0NvbW1lbnRUeXBlIj5Db21tZW50VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkNvbW1lbnRUeXBlPC9zdHJvbmc+KG9yZy53M2MuZG9tLkNvbW1lbnQgdik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2UgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRCI+aXNJRDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzSURSRUYiPmlzSURSRUY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzSURSRUY8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ub2RlX25hbWUiPm5vZGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgPHN0cm9uZz5ub2RlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VW5zdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIG5vZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJjb21tZW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21tZW50IGJlaW5nIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1lbnQgYmVpbmcgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVkX3ZhbHVlIj50eXBlZF92YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz50eXBlZF92YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGNvbW1lbnQgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGNvbW1lbnQgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRiOTNlOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQ3RyVHlwZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkN0clR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDdHJUeXBlIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0N0clR5cGUiPkN0clR5cGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVzZWQgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9DdHJUeXBlIj5DdHJUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q3RyVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPlVzZWQgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIEVpdGhlciBhbiBlbXB0eSBzZXF1ZW5jZSBvciAxIGF0b21pYyB0eXBlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gVGhlIHJlc3VsdGluZyBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMTk3ODAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRG9jVHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERvY1R5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Eb2NUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERvY3VtZW50VHlwZSBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Eb2NUeXBlIj5Eb2NUeXBlPC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Eb2N1bWVudCB2KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRCI+aXNJRDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzSURSRUYiPmlzSURSRUY8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25vZGVfbmFtZSI+bm9kZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBub2RlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBkb2N1bWVudCBiZWluZyByZXByZXNlbnRlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RvY1R5cGUiPkRvY1R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Eb2NUeXBlPC9zdHJvbmc+KG9yZy53M2MuZG9tLkRvY3VtZW50IHYpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnM8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEIj5pc0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRFJFRjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vZGVfbmFtZSI+bm9kZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5vZGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT4gLSBRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJkb2N1bWVudCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVkX3ZhbHVlIj50eXBlZF92YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz50eXBlZF92YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsdWUiPnZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkRvY3VtZW50IDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLkRvY3VtZW50PC9jb2RlPiAtIEFjdHVhbCBkb2N1bWVudCBiZWluZyByZXByZXNlbnRlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5FbGVtZW50VHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRWxlbWVudFR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmZDE1ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5FbGVtZW50VHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEVsZW1lbnRUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RWxlbWVudFR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRWxlbWVudFR5cGUgZGF0YXR5cGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRWxlbWVudFR5cGUiPkVsZW1lbnRUeXBlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9FbGVtZW50VHlwZSI+RWxlbWVudFR5cGU8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLkVsZW1lbnQgdik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzRWxlbWVudFR5cGUiPmlzRWxlbWVudFR5cGU8L2E+KGphdmEubGFuZy5TdHJpbmcgdHlwZU5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRCI+aXNJRDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzSURSRUYiPmlzSURSRUY8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25pbGxlZCI+bmlsbGVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub2RlX25hbWUiPm5vZGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVsZW1lbnQgYmVpbmcgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RleHRub2RlX3N0cmluZ3MiPnRleHRub2RlX3N0cmluZ3M8L2E+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZWN1cnNpdmVseSBjb25jYXRlbmF0ZSBUZXh0Tm9kZSBzdHJpbmdzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgZWxlbWVudCB2YWx1ZSBiZWluZyByZXByZXNlbnRlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0VsZW1lbnRUeXBlIj5FbGVtZW50VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkVsZW1lbnRUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHRvIGEgbnVsbCBlbGVtZW50PC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0VsZW1lbnRUeXBlIj5FbGVtZW50VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkVsZW1lbnRUeXBlPC9zdHJvbmc+KG9yZy53M2MuZG9tLkVsZW1lbnQgdik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzRWxlbWVudFR5cGUiPmlzRWxlbWVudFR5cGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmlzRWxlbWVudFR5cGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB0eXBlTmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHlwZU5hbWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEIj5pc0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRFJFRjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25pbGxlZCI+bmlsbGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPm5pbGxlZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+bm9kZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPiAtIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImVsZW1lbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVsZW1lbnQgYmVpbmcgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBiZWluZyBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGV4dG5vZGVfc3RyaW5ncyI+dGV4dG5vZGVfc3RyaW5nczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dGV4dG5vZGVfc3RyaW5nczwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjwvcD48cD5SZWN1cnNpdmVseSBjb25jYXRlbmF0ZSBUZXh0Tm9kZSBzdHJpbmdzPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIE5vZGUgdG8gcmVjdXJzZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgc3VwcGxpZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnR5cGVkX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVudCBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVudCBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsdWUiPnZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkVsZW1lbnQgPHN0cm9uZz52YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5FbGVtZW50PC9jb2RlPiAtIEFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWM4ZTMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTm9kZVR5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Ob2RlVHlwZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgYSBOb2RlIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1NDSEVNQV9UWVBFX0lEIj5TQ0hFTUFfVFlQRV9JRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfU0NIRU1BX1RZUEVfSURSRUYiPlNDSEVNQV9UWVBFX0lEUkVGPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Ob2RlVHlwZSI+Tm9kZVR5cGU8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FmdGVyIj5hZnRlcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIHR3byk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWZ0ZXIiPmFmdGVyPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYmVmb3JlIj5iZWZvcmU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSB0d28pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2JlZm9yZSI+YmVmb3JlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZG9tX3RvX3hwYXRoIj5kb21fdG9feHBhdGg8L2E+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lbGltaW5hdGVfZHVwcyI+ZWxpbWluYXRlX2R1cHM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUeXBlZFZhbHVlRm9yUHJpbWl0aXZlVHlwZSI+Z2V0VHlwZWRWYWx1ZUZvclByaW1pdGl2ZVR5cGU8L2E+KFhTVHlwZURlZmluaXRpb24gdHlwZURlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEIj5pc0lEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzVHlwZSI+aXNUeXBlPC9hPihvcmcudzNjLmRvbS5UeXBlSW5mbyB0eXBlSW5mbwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB0eXBlTmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVdGlsaXR5IG1ldGhvZCB0byBjaGVjayB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIFR5cGVJbmZvIG1hdGNoZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uaWxsZWQiPm5pbGxlZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub2RlX3ZhbHVlIj5ub2RlX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zYW1lIj5zYW1lPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc29ydF9kb2N1bWVudF9vcmRlciI+c29ydF9kb2N1bWVudF9vcmRlcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfU0NIRU1BX1RZUEVfSUQiPlNDSEVNQV9UWVBFX0lEPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlNDSEVNQV9UWVBFX0lEPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NDSEVNQV9UWVBFX0lEUkVGIj5TQ0hFTUFfVFlQRV9JRFJFRjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5TQ0hFTUFfVFlQRV9JRFJFRjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTm9kZVR5cGUiPk5vZGVUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Tm9kZVR5cGU8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWZ0ZXIiPmFmdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5hZnRlcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgdHdvKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50d288L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZnRlciI+YWZ0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmFmdGVyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBhCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YTwvY29kZT48L3A+PHA+PGNvZGU+YjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2JlZm9yZSI+YmVmb3JlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5iZWZvcmU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIHR3byk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHdvPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYmVmb3JlIj5iZWZvcmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmJlZm9yZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmE8L2NvZGU+PC9wPjxwPjxjb2RlPmI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kb21fdG9feHBhdGgiPmRvbV90b194cGF0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgPHN0cm9uZz5kb21fdG9feHBhdGg8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbGltaW5hdGVfZHVwcyI+ZWxpbWluYXRlX2R1cHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZWxpbWluYXRlX2R1cHM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VHlwZWRWYWx1ZUZvclByaW1pdGl2ZVR5cGUiPmdldFR5cGVkVmFsdWVGb3JQcmltaXRpdmVUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5nZXRUeXBlZFZhbHVlRm9yUHJpbWl0aXZlVHlwZTwvc3Ryb25nPihYU1R5cGVEZWZpbml0aW9uIHR5cGVEZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnR5cGVEZWY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEIj5pc0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRFJFRjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzVHlwZSI+aXNUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc1R5cGU8L3N0cm9uZz4ob3JnLnczYy5kb20uVHlwZUluZm8gdHlwZUluZm8KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdHlwZU5hbWUpPC9jb2RlPjwvcD48cD5VdGlsaXR5IG1ldGhvZCB0byBjaGVjayB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIFR5cGVJbmZvIG1hdGNoZXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50eXBlSW5mbzwvY29kZT48L3A+PHA+PGNvZGU+dHlwZU5hbWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uaWxsZWQiPm5pbGxlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5uaWxsZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vZGVfbmFtZSI+bm9kZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5vZGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT4gLSBRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ub2RlX3ZhbHVlIj5ub2RlX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5ub2RlX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLk5vZGU8L2NvZGU+IC0gQWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2FtZSI+c2FtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+c2FtZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmE8L2NvZGU+PC9wPjxwPjxjb2RlPmI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zb3J0X2RvY3VtZW50X29yZGVyIj5zb3J0X2RvY3VtZW50X29yZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnNvcnRfZG9jdW1lbnRfb3JkZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnR5cGVkX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0NzZlMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE51bWVyaWNUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TnVtZXJpY1R5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBOdW1lcmljVHlwZSBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9OdW1lcmljVHlwZSI+TnVtZXJpY1R5cGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWJzIj5hYnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBYnNvbHV0ZXMgdGhlIG51bWJlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NlaWxpbmciPmNlaWxpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZmxvb3IiPmZsb29yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRfc2luZ2xlX2FyZyI+Z2V0X3NpbmdsZV9hcmc8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldF9zaW5nbGVfdHlwZSI+Z2V0X3NpbmdsZV90eXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhdAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLkNsYXNzIHR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgd2hldGhlciB0aGUgc3VwcGxpZWQgbm9kZSBpcyBvZiB0aGUgc3VwcGxpZWQgdHlwZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0X3NpbmdsZV90eXBlIj5nZXRfc2luZ2xlX3R5cGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLkNsYXNzIHR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgd2hldGhlciBmaXJzdCBub2RlIGluIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIGlzIG9mIHRoZSBzdXBwbGllZAotIHR5cGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kIj5yb3VuZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+KGludCBwcmVjaXNpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF91bmFyeV9taW51cyI+dW5hcnlfbWludXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlcgotIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3plcm8iPnplcm88L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayB3aGV0aGVyIG5vZGUgcmVwcmVzbnRzIDA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9OdW1lcmljVHlwZSI+TnVtZXJpY1R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OdW1lcmljVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hYnMiPmFiczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5hYnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+QWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gTmV3IE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2VpbGluZyI+Y2VpbGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5jZWlsaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSAgICAgICAgICBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Zsb29yIj5mbG9vcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5mbG9vcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlICAgICAgICAgIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0X3NpbmdsZV9hcmciPmdldF9zaW5nbGVfYXJnPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Z2V0X3NpbmdsZV9hcmc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0X3NpbmdsZV90eXBlIj5nZXRfc2luZ2xlX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5nZXRfc2luZ2xlX3R5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5DbGFzcyB0eXBlKTwvY29kZT48L3A+PHA+Q2hlY2sgd2hldGhlciB0aGUgc3VwcGxpZWQgbm9kZSBpcyBvZiB0aGUgc3VwcGxpZWQgdHlwZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXQ8L2NvZGU+IC0gVGhlIG5vZGUgYmVpbmcgdGVzdGVkPC9wPjxwPjxjb2RlPnR5cGU8L2NvZGU+IC0gVGhlIHR5cGUgZXhwZWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPiAtIFRoZSBub2RlIGJlaW5nIHRlc3RlZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciAtIElmIG5vZGUgYmVpbmcgdGVzdGVkIGlzIG5vdCBvZiBleHBlY3RlZCB0eXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfc2luZ2xlX3R5cGUiPmdldF9zaW5nbGVfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmdldF9zaW5nbGVfdHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5DbGFzcyB0eXBlKTwvY29kZT48L3A+PHA+Q2hlY2sgd2hldGhlciBmaXJzdCBub2RlIGluIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIGlzIG9mIHRoZSBzdXBwbGllZAotIHR5cGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJzPC9jb2RlPiAtIFRoZSBub2RlIGJlaW5nIHRlc3RlZDwvcD48cD48Y29kZT50eXBlPC9jb2RlPiAtIFRoZSB0eXBlIGV4cGVjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT4gLSBUaGUgbm9kZSBiZWluZyB0ZXN0ZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgLSBJZiBub2RlIGJlaW5nIHRlc3RlZCBpcyBub3Qgb2YgZXhwZWN0ZWQgdHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfcm91bmQiPnJvdW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yb3VuZF9oYWxmX3RvX2V2ZW4iPnJvdW5kX2hhbGZfdG9fZXZlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5yb3VuZF9oYWxmX3RvX2V2ZW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPiAtIEEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kX2hhbGZfdG9fZXZlbjwvc3Ryb25nPihpbnQgcHJlY2lzaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVjaXNpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz51bmFyeV9taW51czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlcgotIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3plcm8iPnplcm88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnplcm88L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2hlY2sgd2hldGhlciBub2RlIHJlcHJlc250cyAwPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgbm9kZSByZXByZXNudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlBJVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUElUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMjdjNjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUElUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUElUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UElUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9QSVR5cGUiPlBJVHlwZTwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uIHYpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEIj5pc0lEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb25zdHJ1Y3RzIHRoZSBub2RlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uCi0gc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdGhpcyBub2RlIHJlcHJlc2VudHM8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9QSVR5cGUiPlBJVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlBJVHlwZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gdik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzSUQiPmlzSUQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzSUQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEUkVGIj5pc0lEUkVGPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEUkVGPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+bm9kZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdHMgdGhlIG5vZGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gQSBRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnR5cGVkX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uICAgICAgICAgIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50czwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uPC9jb2RlPiAtIEFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRoaXMgbm9kZSByZXByZXNlbnRzPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWY1MzIyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUU5hbWU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5RTmFtZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgYSBRTmFtZSBkYXRhdHlwZSAobmFtZSBvZiBhIG5vZGUpPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1FOYW1lIj5RTmFtZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbG9jYWxfcGFydAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBucyk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1FOYW1lIj5RTmFtZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbG9jYWxfcGFydCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1FOYW1lIj5RTmFtZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBsb2NhbF9wYXJ0KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUU5hbWUiPlFOYW1lPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFFOYW1lIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgUU5hbWUgYW5kIHRoZSBzdXBwbGllZCBRTmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxdWFscyI+ZXF1YWxzPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iaik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBRTmFtZSBhbmQgYSBzdXBwbGllZCBRTmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4cGFuZGVkIj5leHBhbmRlZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIGZvciB3aGV0aGVyIGEgbmFtZXNwYWNlIGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoaXMgbm9kZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4cGFuZGVkX25hbWUiPmV4cGFuZGVkX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aG5hbWUgaW5jbHVkaW5nIHRoZSBuYW1lc3BhY2UuIFRoaXMgbWV0aG9kIG11c3Qgbm90Ci0gYmUgY2FsbGVkIGlmIGEgbmFtZXNwYWNlIGRvZXMgZXhpc3QgZm9yIHRoaXMgbm9kZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaGFzaENvZGUiPmhhc2hDb2RlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2FsY3VsYXRlcyB0aGUgaGFzaGNvZGUgZm9yIHRoZSBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9jYWwiPmxvY2FsPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBub2RlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25hbWVzcGFjZSI+bmFtZXNwYWNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBuYW1lc3BhY2UgdGhhdCB0aGlzIG5vZGUgYmVsb25ncyBpbi4gVGhpcyBtZXRob2QgbXVzdCBub3QKLSBiZSBjYWxsZWQgaWYgdGhlIG5vZGUgZG9lcyBub3QgYmVsb25nIGluIGEgbmFtZXNwYWNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VfUU5hbWUiPnBhcnNlX1FOYW1lPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFFOYW1lIGJ5IHBhcnNpbmcgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByZWZpeCI+cHJlZml4PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBwcmVmaXggb2YgdGhlIG5vZGUncyBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF9uYW1lc3BhY2UiPnNldF9uYW1lc3BhY2U8L2E+KGphdmEubGFuZy5TdHJpbmcgbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXRzIHRoZSBuYW1lc3BhY2UgZm9yIHRoaXMgbm9kZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZyI+c3RyaW5nPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWUuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZS4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZygpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1FOYW1lIj5RTmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlFOYW1lPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcHJlZml4Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxvY2FsX3BhcnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbnMpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9RTmFtZSI+UU5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5RTmFtZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHByZWZpeAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsb2NhbF9wYXJ0KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnM8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fUU5hbWUiPlFOYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UU5hbWU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBsb2NhbF9wYXJ0KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdXNpbmcgb25seSB0aGUgbm9kZSBuYW1lIChubyBwcmVmaXgpPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1FOYW1lIj5RTmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlFOYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHdpdGggYSBudWxsIHByZWZpeCBhbmQgbnVsbCBub2RlIG5hbWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgUU5hbWUgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gZXh0cmFjdCBmcm9tPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFFOYW1lIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIFFOYW1lIGFuZCB0aGUgc3VwcGxpZWQgUU5hbWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUU5hbWUgdG8gY29tcGFyZSB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnQgdGhlIHNhbWUgbm9kZS4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcXVhbHMiPmVxdWFsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXF1YWxzPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgb2JqKTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgUU5hbWUgYW5kIGEgc3VwcGxpZWQgUU5hbWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iajwvY29kZT4gLSBUaGUgb2JqZWN0IHRvIGNvbXBhcmUgd2l0aC4gU2hvdWxkIGJlIG9mIHR5cGUgUU5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudCB0aGUgc2FtZSBub2RlLiBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXhwYW5kZWQiPmV4cGFuZGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5leHBhbmRlZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBmb3Igd2hldGhlciBhIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWZpbmVkIGZvciB0aGlzIG5vZGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiBhIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWZpbmVkIGZvciBub2RlLiBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXhwYW5kZWRfbmFtZSI+ZXhwYW5kZWRfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+ZXhwYW5kZWRfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aG5hbWUgaW5jbHVkaW5nIHRoZSBuYW1lc3BhY2UuIFRoaXMgbWV0aG9kIG11c3Qgbm90Ci0gYmUgY2FsbGVkIGlmIGEgbmFtZXNwYWNlIGRvZXMgZXhpc3QgZm9yIHRoaXMgbm9kZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBGdWxsIHBhdGhuYW1lIGluY2x1ZGluZyBuYW1lc3BhY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaGFzaENvZGUiPmhhc2hDb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmhhc2hDb2RlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNhbGN1bGF0ZXMgdGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFRoZSBoYXNoY29kZSBmb3IgdGhlIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbG9jYWwiPmxvY2FsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5sb2NhbDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG5vZGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIE5vZGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25hbWVzcGFjZSI+bmFtZXNwYWNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5uYW1lc3BhY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBuYW1lc3BhY2UgdGhhdCB0aGlzIG5vZGUgYmVsb25ncyBpbi4gVGhpcyBtZXRob2QgbXVzdCBub3QKLSBiZSBjYWxsZWQgaWYgdGhlIG5vZGUgZG9lcyBub3QgYmVsb25nIGluIGEgbmFtZXNwYWNlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIE5hbWVzcGFjZSB0aGF0IHRoaXMgbm9kZSBiZWxvbmdzIGluPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlX1FOYW1lIj5wYXJzZV9RTmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgPHN0cm9uZz5wYXJzZV9RTmFtZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUU5hbWUgYnkgcGFyc2luZyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmVmaXgiPnByZWZpeDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+cHJlZml4PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgcHJlZml4IG9mIHRoZSBub2RlJ3MgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gUHJlZml4IG9mIHRoZSBub2RlJ3MgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X25hbWVzcGFjZSI+c2V0X25hbWVzcGFjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X25hbWVzcGFjZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG4pPC9jb2RlPjwvcD48cD5TZXRzIHRoZSBuYW1lc3BhY2UgZm9yIHRoaXMgbm9kZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bjwvY29kZT4gLSBOYW1lc3BhY2UgdGhpcyBub2RlIGJlbG9uZ3MgaW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nIj5zdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZS4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZ192YWx1ZSgpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOlFOYW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWUuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmcoKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnRvU3RyaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiUU5hbWUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuVGV4dFR5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlRleHRUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNDE5N2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuVGV4dFR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBUZXh0VHlwZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlRleHRUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFRleHRUeXBlIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1RleHRUeXBlIj5UZXh0VHlwZTwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uVGV4dCB2KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRCI+aXNJRDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFdpbGwgYWx3YXlzIHJldHVybiBmYWxzZTs8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEUkVGIj5pc0lEUkVGPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub2RlX25hbWUiPm5vZGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVuc3VwcG9ydGVkIG1ldGhvZCBmb3IgdGhpcyBub2RldHlwZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgdmFsdWUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFRleHQgdmFsdWUgc3RvcmVkPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVGV4dFR5cGUiPlRleHRUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VGV4dFR5cGU8L3N0cm9uZz4ob3JnLnczYy5kb20uVGV4dCB2KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnM8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEIj5pc0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPldpbGwgYWx3YXlzIHJldHVybiBmYWxzZTs8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzSURSRUYiPmlzSURSRUY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzSURSRUY8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ub2RlX25hbWUiPm5vZGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgPHN0cm9uZz5ub2RlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VW5zdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIG5vZGV0eXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPiAtIG51bGwgKG5vIHVzZXIgZGVmaW5lZCBuYW1lIGZvciB0aGlzIG5vZGUgZ2V0cyBkZWZpbmVkKTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ0ZXh0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgdmFsdWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHZhbHVlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+dHlwZWRfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBUZXh0IHZhbHVlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBUZXh0IHZhbHVlIHN0b3JlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YUGF0aERlY2ltYWxGb3JtYXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhQYXRoRGVjaW1hbEZvcm1hdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDI5NjllLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhQYXRoRGVjaW1hbEZvcm1hdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoRGVjaW1hbEZvcm1hdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoRGVjaW1hbEZvcm1hdDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDwvcHJlPlRoaXMgaXMgYW4gWFBhdGggc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgRGVjaW1hbEZvcm1hdCB0byBoYW5kbGUKLSBzb21lIG9mIHRoZSB4cGF0aCBzcGVjaWZpYyBmb3JtYXR0aW5nIHJlcXVpcmVtZW50cy4gICBTcGVjaWZpY2FsbHkKLSBpdCBhbGxvd3MgZm9yIEUjIHRvIGJlIHJlcHJlc2VudGVkIHRvIGluZGljYXRlIHRoYXQgdGhlIGV4cG9uZW50IHZhbHVlCi0gaXMgb3B0aW9uYWwuICBPdGhlcndpc2UgYWxsIGV4aXN0aW5nIERlY2ltYWxGb3JtYXQgcGF0dGVybnMgYXJlIGhhbmRsZWQKLSBhcyBpcy48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aERlY2ltYWxGb3JtYXQiPlhQYXRoRGVjaW1hbEZvcm1hdDwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwYXR0ZXJuKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfeHBhdGhGb3JtYXQiPnhwYXRoRm9ybWF0PC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iaik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBGb3JtYXRzIHRoZSBzdHJpbmcgZHJvcHBpbmcgYSBaZXJvIEV4cG9uZW50IFZhbHVlIGlmIGl0IGV4aXN0cy48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aERlY2ltYWxGb3JtYXQiPlhQYXRoRGVjaW1hbEZvcm1hdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoRGVjaW1hbEZvcm1hdDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHBhdHRlcm4pPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF94cGF0aEZvcm1hdCI+eHBhdGhGb3JtYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnhwYXRoRm9ybWF0PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgb2JqKTwvY29kZT48L3A+PHA+Rm9ybWF0cyB0aGUgc3RyaW5nIGRyb3BwaW5nIGEgWmVybyBFeHBvbmVudCBWYWx1ZSBpZiBpdCBleGlzdHMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vYmo8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg4MWYwOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTQW55VVJJPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNBbnlVUkk8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGU8L3ByZT5SZXByZXNlbnRzIGEgVW5pdmVyc2FsIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgcmVmZXJlbmNlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTQW55VVJJIj5YU0FueVVSSTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNBbnlVUkkiPlhTQW55VVJJPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGlvbiBvZiBhIHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIGEgVVJJIGZyb20gYSBwcmV2aW91cyByZXN1bHQKLSBzZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR3JlYXRlciB0aGFuIGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLSBtdXN0IGJlIG9mIHR5cGUgeHM6YW55VVJJIChvciwgYnkgcHJvbW90aW9uIG9mIHRoaXMsIHhzOnN0cmluZyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sdCI+bHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBMZXNzIHRoYW4gY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIGZ1bGwgdHlwZSBwYXRobmFtZSBvZiB0aGlzIGRhdGF0eXBlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUcmFuc2Zvcm1zIGFuZCByZXRyaWV2ZXMgdGhlIFVSSSB2YWx1ZSBvZiB0aGlzIFVSSSBkYXRhdHlwZSBpbiBTdHJpbmcKLSBmb3JtYXQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHR5cGUgbmFtZSBvZiB0aGlzIGRhdGF0eXBlPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNBbnlVUkkiPlhTQW55VVJJPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNBbnlVUkk8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3A+PHA+QXJpdHkgMSBDb25zdHJ1Y3RvcjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0FueVVSSSI+WFNBbnlVUkk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0FueVVSSTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Bcml0eSAwIENvbnN0cnVjdG9yLiBJbml0aWF0ZXMgVVJJIHRvIG51bGwuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGlvbiBvZiBhIHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIGEgVVJJIGZyb20gYSBwcmV2aW91cyByZXN1bHQKLSBzZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBwcmV2aW91cyByZXN1bHQgc2VxdWVuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFVSSSBzdXBwbGllZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UgICAgICAgICAgb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkdyZWF0ZXIgdGhhbiBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbHQiPmx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5sdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5MZXNzIHRoYW4gY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmFueVVSSSIsIHRoZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRyYW5zZm9ybXMgYW5kIHJldHJpZXZlcyB0aGUgVVJJIHZhbHVlIG9mIHRoaXMgVVJJIGRhdGF0eXBlIGluIFN0cmluZwotIGZvcm1hdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgVVJJIHZhbHVlIGhlbGQgYnkgdGhpcyBpbnN0YW5jZSBvZiB0aGUgVVJJIGRhdGF0eXBlIGFzIGEgICAgICAgICAgU3RyaW5nPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdHlwZSBuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImFueVVSSSIsIHRoZSB0eXBlIG5hbWUgb2YgdGhpcyBkYXRhdHlwZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jhc2U2NEJpbmFyeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCYXNlNjRCaW5hcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2YjIwMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jhc2U2NEJpbmFyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTQmFzZTY0QmluYXJ5PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNCYXNlNjRCaW5hcnk8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgZGF0YXR5cGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNCYXNlNjRCaW5hcnkiPlhTQmFzZTY0QmluYXJ5PC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0Jhc2U2NEJpbmFyeSI+WFNCYXNlNjRCaW5hcnk8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYmFzZTY0QmluYXJ5IHZhbHVlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSBiYXNlNjRCaW5hcnk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdmFsdWUoKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTQmFzZTY0QmluYXJ5Ij5YU0Jhc2U2NEJpbmFyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTQmFzZTY0QmluYXJ5PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmc8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNCYXNlNjRCaW5hcnkiPlhTQmFzZTY0QmluYXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNCYXNlNjRCaW5hcnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gbnVsbDwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBiYXNlNjRCaW5hcnkgdmFsdWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYmFzZTY0QmluYXJ5IHZhbHVlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyBiYXNlNjRCaW5hcnkgdmFsdWU8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSBiYXNlNjRCaW5hcnk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbiBhcmUgc2FtZS4gRmFsc2Ugb3RoZXJ3aXNlLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6YmFzZTY0QmluYXJ5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdmFsdWUoKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBUaGUgYmFzZTY0QmluYXJ5IHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJiYXNlNjRCaW5hcnkiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsdWUiPnZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz52YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBUaGUgYmFzZTY0QmluYXJ5IHN0b3JlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW4uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmVlYjYyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTQm9vbGVhbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTQm9vbGVhbjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgYSB0cnVlIG9yIGEgZmFsc2UgdmFsdWUuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTQm9vbGVhbiI+WFNCb29sZWFuPC9hPjwvc3Ryb25nPihib29sZWFuIHgpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0Jvb2xlYW4iPlhTQm9vbGVhbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgYm9vbGVhbiB2YWx1ZQotIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIGZvciBlcXVhbGl0eSBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuCi0gcmVwcmVzZW50YXRpb24uIFJldHVybnMgdHJ1ZSBpZiBib3RoIHJlcHJlc2VudCBzYW1lIGJvb2xlYW4gdmFsdWUsIGZhbHNlCi0gb3RoZXJ3aXNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zCi0gdHJ1ZSBpZiB0aGlzIFhTQm9vbGVhbiByZXByZXNlbnRzIHRydWUgYW5kIHRoYXQgWFNCb29sZWFuIHN1cHBsaWVkCi0gcmVwcmVzZW50cyBmYWxzZS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sdCI+bHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIGJldHdlZW4gdGhlIHN1cHBsaWVkIGFuZCB0aGlzIGJvb2xlYW4gcmVwcmVzZW50YXRpb24uIFJldHVybnMKLSB0cnVlIGlmIHRoaXMgWFNCb29sZWFuIHJlcHJlc2VudHMgZmFsc2UgYW5kIHRoYXQgWFNCb29sZWFuIHN1cHBsaWVkCi0gcmVwcmVzZW50cyB0cnVlLiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBkYXRhdHlwZSBuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgYm9vbGVhbiB2YWx1ZSBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0Jvb2xlYW4iPlhTQm9vbGVhbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTQm9vbGVhbjwvc3Ryb25nPihib29sZWFuIHgpPC9jb2RlPjwvcD48cD5Jbml0aWF0ZXMgdGhlIG5ldyByZXByZXNlbnRhdGlvbiB0byB0aGUgYm9vbGVhbiBzdXBwbGllZDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0Jvb2xlYW4iPlhTQm9vbGVhbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTQm9vbGVhbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWF0ZXMgdG8gYSBkZWZhdWx0IHJlcHJlc2VudGF0aW9uIG9mIGZhbHNlLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgYm9vbGVhbiB2YWx1ZQotIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgYm9vbGVhbiB2YWx1ZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYm9vbGVhbiB2YWx1ZSBzdXBwbGllZC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBmb3IgZXF1YWxpdHkgYmV0d2VlbiB0aGUgc3VwcGxpZWQgYW5kIHRoaXMgYm9vbGVhbgotIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zIHRydWUgaWYgYm90aCByZXByZXNlbnQgc2FtZSBib29sZWFuIHZhbHVlLCBmYWxzZQotIG90aGVyd2lzZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgdG8gY29tcGFyZSAgICAgICAgICAgICB3aXRoLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBOZXcgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRydWUvZmFsc2UgcmVzdWx0IG9mIHRoZSBlcXVhbGl0eSAgICAgICAgICBjb21wYXJpc29uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGUgc3VwcGxpZWQgYW5kIHRoaXMgYm9vbGVhbiByZXByZXNlbnRhdGlvbi4gUmV0dXJucwotIHRydWUgaWYgdGhpcyBYU0Jvb2xlYW4gcmVwcmVzZW50cyB0cnVlIGFuZCB0aGF0IFhTQm9vbGVhbiBzdXBwbGllZAotIHJlcHJlc2VudHMgZmFsc2UuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlICAgICAgICAgICAgIHdpdGguPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIE5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlICAgICAgICAgIGNvbXBhcmlzb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2x0Ij5sdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zCi0gdHJ1ZSBpZiB0aGlzIFhTQm9vbGVhbiByZXByZXNlbnRzIGZhbHNlIGFuZCB0aGF0IFhTQm9vbGVhbiBzdXBwbGllZAotIHJlcHJlc2VudHMgdHJ1ZS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHRvIGNvbXBhcmUgICAgICAgICAgICAgd2l0aC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gTmV3IFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0cnVlL2ZhbHNlIHJlc3VsdCBvZiB0aGUgICAgICAgICAgY29tcGFyaXNvbjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmJvb2xlYW4iLCB0aGUgZnVsbCBkYXRhdHlwZSBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIGRhdGF0eXBlIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImJvb2xlYW4iLCB3aGljaCBpcyB0aGUgZGF0YXR5cGUgbmFtZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsdWUiPnZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz52YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBib29sZWFuIHZhbHVlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0aGUgYWN0dWFsIGJvb2xlYW4gdmFsdWUgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQnl0ZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCeXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwM2M3N2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCeXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNCeXRlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNCeXRlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Nob3J0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTQnl0ZSI+WFNCeXRlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0J5dGUiPlhTQnl0ZTwvYT48L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgJ2J5dGUnIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNCeXRlIj5YU0J5dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0J5dGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTQnl0ZSI+WFNCeXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNCeXRlPC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBieXRlIHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdieXRlJyBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBieXRlIGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnYnl0ZScgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmJ5dGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiYnl0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWI0NDhkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTRGF0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTRGF0ZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlPC9wcmU+UmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIG9mIHRoZSBmb3JtIHllYXItbW9udGgtZGF5IGFuZCBvcHRpb25hbCB0aW1lem9uZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RhdGUiPlhTRGF0ZTwvYT48L3N0cm9uZz4oamF2YS51dGlsLkNhbGVuZGFyIGNhbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gdHopPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RhdGUiPlhTRGF0ZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Nsb25lIj5jbG9uZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgZGF0ZSByZXByZXNlbnRhdGlvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRhdGUgdmFsdWUgaW4KLSB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kYXkiPmRheTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBkYXkgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyAodGFraW5nIHRpbWV6b25lcyBpbnRvCi0gYWNjb3VudCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ndCI+Z3Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyAodGFraW5nIHRpbWV6b25lcyBpbnRvIGFjY291bnQpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbHQiPmx0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgKHRha2luZyB0aW1lem9uZXMgaW50byBhY2NvdW50KTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWludXMiPm1pbnVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtaW51cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlIGFuZCBhIHN1cHBsaWVkIHJlc3VsdAotIHNlcXVlbmNlIChYU0RhdGUsIFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkKLSB2YWxpZCBvbmVzKS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vbnRoIj5tb250aDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBtb250aCBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJzZV9kYXRlIj5wYXJzZV9kYXRlPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIChvZiB0aGUgZm9ybSB5ZWFyLW1vbnRoLWRheSBvcgotIHllYXItbW9udGgtZGF5K3RpbWV6b25lKSBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YKLSBpdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BsdXMiPnBsdXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkgdmFsaWQKLSBvbmVzKS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaXZlIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIGRhdGUgaGFzIGFuIG9wdGlvbmFsIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSBuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R6Ij50ejwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBkb3VibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3VycmVudGx5IHVuc3VwcG9ydGVkIG1ldGhvZC4gUmV0cmlldmVzIHRoZSBkYXRlIGluIG1pbGxpc2Vjb25kcyBzaW5jZQotIHRoZSBiZWdpbmluZyBvZiBlcG9jaDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfeWVhciI+eWVhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSB5ZWFyIGZyb20gdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNEYXRlIj5YU0RhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RhdGU8L3N0cm9uZz4oamF2YS51dGlsLkNhbGVuZGFyIGNhbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gdHopPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiBhIHN1cHBsaWVkIGRhdGU8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEYXRlIj5YU0RhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RhdGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZGF0ZTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgPHN0cm9uZz5jYWxlbmRhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPiAtIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jbG9uZSI+Y2xvbmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmNsb25lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgZGF0ZSByZXByZXNlbnRhdGlvbjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBBIGNvcHkgb2YgdGhpcyBkYXRlIHJlcHJlc2VudGF0aW9uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZGF0ZSB2YWx1ZSBpbgotIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZGF0ZSB2YWx1ZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGF0ZSB2YWx1ZSBzdXBwbGllZC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RheSI+ZGF5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmRheTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgZGF5IGZyb20gdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIGRheSB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyAodGFraW5nIHRpbWV6b25lcyBpbnRvCi0gYWNjb3VudCk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bzwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gZGF0ZXMgYXJlIHJlcHJlc2VudCB0aGUgc2FtZSBleGFjdCBwb2ludCBpbiB0aW1lLiAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8gYWNjb3VudCk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bzwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBsaWVzIGFmdGVyIHRoZSBkYXRlIHN1cHBsaWVkLiBGYWxzZSAgICAgICAgICBvdGhlcndpc2UuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sdCI+bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmx0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8gYWNjb3VudCk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bzwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBsaWVzIGJlZm9yZSB0aGUgZGF0ZSBzdXBwbGllZC4gRmFsc2UgICAgICAgICAgb3RoZXJ3aXNlLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWludXMiPm1pbnVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPm1pbnVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbWludXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZSBhbmQgYSBzdXBwbGllZCByZXN1bHQKLSBzZXF1ZW5jZSAoWFNEYXRlLCBYRFRZZWFyTW9udGhEdXJhdGlvbiBhbmQgWERURGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5Ci0gdmFsaWQgb25lcykuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cyAgICAgICAgICAgICBvcGVyYXRvci4gSWYgdGhpcyBpcyBhbiBYU0RhdGUsIHRoZSByZXN1bHQgd2lsbCBiZSBhICAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlIHR3byAgICAgICAgICAgICBkYXRlcy4gSWYgYXJnIGlzIGFuIFhEVFllYXJNb250aER1cmF0aW9uIG9yIGFuICAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGUgb2YgdGhlIHJlc3VsdCAgICAgICAgICAgICBvZiB0aGUgY3VycmVudCBkYXRlIG1pbnVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN1cHBsaWVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCAgICAgICAgICBtaW51cyBvcGVyYXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb250aCI+bW9udGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bW9udGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIG1vbnRoIGZyb20gdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIG1vbnRoIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZV9kYXRlIj5wYXJzZV9kYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGUgPHN0cm9uZz5wYXJzZV9kYXRlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSAob2YgdGhlIGZvcm0geWVhci1tb250aC1kYXkgb3IKLSB5ZWFyLW1vbnRoLWRheSt0aW1lem9uZSkgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mCi0gaXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTwvY29kZT4gLSBUaGUgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BsdXMiPnBsdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+cGx1czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkgdmFsaWQKLSBvbmVzKS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzICAgICAgICAgICAgIG9wZXJhdG9yLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4gICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZSBvZiB0aGUgcmVzdWx0ICAgICAgICAgICAgIG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsICAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cml2ZSB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6ZGF0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnRpbWV6b25lZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgd2hldGhlciB0aGlzIGRhdGUgaGFzIGFuIG9wdGlvbmFsIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZXJlIGlzIGEgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0ZS4gRmFsc2UgICAgICAgICAgb3RoZXJ3aXNlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiZGF0ZSIgd2hpY2ggaXMgdGhlIGRhdGF5cGUgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eiI+dHo8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz50ejwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz52YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DdXJyZW50bHkgdW5zdXBwb3J0ZWQgbWV0aG9kLiBSZXRyaWV2ZXMgdGhlIGRhdGUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlCi0gdGhlIGJlZ2luaW5nIG9mIGVwb2NoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5kb3VibGU8L2NvZGU+IC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5pbmcgb2YgdGhlIGVwb2NoPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3llYXIiPnllYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+eWVhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgeWVhciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSB5ZWFyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0Y2YwYzIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTRGF0ZVRpbWU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0RhdGVUaW1lPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RhdGVUaW1lIj5YU0RhdGVUaW1lPC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRGF0ZVRpbWUiPlhTRGF0ZVRpbWU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FsZW5kYXIiPmNhbGVuZGFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbG9uZSI+Y2xvbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkYXRlIGFuZCB0aW1lCi0gdmFsdWUgaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGF5Ij5kYXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgZGF5IGZyb20gdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgYW5kIHRpbWVzICh0YWtpbmcKLSB0aW1lem9uZXMgaW50byBhY2NvdW50KTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2d0Ij5ndDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzIGFuZCB0aW1lcyAodGFraW5nIHRpbWV6b25lcwotIGludG8gYWNjb3VudCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hvdXIiPmhvdXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgaG91ciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc19kaWdpdCI+aXNfZGlnaXQ8L2E+KGNoYXIgeCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBjaGFyYWN0ZXIgaXMgbnVtZXJpYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2x0Ij5sdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzIGFuZCB0aW1lcyAodGFraW5nIHRpbWV6b25lcwotIGludG8gYWNjb3VudCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21pbnVzIj5taW51czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgbWludXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZVRpbWUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhTRGF0ZVRpbWUsIFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlCi0gb25seSB2YWxpZCBvbmVzKS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21pbnV0ZSI+bWludXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIG1pbnV0ZSBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbW9udGgiPm1vbnRoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIG1vbnRoIGZyb20gdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhZF9pbnQiPnBhZF9pbnQ8L2E+KGludCBudW0KLSAgICAgICAgICwKLSAgICAgIGludCBsZW4pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFkcyB0aGUgc3VwcGxpZWQgbnVtYmVyIHRvIHRoZSBzdXBwbGllZCBudW1iZXIgb2YgZGlnaXRzIGJ5IGFkZGluZyAwJ3MKLSBpbiBmcm9udCBvZiBpdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgaW50W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VfZGF0ZSI+cGFyc2VfZGF0ZTwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZSB5ZWFyLAotIG1vbnRoIGFuZCBkYXkgZnJvbSBpdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgZG91YmxlW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VfdGltZSI+cGFyc2VfdGltZTwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZSBob3VyLAotIG1pbnV0ZSBhbmQgc2Vjb25kcyBmcm9tIGl0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBpbnRbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJzZV90aW1lem9uZSI+cGFyc2VfdGltZXpvbmU8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUKLSB0aW1lem9uZSBmcm9tIGl0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJzZURhdGVUaW1lIj5wYXJzZURhdGVUaW1lPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0gWFNEYXRlVGltZSBvYmplY3QgdXNpbmcgdGhhdCBpbmZvcm1hdGlvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGx1cyI+cGx1czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZVRpbWUgYW5kIGEgc3VwcGxpZWQKLSByZXN1bHQgc2VxdWVuY2UgKFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkKLSB2YWxpZCBvbmVzKS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgZG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlY29uZCI+c2Vjb25kPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIHNlY29uZHMgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaXZlIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgYW5kIHRpbWUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eiI+dHo8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgZG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEN1cnJlbnRseSB1bnN1cHBvcnRlZCBtZXRob2QuIFJldHJpZXZlcyB0aGUgZGF0ZSBpbiBtaWxsaXNlY29uZHMgc2luY2UKLSB0aGUgYmVnaW5pbmcgb2YgZXBvY2g8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3llYXIiPnllYXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgeWVhciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTRGF0ZVRpbWUiPlhTRGF0ZVRpbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RhdGVUaW1lPC9zdHJvbmc+KGphdmEudXRpbC5DYWxlbmRhciBjYWwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIHR6KTwvY29kZT48L3A+PHA+SW5pdGlhdGVzIGEgbmV3IHJlcHJlc2VudGF0aW9uIG9mIGEgc3VwcGxpZWQgZGF0ZSBhbmQgdGltZTwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0RhdGVUaW1lIj5YU0RhdGVUaW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNEYXRlVGltZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aXRhdGVzIGEgbmV3IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyIDxzdHJvbmc+Y2FsZW5kYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5DYWxlbmRhcjwvY29kZT4gLSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2xvbmUiPmNsb25lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5jbG9uZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgY29weSBvZiB0aGlzIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gQSBjb3B5IG9mIHRoaXMgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRhdGUgYW5kIHRpbWUKLSB2YWx1ZSBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRhdGUgYW5kIHRpbWUgICAgICAgICAgICAgdmFsdWUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGRhdGUgYW5kIHRpbWUgdmFsdWUgICAgICAgICAgc3VwcGxpZWQuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kYXkiPmRheTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5kYXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIGRheSBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBkYXkgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgYW5kIHRpbWVzICh0YWtpbmcKLSB0aW1lem9uZXMgaW50byBhY2NvdW50KTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bzwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gZGF0ZXMgYW5kIHRpbWVzIGFyZSByZXByZXNlbnQgdGhlIHNhbWUgZXhhY3QgICAgICAgICAgcG9pbnQgaW4gdGltZS4gRmFsc2Ugb3RoZXJ3aXNlLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ3QiPmd0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5ndDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZyB0aW1lem9uZXMKLSBpbnRvIGFjY291bnQpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgaW4gdGltZSwgdGhpcyBkYXRlIGFuZCB0aW1lIGxpZXMgYWZ0ZXIgdGhlIGRhdGUgYW5kIHRpbWUgICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hvdXIiPmhvdXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+aG91cjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgaG91ciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBob3VyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc19kaWdpdCI+aXNfZGlnaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzX2RpZ2l0PC9zdHJvbmc+KGNoYXIgeCk8L2NvZGU+PC9wPjxwPkNoZWNrIHRvIHNlZSBpZiBhIGNoYXJhY3RlciBpcyBudW1lcmljPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54PC9jb2RlPiAtIENoYXJhY3RlciB0byBiZSB0ZXN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGlzIG51bWVyaWMuIEZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbHQiPmx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5sdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZyB0aW1lem9uZXMKLSBpbnRvIGFjY291bnQpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgaW4gdGltZSwgdGhpcyBkYXRlIGFuZCB0aW1lIGxpZXMgYmVmb3JlIHRoZSBkYXRlIGFuZCB0aW1lICAgICAgICAgIHN1cHBsaWVkLiBGYWxzZSBvdGhlcndpc2UuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taW51cyI+bWludXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+bWludXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtaW51cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlVGltZSBhbmQgYSBzdXBwbGllZCByZXN1bHQKLSBzZXF1ZW5jZSAoWFNEYXRlVGltZSwgWERUWWVhck1vbnRoRHVyYXRpb24gYW5kIFhEVERheVRpbWVEdXJhdGlvbiBhcmUKLSBvbmx5IHZhbGlkIG9uZXMpLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMgICAgICAgICAgICAgb3BlcmF0b3IuIElmIHRoaXMgaXMgYW4gWFNEYXRlVGltZSwgdGhlIHJlc3VsdCB3aWxsIGJlIGEgICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlc2UgdHdvICAgICAgICAgICAgIGRhdGVzLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4gICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZVRpbWUgb2YgdGhlICAgICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY3VycmVudCBkYXRlIG1pbnVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lICAgICAgICAgICAgIHN1cHBsaWVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCAgICAgICAgICBtaW51cyBvcGVyYXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taW51dGUiPm1pbnV0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5taW51dGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIG1pbnV0ZSBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBtaW51dGUgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21vbnRoIj5tb250aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5tb250aDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgbW9udGggZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSB0aGUgbW9udGggdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhZF9pbnQiPnBhZF9pbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnBhZF9pbnQ8L3N0cm9uZz4oaW50IG51bQotICAgICAgICAgLAotICAgICAgaW50IGxlbik8L2NvZGU+PC9wPjxwPlBhZHMgdGhlIHN1cHBsaWVkIG51bWJlciB0byB0aGUgc3VwcGxpZWQgbnVtYmVyIG9mIGRpZ2l0cyBieSBhZGRpbmcgMCdzCi0gaW4gZnJvbnQgb2YgaXQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm51bTwvY29kZT4gLSBOdW1iZXIgdGhhdCBzaSB0byBiZSBwYWRkZWQgKGlmIG5lY2Nlc3NheSk8L3A+PHA+PGNvZGU+bGVuPC9jb2RlPiAtIERlc2lyZWQgbGVuZ3RoIGFmdGVyIHBhZGRpbmc8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYWRkZWQgaW50ZWdlcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZV9kYXRlIj5wYXJzZV9kYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludFtdIDxzdHJvbmc+cGFyc2VfZGF0ZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUgeWVhciwKLSBtb250aCBhbmQgZGF5IGZyb20gaXQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnRbXTwvY29kZT4gLSBJbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIGlzIHRoZSB5ZWFyLCBlbGVtZW50IDIgaXMgdGhlICAgICAgICAgIG1vbnRoIGFuZCBlbGVtZW50IDMgaXMgdGhlIGRheTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZV90aW1lIj5wYXJzZV90aW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGRvdWJsZVtdIDxzdHJvbmc+cGFyc2VfdGltZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUgaG91ciwKLSBtaW51dGUgYW5kIHNlY29uZHMgZnJvbSBpdDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmRvdWJsZVtdPC9jb2RlPiAtIEludGVnZXIgYXJyYXkgb2Ygc2l6ZSAzLiBFbGVtZW50IDEgaXMgdGhlIGhvdXIsIGVsZW1lbnQgMiBpcyB0aGUgICAgICAgICAgbWludXRlIGFuZCBlbGVtZW50IDMgaXMgdGhlIHNlY29uZHM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VfdGltZXpvbmUiPnBhcnNlX3RpbWV6b25lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludFtdIDxzdHJvbmc+cGFyc2VfdGltZXpvbmU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCByZXRyaWV2ZXMgdGhlCi0gdGltZXpvbmUgZnJvbSBpdDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludFtdPC9jb2RlPiAtIEludGVnZXIgYXJyYXkgb2Ygc2l6ZSAzLiBFbGVtZW50IDEgcmVwcmVzZW50cyB3aGV0aGVyIHRoZSAgICAgICAgICB0aW1lem9uZSBpcyBhaGVhZCBvciBiZWhpbmQgR01ULCBlbGVtZW50IDIgaXMgdGhlIGhvdXIgICAgICAgICAgZGlzcGxhY2VtZW50IGFuZCBlbGVtZW50IDMgaXMgdGhlIG1pbnV0ZSBkaXNwbGFjZW1lbnQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlRGF0ZVRpbWUiPnBhcnNlRGF0ZVRpbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZVRpbWUgPHN0cm9uZz5wYXJzZURhdGVUaW1lPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgY29uc3RydWN0cyBhIG5ldwotIFhTRGF0ZVRpbWUgb2JqZWN0IHVzaW5nIHRoYXQgaW5mb3JtYXRpb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZTwvY29kZT4gLSBUaGUgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSAoYW5kIG9wdGlvbmFsICAgICAgICAgIHRpbWV6b25lKTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wbHVzIj5wbHVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnBsdXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlVGltZSBhbmQgYSBzdXBwbGllZAotIHJlc3VsdCBzZXF1ZW5jZSAoWERUWWVhck1vbnRoRHVyYXRpb24gYW5kIFhEVERheVRpbWVEdXJhdGlvbiBhcmUgb25seQotIHZhbGlkIG9uZXMpLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMgICAgICAgICAgICAgb3BlcmF0b3IuIElmIGFyZyBpcyBhbiBYRFRZZWFyTW9udGhEdXJhdGlvbiBvciBhbiAgICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlVGltZSBvZiB0aGUgICAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgICAgICAgICAgICAgc3VwcGxpZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsICAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlY29uZCI+c2Vjb25kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGRvdWJsZSA8c3Ryb25nPnNlY29uZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgc2Vjb25kcyBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+ZG91YmxlPC9jb2RlPiAtIHRoZSBzZWNvbmRzIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpdmUgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmRhdGVUaW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGFuZCB0aW1lIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dGltZXpvbmVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImRhdGVUaW1lIiB3aGljaCBpcyB0aGUgZGF0YXlwZSBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R6Ij50ejwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiA8c3Ryb25nPnR6PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+IC0gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsdWUiPnZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGRvdWJsZSA8c3Ryb25nPnZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkN1cnJlbnRseSB1bnN1cHBvcnRlZCBtZXRob2QuIFJldHJpZXZlcyB0aGUgZGF0ZSBpbiBtaWxsaXNlY29uZHMgc2luY2UKLSB0aGUgYmVnaW5pbmcgb2YgZXBvY2g8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmRvdWJsZTwvY29kZT4gLSBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBiZWdpbmluZyBvZiB0aGUgZXBvY2g8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfeWVhciI+eWVhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz55ZWFyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIHRoZSB5ZWFyIGZyb20gdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIHllYXIgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RheVRpbWVEdXJhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGRhZTkzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNEYXlUaW1lRHVyYXRpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0RheVRpbWVEdXJhdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERheVRpbWVEdXJhdGlvbiBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RheVRpbWVEdXJhdGlvbiI+WFNEYXlUaW1lRHVyYXRpb248L2E+PC9zdHJvbmc+KGludCBkYXlzCi0gICAgICAgICAsCi0gICAgICBpbnQgaG91cnMKLSAgICAgICAgICwKLSAgICAgIGludCBtaW51dGVzCi0gICAgICAgICAsCi0gICAgICBkb3VibGUgc2Vjb25kcwotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBuZWdhdGl2ZSk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRGF5VGltZUR1cmF0aW9uIj5YU0RheVRpbWVEdXJhdGlvbjwvYT48L3N0cm9uZz4oZG91YmxlIHNlY3MpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RheVRpbWVEdXJhdGlvbiI+WFNEYXlUaW1lRHVyYXRpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Nsb25lIj5jbG9uZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb2YgYSB0aW1lIGR1cmF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXYiPmRpdjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgZGl2aXNpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbik8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21pbnVzIj5taW51czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbik8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlRFREdXJhdGlvbiI+cGFyc2VEVER1cmF0aW9uPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BsdXMiPnBsdXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGFkZGl0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWVzIj50aW1lczwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbik8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpdmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0RheVRpbWVEdXJhdGlvbiI+WFNEYXlUaW1lRHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RheVRpbWVEdXJhdGlvbjwvc3Ryb25nPihpbnQgZGF5cwotICAgICAgICAgLAotICAgICAgaW50IGhvdXJzCi0gICAgICAgICAsCi0gICAgICBpbnQgbWludXRlcwotICAgICAgICAgLAotICAgICAgZG91YmxlIHNlY29uZHMKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gbmVnYXRpdmUpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycy4gSWYgbW9yZSB0aGFuIDI0IGhvdXJzIGlzCi0gc3VwcGxpZWQsIHRoZSBudW1iZXIgb2YgZGF5cyBpcyBhZGp1c3RlZCBhY29yZGluZ2x5LiBUaGUgc2FtZSBvY2N1cnMgZm9yCi0gbWludXRlcyBhbmQgc2Vjb25kczwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0RheVRpbWVEdXJhdGlvbiI+WFNEYXlUaW1lRHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RheVRpbWVEdXJhdGlvbjwvc3Ryb25nPihkb3VibGUgc2Vjcyk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHRvIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kczwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0RheVRpbWVEdXJhdGlvbiI+WFNEYXlUaW1lRHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RheVRpbWVEdXJhdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB0byBhIGR1cmF0aW9uIG9mIG5vIHRpbWUgKDBkYXlzLCAwaG91cnMsIDBtaW51dGVzLCAwc2Vjb25kcyk8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jbG9uZSI+Y2xvbmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmNsb25lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb2YgYSB0aW1lIGR1cmF0aW9uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIE5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXYiPmRpdjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5kaXY8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBkaXZpc2lvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGRpdmlkZSBieTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiBhZnRlciAgICAgICAgICB0aGUgZGl2aXNpb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21pbnVzIj5taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5taW51czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gc3VidHJhY3Q8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIgICAgICAgICAgdGhlIHN1YnRyYWN0aW9uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZURURHVyYXRpb24iPnBhcnNlRFREdXJhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiA8c3Ryb25nPnBhcnNlRFREdXJhdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgWFNEYXlUaW1lRHVyYXRpb24gYnkgcGFyc2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0gcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT4gLSBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN1cHBsaWVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BsdXMiPnBsdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+cGx1czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gYWRkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyICAgICAgICAgIHRoZSBhZGRpdGlvbjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6ZGF5VGltZUR1cmF0aW9uIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RpbWVzIj50aW1lczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz50aW1lczwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gbXVsdGlwbHkgYnk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIgICAgICAgICAgdGhlIG11bHRpcGxpY2F0aW9uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpdmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImRheVRpbWVEdXJhdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjU3MjdiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTRGVjaW1hbDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTRGVjaW1hbDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRGVjaW1hbCI+WFNEZWNpbWFsPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RlY2ltYWwiPlhTRGVjaW1hbDwvYT48L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0RlY2ltYWwgeCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRGVjaW1hbCI+WFNEZWNpbWFsPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FicyI+YWJzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jZWlsaW5nIj5jZWlsaW5nPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkZWNpbWFsCi0gbnVtYmVyIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udmVydEFyZyI+Y29udmVydEFyZzwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGl2Ij5kaXY8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBkb3VibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZG91YmxlX3ZhbHVlIj5kb3VibGVfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mbG9vciI+Zmxvb3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubWF0aC5CaWdEZWNpbWFsPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFZhbHVlIj5nZXRWYWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2d0Ij5ndDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaWRpdiI+aWRpdjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwKLSB0aGUgUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sdCI+bHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21pbnVzIj5taW51czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tb2QiPm1vZDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0gUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BsdXMiPnBsdXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEZWNpbWFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfcm91bmQiPnJvdW5kPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yb3VuZF9oYWxmX3RvX2V2ZW4iPnJvdW5kX2hhbGZfdG9fZXZlbjwvYT4oaW50IHByZWNpc2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfZG91YmxlIj5zZXRfZG91YmxlPC9hPihkb3VibGUgeCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXRzIHRoZSBudW1iZXIgc3RvcmVkIHRvIHRoYXQgc3VwcGxpZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIHZhbHVlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXMiPnRpbWVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF91bmFyeV9taW51cyI+dW5hcnlfbWludXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBOZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3plcm8iPnplcm88L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0RlY2ltYWwiPlhTRGVjaW1hbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRGVjaW1hbDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwLjA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEZWNpbWFsIj5YU0RlY2ltYWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RlY2ltYWw8L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0RlY2ltYWwgeCk8L2NvZGU+PC9wPjxwPkluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBudW1iZXI8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEZWNpbWFsIj5YU0RlY2ltYWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RlY2ltYWw8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWJzIj5hYnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+YWJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPiAtIEEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2VpbGluZyI+Y2VpbGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5jZWlsaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUgICAgICAgICAgbnVtYmVyIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRlY2ltYWwKLSBudW1iZXIgaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkZWNpbWFsIG51bWJlci48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGVjaW1hbCBudW1iZXIgc3VwcGxpZWQuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb252ZXJ0QXJnIj5jb252ZXJ0QXJnPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Y29udmVydEFyZzwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGl2Ij5kaXY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZGl2PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgZGl2aXNpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kb3VibGVfdmFsdWUiPmRvdWJsZV92YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz5kb3VibGVfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmRvdWJsZTwvY29kZT4gLSBUaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXQpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0PC9jb2RlPiAtIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUgICAgICAgICAgICAgWFNEZWNpbWFsKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSAyIHJlcHJlc2VudGF0aW9uIHJlcHJlc2VudCB0aGUgc2FtZSBudW1iZXIuIEZhbHNlICAgICAgICAgIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmxvb3IiPmZsb29yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPmZsb29yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlICAgICAgICAgIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFsdWUiPmdldFZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubWF0aC5CaWdEZWNpbWFsIDxzdHJvbmc+Z2V0VmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLm1hdGguQmlnRGVjaW1hbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ3QiPmd0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5ndDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlICAgICAgICAgICAgIFhTRGVjaW1hbCk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiB0aGlzICAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaWRpdiI+aWRpdjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5pZGl2PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwKLSB0aGUgUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyICAgICAgICAgIGRpdmlzaW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbHQiPmx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5sdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlICAgICAgICAgICAgIFhTRGVjaW1hbCk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGlzICAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWludXMiPm1pbnVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPm1pbnVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBzdWJ0cmFjdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgc3VidHJhY3Rpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb2QiPm1vZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5tb2Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEZWNpbWFsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BsdXMiPnBsdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+cGx1czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEZWNpbWFsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCAgICAgICAgICBhZGRpdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kIj5yb3VuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5yb3VuZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kX2hhbGZfdG9fZXZlbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kX2hhbGZfdG9fZXZlbjwvc3Ryb25nPihpbnQgcHJlY2lzaW9uKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZCBwcmVjaXNpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVjaXNpb248L2NvZGU+IC0gQW4gaW50ZWdlciBwcmVjaXNpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X2RvdWJsZSI+c2V0X2RvdWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X2RvdWJsZTwvc3Ryb25nPihkb3VibGUgeCk8L2NvZGU+PC9wPjxwPlNldHMgdGhlIG51bWJlciBzdG9yZWQgdG8gdGhhdCBzdXBwbGllZDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eDwvY29kZT4gLSBOdW1iZXIgdG8gYmUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmRlY2ltYWwiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXMiPnRpbWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnRpbWVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgbXVsdGlwbGljYXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJkZWNpbWFsIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz51bmFyeV9taW51czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5OZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhpcyBYU0RlY2ltYWw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfemVybyI+emVybzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+emVybzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDA8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzZWU1NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTRG91YmxlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNEb3VibGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRG91YmxlIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRG91YmxlIj5YU0RvdWJsZTwvYT48L3N0cm9uZz4oZG91YmxlIHgpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RvdWJsZSI+WFNEb3VibGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRG91YmxlIj5YU0RvdWJsZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpbml0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hYnMiPmFiczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2VpbGluZyI+Y2VpbGluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZG91YmxlIG51bWJlcgotIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udmVydEFyZyI+Y29udmVydEFyZzwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGl2Ij5kaXY8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGRvdWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kb3VibGVfdmFsdWUiPmRvdWJsZV92YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhYSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Zsb29yIj5mbG9vcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ndCI+Z3Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lkaXYiPmlkaXY8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbmZpbml0ZSI+aW5maW5pdGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgYW4gaW5maW5pdGUgbnVtYmVyIChuZWdhdGl2ZSBvciBwb3NpdGl2ZSk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sdCI+bHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gQ3VycmVudGx5Ci0gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBleGlzdHMgc28gdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIG11c3QgYmUKLSBvZiB0eXBlIFhTRG91YmxlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWludXMiPm1pbnVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbW9kIj5tb2Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIG1vZHVsdXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uYW4iPm5hbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBOYU48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZWdhdGl2ZVplcm8iPm5lZ2F0aXZlWmVybzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX2RvdWJsZSI+cGFyc2VfZG91YmxlPC9hPihqYXZhLmxhbmcuU3RyaW5nIGkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3RyaW5nIHJlcHJlc2VudGVkIG51bWJlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGx1cyI+cGx1czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kIj5yb3VuZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+KGludCBwcmVjaXNpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZAotIHByZWNpc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIHZhbHVlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXMiPnRpbWVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLAotIHRoZSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEb3VibGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdW5hcnlfbWludXMiPnVuYXJ5X21pbnVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF96ZXJvIj56ZXJvPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIDA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0RvdWJsZSI+WFNEb3VibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RvdWJsZTwvc3Ryb25nPihkb3VibGUgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG51bWJlcjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0RvdWJsZSI+WFNEb3VibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RvdWJsZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEb3VibGUiPlhTRG91YmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNEb3VibGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpbml0KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdXNpbmcgYSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWJzIj5hYnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+YWJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPiAtIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jZWlsaW5nIj5jZWlsaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPmNlaWxpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlICAgICAgICAgIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkb3VibGUgbnVtYmVyCi0gaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkb3VibGUgbnVtYmVyLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb3VibGUgbnVtYmVyIHN1cHBsaWVkLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29udmVydEFyZyI+Y29udmVydEFyZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmNvbnZlcnRBcmc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RpdiI+ZGl2PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmRpdjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gZGl2aXNpb24gd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgZGl2aXNpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kb3VibGVfdmFsdWUiPmRvdWJsZV92YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz5kb3VibGVfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmRvdWJsZTwvY29kZT4gLSBUaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYWEpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFhPC9jb2RlPiAtIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUgICAgICAgICAgICAgWFNEb3VibGUpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIDIgcmVwcmVzZW50YXRpb25zIHJlcHJlc2VudCB0aGUgc2FtZSBudW1iZXIuIEZhbHNlICAgICAgICAgIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmxvb3IiPmZsb29yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPmZsb29yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgICAgICAgICAgbnVtYmVyIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUgICAgICAgICAgICAgWFNEb3VibGUpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBzbWFsbGVyIHRoYW4gdGhpcyAgICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lkaXYiPmlkaXY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+aWRpdjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyICAgICAgICAgIGRpdmlzaW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5maW5pdGUiPmluZmluaXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pbmZpbml0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgYW4gaW5maW5pdGUgbnVtYmVyIChuZWdhdGl2ZSBvciBwb3NpdGl2ZSk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgaW5maW5pdHkuIEZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbHQiPmx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5sdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gQ3VycmVudGx5Ci0gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBleGlzdHMgc28gdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIG11c3QgYmUKLSBvZiB0eXBlIFhTRG91YmxlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUgICAgICAgICAgICAgWFNEb3VibGUpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBncmVhdGVyIHRoYW4gdGhpcyAgICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21pbnVzIj5taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5taW51czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gc3VidHJhY3Rpb24gd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgc3VidHJhY3Rpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb2QiPm1vZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5tb2Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uYW4iPm5hbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bmFuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBOYU48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgTmFOLiBGYWxzZSBvdGhlcndpc2UuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25lZ2F0aXZlWmVybyI+bmVnYXRpdmVaZXJvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5uZWdhdGl2ZVplcm88L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZV9kb3VibGUiPnBhcnNlX2RvdWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGUgPHN0cm9uZz5wYXJzZV9kb3VibGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3RyaW5nIHJlcHJlc2VudGVkIG51bWJlcjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aTwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciB0byBiZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZTwvY29kZT4gLSBOZXcgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgc3VwcGxpZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGx1cyI+cGx1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5wbHVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBhZGRpdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kIj5yb3VuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5yb3VuZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+cm91bmRfaGFsZl90b19ldmVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yb3VuZF9oYWxmX3RvX2V2ZW4iPnJvdW5kX2hhbGZfdG9fZXZlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5yb3VuZF9oYWxmX3RvX2V2ZW48L3N0cm9uZz4oaW50IHByZWNpc2lvbik8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQKLSBwcmVjaXNpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVjaXNpb248L2NvZGU+IC0gQW4gaW50ZWdlciBwcmVjaXNpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpkb3VibGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXMiPnRpbWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnRpbWVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwKLSB0aGUgUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRG91YmxlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIG11bHRpcGxpY2F0aW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsICAgICAgICAgIG11bHRpcGxpY2F0aW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiZG91YmxlIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz51bmFyeV9taW51czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5OZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGlzIFhTRGVjaW1hbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF96ZXJvIj56ZXJvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz56ZXJvPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyAwPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmY1NjAwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0R1cmF0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNEdXJhdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHhzOmR1cmF0aW9uIGRhdGEgdHlwZS4gT3RoZXIgZHVyYXRpb24gaW1wbGVtZW50YXRpb25zCi0gc2hvdWxkIGluaGVyaXQgZnJvbSB0aGlzIGltcGxlbWVudGF0aW9uLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfX2RheXMiPl9kYXlzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9faG91cnMiPl9ob3VyczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfX21pbnV0ZXMiPl9taW51dGVzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fbW9udGgiPl9tb250aDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX19uZWdhdGl2ZSI+X25lZ2F0aXZlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBkb3VibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fc2Vjb25kcyI+X3NlY29uZHM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX195ZWFyIj5feWVhcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNEdXJhdGlvbiI+WFNEdXJhdGlvbjwvYT48L3N0cm9uZz4oaW50IHllYXJzCi0gICAgICAgICAsCi0gICAgICBpbnQgbW9udGhzCi0gICAgICAgICAsCi0gICAgICBpbnQgZGF5cwotICAgICAgICAgLAotICAgICAgaW50IGhvdXJzCi0gICAgICAgICAsCi0gICAgICBpbnQgbWludXRlcwotICAgICAgICAgLAotICAgICAgZG91YmxlIHNlY29uZHMKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gbmVnYXRpdmUpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0R1cmF0aW9uIj5YU0R1cmF0aW9uPC9hPjwvc3Ryb25nPihkb3VibGUgc2Vjcyk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRHVyYXRpb24iPlhTRHVyYXRpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Nsb25lIj5jbG9uZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBkdXJhdGlvbgotIGZyb20gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kYXlzIj5kYXlzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgZGF5cyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2d0Ij5ndDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hvdXJzIj5ob3VyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGhvdXJzIChtYXggMjQpIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0Nhc3RhYmxlIj5pc0Nhc3RhYmxlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSBhYXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbHQiPmx0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWludXRlcyI+bWludXRlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIG1pbnV0ZXMgKG1heCA2MCkgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0gc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tb250aCI+bW9udGg8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtb250aHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25lZ2F0aXZlIj5uZWdhdGl2ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaAotIHRpbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlRFREdXJhdGlvbiI+cGFyc2VEVER1cmF0aW9uPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgZG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlY29uZHMiPnNlY29uZHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIChtYXggNjApIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBkb3VibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCBhcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIGl0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF95ZWFyIj55ZWFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgeWVhcnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfX2RheXMiPl9kYXlzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPl9kYXlzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX19ob3VycyI+X2hvdXJzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPl9ob3Vyczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9fbWludXRlcyI+X21pbnV0ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+X21pbnV0ZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfX21vbnRoIj5fbW9udGg8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+X21vbnRoPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX19uZWdhdGl2ZSI+X25lZ2F0aXZlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5fbmVnYXRpdmU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfX3NlY29uZHMiPl9zZWNvbmRzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGRvdWJsZSA8c3Ryb25nPl9zZWNvbmRzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX195ZWFyIj5feWVhcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5feWVhcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNEdXJhdGlvbiI+WFNEdXJhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRHVyYXRpb248L3N0cm9uZz4oaW50IHllYXJzCi0gICAgICAgICAsCi0gICAgICBpbnQgbW9udGhzCi0gICAgICAgICAsCi0gICAgICBpbnQgZGF5cwotICAgICAgICAgLAotICAgICAgaW50IGhvdXJzCi0gICAgICAgICAsCi0gICAgICBpbnQgbWludXRlcwotICAgICAgICAgLAotICAgICAgZG91YmxlIHNlY29uZHMKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gbmVnYXRpdmUpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycy4gSWYgbW9yZSB0aGFuIDI0IGhvdXJzIGlzCi0gc3VwcGxpZWQsIHRoZSBudW1iZXIgb2YgZGF5cyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4gVGhlIHNhbWUgb2NjdXJzIGZvcgotIG1pbnV0ZXMgYW5kIHNlY29uZHM8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEdXJhdGlvbiI+WFNEdXJhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRHVyYXRpb248L3N0cm9uZz4oZG91YmxlIHNlY3MpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHM8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEdXJhdGlvbiI+WFNEdXJhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRHVyYXRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gYSBkdXJhdGlvbiBvZiBubyB0aW1lICgwZGF5cywgMGhvdXJzLCAwbWludXRlcywgMHNlY29uZHMpPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2xvbmUiPmNsb25lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5jbG9uZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB0aW1lIGR1cmF0aW9uCi0gZnJvbSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHRpbWUgZHVyYXRpb24gZXh0cmFjdGVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kYXlzIj5kYXlzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmRheXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBudW1iZXIgb2YgZGF5cyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gTnVtYmVyIG9mIGRheXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGV5IGJvdGggcmVwcmVzZW50IHRoZSBkdXJhdGlvbiBvZiB0aW1lLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2d0Ij5ndDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+Z3Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBzbWFsbGVyIGR1cmF0aW9uIHRoYW4gdGhhdCAgICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaG91cnMiPmhvdXJzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmhvdXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGhvdXJzIChtYXggMjQpIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBOdW1iZXIgb2YgaG91cnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0Nhc3RhYmxlIj5pc0Nhc3RhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc0Nhc3RhYmxlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIGFhdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWF0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbHQiPmx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5sdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIGxhcmdlciBkdXJhdGlvbiB0aGFuIHRoYXQgICAgICAgICAgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21pbnV0ZXMiPm1pbnV0ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bWludXRlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtaW51dGVzIChtYXggNjApIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIE51bWJlciBvZiBtaW51dGVzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbW9udGgiPm1vbnRoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPm1vbnRoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gTnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25lZ2F0aXZlIj5uZWdhdGl2ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bmVnYXRpdmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHdoZXRoZXIgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoCi0gdGltZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaCB0aW1lLiAgICAgICAgICBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VEVER1cmF0aW9uIj5wYXJzZURURHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz5wYXJzZURURHVyYXRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+IC0gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWNvbmRzIj5zZWNvbmRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGRvdWJsZSA8c3Ryb25nPnNlY29uZHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyAobWF4IDYwKSB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmRvdWJsZTwvY29kZT4gLSBOdW1iZXIgb2Ygc2Vjb25kcyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgZG91YmxlIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCBhcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIGl0PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5kb3VibGU8L2NvZGU+IC0gTnVtYmVyIG9mIHNlY29uZHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF95ZWFyIj55ZWFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnllYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBudW1iZXIgb2YgeWVhcnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIE51bWJlciBvZiB5ZWFycyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRW50aXR5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0VudGl0eS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjMzOTNkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRW50aXR5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNFbnRpdHk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0VudGl0eTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWU8L3ByZT5CdWlsdCBpbiBEYXRhIFR5cGUgZm9yIHhzOkVudGl0eTxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRW50aXR5Ij5YU0VudGl0eTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNFbnRpdHkiPlhTRW50aXR5PC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHZhbHVlKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgd2l0aGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiAgVGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoaXMKLSBpcyByZWxheGVkIGZyb20gdGhlIFhNTCBTY2hlbWEgcmVxdWlyZW1lbnQuICBUaGUgRU5USVRZIGRvZXMKLSBub3QgaGF2ZSB0byBiZSBsb2NhdGVkIG9yIGV4cGFuZGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5kCi0gZXZhbHVhdGlvbiBmb3IgY2FzdGluZy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTRW50aXR5Ij5YU0VudGl0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRW50aXR5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0VudGl0eSI+WFNFbnRpdHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0VudGl0eTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHZhbHVlKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIEVOVElUWSB3aXRoaW4KLSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuICBUaGUgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgdGhpcwotIGlzIHJlbGF4ZWQgZnJvbSB0aGUgWE1MIFNjaGVtYSByZXF1aXJlbWVudC4gIFRoZSBFTlRJVFkgZG9lcwotIG5vdCBoYXZlIHRvIGJlIGxvY2F0ZWQgb3IgZXhwYW5kZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBhbmQKLSBldmFsdWF0aW9uIGZvciBjYXN0aW5nLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIEVOVElUWTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTAyNDdkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0Zsb2F0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNGbG9hdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBGbG9hdCBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0Zsb2F0Ij5YU0Zsb2F0PC9hPjwvc3Ryb25nPihmbG9hdCB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNGbG9hdCI+WFNGbG9hdDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hYnMiPmFiczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2VpbGluZyI+Y2VpbGluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBmbG9hdCBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb252ZXJ0QXJnIj5jb252ZXJ0QXJnPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXYiPmRpdjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYWEpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGZsb2F0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Zsb2F0X3ZhbHVlIj5mbG9hdF92YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIGZsb2F0IHZhbHVlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZmxvb3IiPmZsb29yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2d0Ij5ndDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaWRpdiI+aWRpdjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5maW5pdGUiPmluZmluaXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIG5lZ2F0aXZlIG9yIHBvc2l0aXZlIGluZmluaXR5PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbHQiPmx0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9taW51cyI+bWludXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vZCI+bW9kPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0gUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRmxvYXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmFuIj5uYW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgTmFOPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmVnYXRpdmVaZXJvIj5uZWdhdGl2ZVplcm88L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BsdXMiPnBsdXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kIj5yb3VuZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+KGludCBwcmVjaXNpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZCBwcmVjaXNpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXMiPnRpbWVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdW5hcnlfbWludXMiPnVuYXJ5X21pbnVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTmVnYXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3plcm8iPnplcm88L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgMDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTRmxvYXQiPlhTRmxvYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0Zsb2F0PC9zdHJvbmc+KGZsb2F0IHgpPC9jb2RlPjwvcD48cD5Jbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbnVtYmVyPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTRmxvYXQiPlhTRmxvYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0Zsb2F0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hYnMiPmFiczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5hYnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+QWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2VpbGluZyI+Y2VpbGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5jZWlsaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlICAgICAgICAgIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGZsb2F0IGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZmxvYXQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZmxvYXQgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnZlcnRBcmciPmNvbnZlcnRBcmc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5jb252ZXJ0QXJnPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXYiPmRpdjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5kaXY8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGRpdmlzaW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhYSk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWE8L2NvZGU+IC0gVGhlIGRhdGF0eXBlIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSBudW1iZXIuIEZhbHNlICAgICAgICAgIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmxvYXRfdmFsdWUiPmZsb2F0X3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGZsb2F0IDxzdHJvbmc+ZmxvYXRfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgZmxvYXQgdmFsdWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5mbG9hdDwvY29kZT4gLSBUaGUgYWN0dWFsIGZsb2F0IHZhbHVlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mbG9vciI+Zmxvb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+Zmxvb3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPiAtIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlICAgICAgICAgIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ3QiPmd0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5ndDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZGF0YXR5cGUgdG8gY29tcGFyZSB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUgICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pZGl2Ij5pZGl2PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmlkaXY8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBpbnRlZ2VyIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyICAgICAgICAgIGRpdmlzaW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5maW5pdGUiPmluZmluaXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pbmZpbml0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgbmVnYXRpdmUgb3IgcG9zaXRpdmUgaW5maW5pdHk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpcyB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgaW5maW5pdHkuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sdCI+bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmx0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gaXMgYSBncmVhdGVyIG51bWJlciB0aGFuIHRoZSAgICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21pbnVzIj5taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5taW51czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIHN1YnRyYWN0aW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgc3VidHJhY3Rpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb2QiPm1vZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5tb2Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0gUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRmxvYXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25hbiI+bmFuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5uYW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIE5hTjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlzIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBOYU4uIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZWdhdGl2ZVplcm8iPm5lZ2F0aXZlWmVybzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bmVnYXRpdmVaZXJvPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGx1cyI+cGx1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5wbHVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgYWRkaXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yb3VuZCI+cm91bmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+cm91bmQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPiAtIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+cm91bmRfaGFsZl90b19ldmVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kX2hhbGZfdG9fZXZlbjwvc3Ryb25nPihpbnQgcHJlY2lzaW9uKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZCBwcmVjaXNpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVjaXNpb248L2NvZGU+IC0gQW4gaW50ZWdlciBwcmVjaXNpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmZsb2F0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbnVtYmVyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lcyI+dGltZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+dGltZXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsICAgICAgICAgIG11bHRpcGxpY2F0aW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiZmxvYXQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdW5hcnlfbWludXMiPnVuYXJ5X21pbnVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnVuYXJ5X21pbnVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPk5lZ2F0ZXMgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF96ZXJvIj56ZXJvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz56ZXJvPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyAwPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dEYXkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR0RheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGZiMzhiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR0RheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTR0RheTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTR0RheTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGF5IGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTR0RheSI+WFNHRGF5PC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTR0RheSI+WFNHRGF5PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdEYXkgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RheSI+ZGF5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR0RheTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR0RheTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJzZV9nRGF5Ij5wYXJzZV9nRGF5PC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXkgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHRGF5Ci0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIGRheTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eiI+dHo8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0dEYXkiPlhTR0RheTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTR0RheTwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRheTwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0dEYXkiPlhTR0RheTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTR0RheTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IGRheTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgPHN0cm9uZz5jYWxlbmRhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+IC0gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdEYXkgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ0RheSBpcyB0byBiZSBleHRyYWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgZGF5PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kYXkiPmRheTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5kYXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXI8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBUaGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dEYXk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgWFNHRGF5IHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSBkYXkuIEZhbHNlICAgICAgICAgIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VfZ0RheSI+cGFyc2VfZ0RheTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5IDxzdHJvbmc+cGFyc2VfZ0RheTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRheSBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0dEYXkKLSByZXByZXNlbnRhdGlvbiBvZiBpdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dEYXk8L2NvZGU+IC0gVGhlIFhTR0RheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpnRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgZGF5PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIGRheTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dGltZXpvbmVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZCBhdCBjcmVhdGlvbjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImdEYXkiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHoiPnR6PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIDxzdHJvbmc+dHo8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT4gLSB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg5MDc2Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTR01vbnRoPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNHTW9udGg8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdNb250aCBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0dNb250aCI+WFNHTW9udGg8L2E+PC9zdHJvbmc+KGphdmEudXRpbC5DYWxlbmRhciBjYWwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIHR6KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNHTW9udGgiPlhTR01vbnRoPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ01vbnRoIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dNb250aDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbW9udGgiPm1vbnRoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX2dNb250aCI+cGFyc2VfZ01vbnRoPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtb250aCBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0dNb250aAotIHJlcHJlc2VudGF0aW9uIG9mIGl0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eiI+dHo8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0dNb250aCI+WFNHTW9udGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0dNb250aDwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG1vbnRoPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTR01vbnRoIj5YU0dNb250aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTR01vbnRoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbW9udGg8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyIDxzdHJvbmc+Y2FsZW5kYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+IC0gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ01vbnRoIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdNb250aCBpcyB0byBiZSBleHRyYWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgbW9udGg8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dNb250aDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU0dNb250aCB0byBjb21wYXJlIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgbW9udGguIEZhbHNlICAgICAgICAgIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbW9udGgiPm1vbnRoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPm1vbnRoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXI8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBUaGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VfZ01vbnRoIj5wYXJzZV9nTW9udGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoIDxzdHJvbmc+cGFyc2VfZ01vbnRoPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9udGggYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHTW9udGgKLSByZXByZXNlbnRhdGlvbiBvZiBpdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoPC9jb2RlPiAtIFRoZSBYU0dNb250aCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpnTW9udGgiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dGltZXpvbmVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZCBhdCBjcmVhdGlvbjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImdNb250aCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eiI+dHo8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz50ejwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoRGF5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aERheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmM1MGIxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoRGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNHTW9udGhEYXk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0dNb250aERheTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTW9udGhEYXkgZGF0YXR5cGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNHTW9udGhEYXkiPlhTR01vbnRoRGF5PC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTR01vbnRoRGF5Ij5YU0dNb250aERheTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBhbmQgZGF5IHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ01vbnRoRGF5IGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kYXkiPmRheTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dNb250aERheTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbW9udGgiPm1vbnRoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoRGF5PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX2dNb250aERheSI+cGFyc2VfZ01vbnRoRGF5PC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtb250aCBhbmQgZGF5IGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0gWFNHTW9udGhEYXkgcmVwcmVzZW50YXRpb24gb2YgaXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIGFuZCBkYXk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIGZvciB3aGV0aGVyIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZCBhdCBjcmVhdGlvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHoiPnR6PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNHTW9udGhEYXkiPlhTR01vbnRoRGF5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNHTW9udGhEYXk8L3N0cm9uZz4oamF2YS51dGlsLkNhbGVuZGFyIGNhbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gdHopPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBtb250aCBhbmQgZGF5PC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTR01vbnRoRGF5Ij5YU0dNb250aERheTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTR01vbnRoRGF5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbW9udGggYW5kIGRheTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgPHN0cm9uZz5jYWxlbmRhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBhbmQgZGF5IHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPiAtIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBhbmQgZGF5IHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ01vbnRoRGF5IGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdNb250aERheSBpcyB0byBiZSBleHRyYWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgbW9udGggYW5kIGRheTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGF5Ij5kYXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+ZGF5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gVGhlIGFjdHVhbCBkYXkgYXMgYW4gaW50ZWdlcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHTW9udGhEYXk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgWFNHTW9udGhEYXkgdG8gY29tcGFyZSB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG1vbnRoIGFuZCBkYXkuICAgICAgICAgIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbW9udGgiPm1vbnRoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPm1vbnRoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXI8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBUaGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VfZ01vbnRoRGF5Ij5wYXJzZV9nTW9udGhEYXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoRGF5IDxzdHJvbmc+cGFyc2VfZ01vbnRoRGF5PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9udGggYW5kIGRheSBhbmQgY29uc3RydWN0cyBhIG5ldwotIFhTR01vbnRoRGF5IHJlcHJlc2VudGF0aW9uIG9mIGl0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgKGFuZCBvcHRpb25hbCAgICAgICAgICAgICB0aW1lem9uZSk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aERheTwvY29kZT4gLSBUaGUgWFNHTW9udGhEYXkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6Z01vbnRoRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGggYW5kIGRheTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aCBhbmQgZGF5PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz50aW1lem9uZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiZ01vbnRoRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R6Ij50ejwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiA8c3Ryb25nPnR6PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+IC0gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHWWVhci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHWWVhci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYThiMTE4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0dZZWFyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNHWWVhcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ01vbnRoIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTR1llYXIiPlhTR1llYXI8L2E+PC9zdHJvbmc+KGphdmEudXRpbC5DYWxlbmRhciBjYWwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIHR6KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNHWWVhciI+WFNHWWVhcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ1llYXIgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR1llYXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX2dZZWFyIj5wYXJzZV9nWWVhcjwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgeWVhciBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0dZZWFyCi0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIGZvciB3aGV0aGVyIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZCBhdCBjcmVhdGlvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHoiPnR6PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF95ZWFyIj55ZWFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNHWWVhciI+WFNHWWVhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTR1llYXI8L3N0cm9uZz4oamF2YS51dGlsLkNhbGVuZGFyIGNhbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gdHopPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBtb250aDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0dZZWFyIj5YU0dZZWFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNHWWVhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHllYXI8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyIDxzdHJvbmc+Y2FsZW5kYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5DYWxlbmRhcjwvY29kZT4gLSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdZZWFyIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdZZWFyIGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB5ZWFyPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHWWVhcjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU0dZZWFyIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSB5ZWFyLiBGYWxzZSAgICAgICAgICBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlX2dZZWFyIj5wYXJzZV9nWWVhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHWWVhciA8c3Ryb25nPnBhcnNlX2dZZWFyPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgeWVhciBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0dZZWFyCi0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXI8L2NvZGU+IC0gVGhlIFhTR1llYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6Z1llYXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnRpbWV6b25lZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJnWWVhciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eiI+dHo8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz50ejwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3llYXIiPnllYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+eWVhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXI8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBUaGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXJNb250aC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDlkODAxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXJNb250aC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTR1llYXJNb250aDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTR1llYXJNb250aDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgWWVhck1vbnRoIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTR1llYXJNb250aCI+WFNHWWVhck1vbnRoPC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTR1llYXJNb250aCI+WFNHWWVhck1vbnRoPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgYW5kIG1vbnRoIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ1llYXJNb250aCBpbgotIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHWWVhck1vbnRoPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tb250aCI+bW9udGg8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHWWVhck1vbnRoPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX2dZZWFyTW9udGgiPnBhcnNlX2dZZWFyTW9udGg8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHllYXIgYW5kIG1vbnRoIGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0gWFNHWWVhck1vbnRoIHJlcHJlc2VudGF0aW9uIG9mIGl0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyIGFuZCBtb250aDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eiI+dHo8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3llYXIiPnllYXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXI8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0dZZWFyTW9udGgiPlhTR1llYXJNb250aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTR1llYXJNb250aDwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHllYXIgYW5kIG1vbnRoPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTR1llYXJNb250aCI+WFNHWWVhck1vbnRoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNHWWVhck1vbnRoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgeWVhciBhbmQgbW9udGg8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyIDxzdHJvbmc+Y2FsZW5kYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+IC0gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgYW5kIG1vbnRoIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ1llYXJNb250aCBpbgotIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnWWVhck1vbnRoIGlzIHRvIGJlICAgICAgICAgICAgIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB5ZWFyIGFuZCBtb250aDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR1llYXJNb250aDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU0dZZWFyTW9udGggdG8gY29tcGFyZSB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIHllYXIgYW5kIG1vbnRoLiAgICAgICAgICBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21vbnRoIj5tb250aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5tb250aDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gVGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlX2dZZWFyTW9udGgiPnBhcnNlX2dZZWFyTW9udGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXJNb250aCA8c3Ryb25nPnBhcnNlX2dZZWFyTW9udGg8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB5ZWFyIGFuZCBtb250aCBhbmQgY29uc3RydWN0cyBhIG5ldwotIFhTR1llYXJNb250aCByZXByZXNlbnRhdGlvbiBvZiBpdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCAoYW5kIG9wdGlvbmFsICAgICAgICAgICAgIHRpbWV6b25lKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXJNb250aDwvY29kZT4gLSBUaGUgWFNHWWVhck1vbnRoIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmdZZWFyTW9udGgiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyIGFuZCBtb250aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyIGFuZCBtb250aDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dGltZXpvbmVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZCBhdCBjcmVhdGlvbjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImdZZWFyTW9udGgiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHoiPnR6PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIDxzdHJvbmc+dHo8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT4gLSB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF95ZWFyIj55ZWFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnllYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gVGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXI8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNIZXhCaW5hcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSGV4QmluYXJ5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZTc1MmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNIZXhCaW5hcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0hleEJpbmFyeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTSGV4QmluYXJ5PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgeHM6aGV4QmluYXJ5IGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTSGV4QmluYXJ5Ij5YU0hleEJpbmFyeTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNIZXhCaW5hcnkiPlhTSGV4QmluYXJ5PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGhleEJpbmFyeSB2YWx1ZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLSBtdXN0IGJlIG9mIHR5cGUgaGV4QmluYXJ5PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFzZTY0QmluYXJ5IHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHZhbHVlKCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBoZXhCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0hleEJpbmFyeSI+WFNIZXhCaW5hcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0hleEJpbmFyeTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTSGV4QmluYXJ5Ij5YU0hleEJpbmFyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSGV4QmluYXJ5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHRvIG51bGw8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgaGV4QmluYXJ5IHZhbHVlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGhleEJpbmFyeSB2YWx1ZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgaGV4QmluYXJ5IHZhbHVlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLSBtdXN0IGJlIG9mIHR5cGUgaGV4QmluYXJ5PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIHNhbWUuIEZhbHNlIG90aGVyd2lzZS48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmhleEJpbmFyeSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFzZTY0QmluYXJ5IHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHZhbHVlKCk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gVGhlIGhleEJpbmFyeSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiaGV4QmluYXJ5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBoZXhCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gVGhlIGhleEJpbmFyeSBzdG9yZWQ8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTRhMTU0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSUQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0lEPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNJRDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWU8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJRCI+WFNJRDwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJRCI+WFNJRDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0lEIj5YU0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNJRDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNJRCI+WFNJRDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSUQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRFJFRi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRFJFRi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzI4NzI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSURSRUYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0lEUkVGPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNJRFJFRjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWU8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJRFJFRiI+WFNJRFJFRjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJRFJFRiI+WFNJRFJFRjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0lEUkVGIj5YU0lEUkVGPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNJRFJFRjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNJRFJFRiI+WFNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSURSRUY8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ODQ2YmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0ludDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTSW50PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmc8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJbnQiPlhTSW50PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0ludCI+WFNJbnQ8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdpbnQnIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNJbnQiPlhTSW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNJbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTSW50Ij5YU0ludDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSW50PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBpbnQgdmFsdWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgJ2ludCcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgaW50IGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnaW50JyBzdXBwbGllZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6aW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImludCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWRlN2YzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTSW50ZWdlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTSW50ZWdlcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEZWNpbWFsPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgSW50ZWdlciBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0ludGVnZXIiPlhTSW50ZWdlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJbnRlZ2VyIj5YU0ludGVnZXI8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FicyI+YWJzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWJzb2x1dGVzIHRoZSBpbnRlZ2VyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgaW50ZWdlciBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb252ZXJ0QXJnIj5jb252ZXJ0QXJnPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXYiPmRpdjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ndCI+Z3Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5tYXRoLkJpZ0ludGVnZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW50X3ZhbHVlIj5pbnRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2x0Ij5sdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWludXMiPm1pbnVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vZCI+bW9kPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0ludGVnZXIgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGx1cyI+cGx1czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X2ludCI+c2V0X2ludDwvYT4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXRzIHRoZSBpbnRlZ2VyIHN0b3JlZCB0byB0aGF0IHN1cHBsaWVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50ZWdlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWVzIj50aW1lczwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdW5hcnlfbWludXMiPnVuYXJ5X21pbnVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTmVnYXRlcyB0aGUgaW50ZWdlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF96ZXJvIj56ZXJvPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgd2hldGhlciB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBpcyAwPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNJbnRlZ2VyIj5YU0ludGVnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0ludGVnZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTSW50ZWdlciI+WFNJbnRlZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNJbnRlZ2VyPC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBpbnRlZ2VyPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWJzIj5hYnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+YWJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFic29sdXRlcyB0aGUgaW50ZWdlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBOZXcgWFNJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgb2YgdGhlIGludGVnZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBpbnRlZ2VyIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGludGVnZXIgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnZlcnRBcmciPmNvbnZlcnRBcmc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5jb252ZXJ0QXJnPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXYiPmRpdjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5kaXY8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ3QiPmd0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5ndDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbnRfdmFsdWUiPmludF92YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLm1hdGguQmlnSW50ZWdlciA8c3Ryb25nPmludF92YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5tYXRoLkJpZ0ludGVnZXI8L2NvZGU+IC0gVGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sdCI+bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmx0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21pbnVzIj5taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5taW51czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0ludGVnZXIgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsICAgICAgICAgIHN1YnRyYWN0aW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbW9kIj5tb2Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+bW9kPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wbHVzIj5wbHVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnBsdXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgYWRkaXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfaW50Ij5zZXRfaW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfaW50PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5TZXRzIHRoZSBpbnRlZ2VyIHN0b3JlZCB0byB0aGF0IHN1cHBsaWVkPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54PC9jb2RlPiAtIEludGVnZXIgdG8gYmUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50ZWdlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXMiPnRpbWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnRpbWVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgbXVsdGlwbGljYXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJpbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz51bmFyeV9taW51czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5OZWdhdGVzIHRoZSBpbnRlZ2VyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBYU0ludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgaW50ZWdlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfemVybyI+emVybzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+emVybzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayB3aGV0aGVyIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGlzIDA8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpcyB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBpcyAwLiBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNMb25nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkxNGQ1My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xvbmc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xvbmc8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xvbmciPlhTTG9uZzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMb25nIj5YU0xvbmc8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGxvbmcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xvbmciPlhTTG9uZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTG9uZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNMb25nIj5YU0xvbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xvbmc8L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGxvbmcgdmFsdWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbG9uZyBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBsb25nIGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbG9uZycgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmxvbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAibG9uZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05DTmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRlNjllOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05DTmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTkNOYW1lPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNOQ05hbWU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTkNOYW1lIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTkNOYW1lIj5YU05DTmFtZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNOQ05hbWUiPlhTTkNOYW1lPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIE5DTmFtZSB3aXRoaW4KLSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU05DTmFtZSI+WFNOQ05hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU05DTmFtZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTTkNOYW1lIj5YU05DTmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTkNOYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHRvIG51bGw8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgTkNOYW1lIHdpdGhpbgotIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIE5DTmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBOQ05hbWUgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOk5DTmFtZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJOQ05hbWUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOZWdhdGl2ZUludGVnZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTmVnYXRpdmVJbnRlZ2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNTgzNDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOZWdhdGl2ZUludGVnZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU05lZ2F0aXZlSW50ZWdlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTmVnYXRpdmVJbnRlZ2VyPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU05lZ2F0aXZlSW50ZWdlciI+WFNOZWdhdGl2ZUludGVnZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTmVnYXRpdmVJbnRlZ2VyIj5YU05lZ2F0aXZlSW50ZWdlcjwvYT48L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbmVnYXRpdmVJbnRlZ2VyCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNOZWdhdGl2ZUludGVnZXIiPlhTTmVnYXRpdmVJbnRlZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNOZWdhdGl2ZUludGVnZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAtMTwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU05lZ2F0aXZlSW50ZWdlciI+WFNOZWdhdGl2ZUludGVnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU05lZ2F0aXZlSW50ZWdlcjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbmVnYXRpdmVJbnRlZ2VyIHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIG5lZ2F0aXZlSW50ZWdlcgotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBuZWdhdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICduZWdhdGl2ZUludGVnZXInIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpuZWdhdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAibmVnYXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vbk5lZ2F0aXZlSW50ZWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDY3NDhmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNOb25OZWdhdGl2ZUludGVnZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU05vbk5lZ2F0aXZlSW50ZWdlcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTm9uTmVnYXRpdmVJbnRlZ2VyIj5YU05vbk5lZ2F0aXZlSW50ZWdlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNOb25OZWdhdGl2ZUludGVnZXIiPlhTTm9uTmVnYXRpdmVJbnRlZ2VyPC9hPjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBub25OZWdhdGl2ZUludGVnZXIKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU05vbk5lZ2F0aXZlSW50ZWdlciI+WFNOb25OZWdhdGl2ZUludGVnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU05vbk5lZ2F0aXZlSW50ZWdlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNOb25OZWdhdGl2ZUludGVnZXIiPlhTTm9uTmVnYXRpdmVJbnRlZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNOb25OZWdhdGl2ZUludGVnZXI8L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG5vbk5lZ2F0aXZlSW50ZWdlciB2YWx1ZTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBub25OZWdhdGl2ZUludGVnZXIKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbm9uTmVnYXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbm9uTmVnYXRpdmVJbnRlZ2VyJyBzdXBwbGllZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gIm5vbk5lZ2F0aXZlSW50ZWdlciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25Qb3NpdGl2ZUludGVnZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU5MTljZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTm9uUG9zaXRpdmVJbnRlZ2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNOb25Qb3NpdGl2ZUludGVnZXI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU05vblBvc2l0aXZlSW50ZWdlciI+WFNOb25Qb3NpdGl2ZUludGVnZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTm9uUG9zaXRpdmVJbnRlZ2VyIj5YU05vblBvc2l0aXZlSW50ZWdlcjwvYT48L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbm9uUG9zaXRpdmVJbnRlZ2VyCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNOb25Qb3NpdGl2ZUludGVnZXIiPlhTTm9uUG9zaXRpdmVJbnRlZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNOb25Qb3NpdGl2ZUludGVnZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTTm9uUG9zaXRpdmVJbnRlZ2VyIj5YU05vblBvc2l0aXZlSW50ZWdlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTm9uUG9zaXRpdmVJbnRlZ2VyPC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBub25Qb3NpdGl2ZUludGVnZXIgdmFsdWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbm9uUG9zaXRpdmVJbnRlZ2VyCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5vblBvc2l0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ25vblBvc2l0aXZlSW50ZWdlcicgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOm5vblBvc2l0aXZlSW50ZWdlciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJub25Qb3NpdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb3RhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb3RhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWZhYWEwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm90YXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU05vdGF0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNOb3RhdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU05vdGF0aW9uIj5YU05vdGF0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNOb3RhdGlvbiI+WFNOb3RhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTm90YXRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTUG9zaXRpdmVJbnRlZ2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Bvc2l0aXZlSW50ZWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTM4MjljLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTUG9zaXRpdmVJbnRlZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNQb3NpdGl2ZUludGVnZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1Bvc2l0aXZlSW50ZWdlcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25OZWdhdGl2ZUludGVnZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNQb3NpdGl2ZUludGVnZXIiPlhTUG9zaXRpdmVJbnRlZ2VyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1Bvc2l0aXZlSW50ZWdlciI+WFNQb3NpdGl2ZUludGVnZXI8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHBvc2l0aXZlSW50ZWdlcgotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTUG9zaXRpdmVJbnRlZ2VyIj5YU1Bvc2l0aXZlSW50ZWdlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTUG9zaXRpdmVJbnRlZ2VyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMTwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1Bvc2l0aXZlSW50ZWdlciI+WFNQb3NpdGl2ZUludGVnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1Bvc2l0aXZlSW50ZWdlcjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgcG9zaXRpdmVJbnRlZ2VyIHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHBvc2l0aXZlSW50ZWdlcgotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBwb3NpdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdwb3NpdGl2ZUludGVnZXInIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpwb3NpdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAicG9zaXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU2hvcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU2hvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ4ODFkZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Nob3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNTaG9ydDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTU2hvcnQ8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTU2hvcnQiPlhTU2hvcnQ8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTU2hvcnQiPlhTU2hvcnQ8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdzaG9ydCcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU1Nob3J0Ij5YU1Nob3J0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNTaG9ydDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNTaG9ydCI+WFNTaG9ydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTU2hvcnQ8L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHNob3J0IHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdzaG9ydCcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgc2hvcnQgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdzaG9ydCcgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOnNob3J0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInNob3J0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjBlZGJmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNTdHJpbmc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1N0cmluZzwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFN0cmluZyBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1N0cmluZyI+WFNTdHJpbmc8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTU3RyaW5nIj5YU1N0cmluZzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBTdHJpbmcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIFN0cmluZzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2d0Ij5ndDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2ggbXVzdCBiZSBvZgotIHR5cGUgU3RyaW5nPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbHQiPmx0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaCBtdXN0IGJlIG9mCi0gdHlwZSBTdHJpbmc8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdHJpbmcgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdmFsdWUoKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmluZyBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTU3RyaW5nIj5YU1N0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTU3RyaW5nPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmc8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNTdHJpbmciPlhTU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNTdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gbnVsbDwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBTdHJpbmcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBTdHJpbmc8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgU3RyaW5nPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLSBtdXN0IGJlIG9mIHR5cGUgU3RyaW5nPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UgICAgICAgICAgb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2ggbXVzdCBiZSBvZgotIHR5cGUgU3RyaW5nPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoaXMgU3RyaW5nIGlzIGxleG9ncmFwaGljYWxseSBncmVhdGVyIHRoYW4gdGhhdCAgICAgICAgICBzdXBwbGllZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sdCI+bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmx0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2ggbXVzdCBiZSBvZgotIHR5cGUgU3RyaW5nPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoaXMgU3RyaW5nIGlzIGxleG9ncmFwaGljYWxseSBsZXNzIHRoYW4gdGhhdCBzdXBwbGllZC4gICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpzdHJpbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmluZyBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFRoZSBTdHJpbmcgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInN0cmluZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RyaW5nIHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZ192YWx1ZSgpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFRoZSBTdHJpbmcgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Yzk1ODYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNUaW1lPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNUaW1lPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUaW1lIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVGltZSI+WFNUaW1lPC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVGltZSI+WFNUaW1lPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRpbWUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2xvbmUiPmNsb25lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRoZSB0aW1lIChhbmQgdGltZXpvbmUpIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBmcm9tIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBYU1RpbWUgcmVwcmVzZW50YXRpb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ndCI+Z3Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaG91ciI+aG91cjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgaG91ciBzdG9yZWQgYXMgYW4gaW50ZWdlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2x0Ij5sdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgWFNUaW1lIHJlcHJlc2VudGF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9taW51cyI+bWludXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIGJldHdlZW4gdGhpcyB0aW1lIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gcmVwcmVzZW50YXRpb24uIFRoaXMgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiBlaXRoZXIgdHlwZQotIFhTVGltZSAoaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0IGlzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlc2UKLSB0d28gdGltZXMpIG9yIGEgWERURGF5VGltZUR1cmF0aW9uIChpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgdGhlIHRpbWUKLSB3aGVuIHRoaXMgZHVyYXRpb24gaXMgc3VidHJhY3RlZCBmcm9tIHRoZSB0aW1lIHN0b3JlZCkuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9taW51dGUiPm1pbnV0ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbWludXRlIHN0b3JlZCBhcyBhbiBpbnRlZ2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX3RpbWUiPnBhcnNlX3RpbWU8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgU3RyaW5nIHJlcHJlc2VudGVkIHN1cHBsaWVkIHRpbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BsdXMiPnBsdXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGFkZGl0aW9uIGJldHdlZW4gdGhpcyB0aW1lIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkIHRpbWUKLSBkdXJhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgZG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlY29uZCI+c2Vjb25kPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBzZWNvbmRzIHN0b3JlZCBhcyBhbiBpbnRlZ2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIGZvciB3aGV0aGVyIHRoZSB0aW1lIHN0b3JlZCBoYXMgYSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggaXQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R6Ij50ejwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0aW1lIHN0b3JlZCBhcyBhIGR1cmF0aW9uIG9mCi0gdGltZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBkb3VibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2g8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU1RpbWUiPlhTVGltZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTVGltZTwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHRvIHRoZSBzdXBwbGllZCB0aW1lIGFuZCB0aW1lem9uZTwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1RpbWUiPlhTVGltZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTVGltZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB0byB0aGUgY3VycmVudCB0aW1lPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2FsZW5kYXIiPmNhbGVuZGFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhciA8c3Ryb25nPmNhbGVuZGFyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+IC0gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Nsb25lIj5jbG9uZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+Y2xvbmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRoZSB0aW1lIChhbmQgdGltZXpvbmUpIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBOZXcgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgY29weSBvZiB0aGUgdGltZSBhbmQgdGltZXpvbmU8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHRpbWUgZnJvbSB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIHRpbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgdGltZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgYm90aCBYU1RpbWUncyByZXByZXNlbnQgdGhlIHNhbWUgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgWFNUaW1lIHJlcHJlc2VudGF0aW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFhTVGltZSB0byBjb21wYXJlIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNudHMgYSBwb2ludCBpbiB0aW1lIGJlZm9yZSB0aGF0ICAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ob3VyIj5ob3VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmhvdXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBob3VyIHN0b3JlZCBhcyBhbiBpbnRlZ2VyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gVGhlIGhvdXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2x0Ij5sdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBYU1RpbWUgcmVwcmVzZW50YXRpb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgWFNUaW1lIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc250cyBhIHBvaW50IGluIHRpbWUgYWZ0ZXIgdGhhdCAgICAgICAgICByZXByZXNlbnRlZCBieSB0aGUgdGltZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWludXMiPm1pbnVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPm1pbnVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gYmV0d2VlbiB0aGlzIHRpbWUgc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSByZXByZXNlbnRhdGlvbi4gVGhpcyBzdXBwbGllZCByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIGVpdGhlciB0eXBlCi0gWFNUaW1lIChpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiB0aGVzZQotIHR3byB0aW1lcykgb3IgYSBYRFREYXlUaW1lRHVyYXRpb24gKGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyB0aGUgdGltZQotIHdoZW4gdGhpcyBkdXJhdGlvbiBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIHRpbWUgc3RvcmVkKS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgcmVwcmVzZW50YXRpb24gdG8gc3VidHJhY3QgKGVpdGhlciBYU1RpbSBvciAgICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24pPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21pbnV0ZSI+bWludXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPm1pbnV0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG1pbnV0ZSBzdG9yZWQgYXMgYW4gaW50ZWdlcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFRoZSBtaW51dGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlX3RpbWUiPnBhcnNlX3RpbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZSA8c3Ryb25nPnBhcnNlX3RpbWU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFhTVGltZSByZXByZXNlbnRpbmcgdGhlIFN0cmluZyByZXByZXNlbnRlZCBzdXBwbGllZCB0aW1lPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGVkIHRpbWUgYW5kIHRpbWV6b25lIHRvIGJlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZTwvY29kZT4gLSBOZXcgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgc3VwcGxpZWQgdGltZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wbHVzIj5wbHVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnBsdXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBhZGRpdGlvbiBiZXR3ZWVuIHRoaXMgdGltZSBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZCB0aW1lCi0gZHVyYXRpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gQSBYRFREYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gICAgICAgICAgICAgYWRkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhpcyBhZGRpdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlY29uZCI+c2Vjb25kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGRvdWJsZSA8c3Ryb25nPnNlY29uZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIHNlY29uZHMgc3RvcmVkIGFzIGFuIGludGVnZXI8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmRvdWJsZTwvY29kZT4gLSBUaGUgc2Vjb25kIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czp0aW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz50aW1lem9uZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2hlY2sgZm9yIHdoZXRoZXIgdGhlIHRpbWUgc3RvcmVkIGhhcyBhIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0aW1lIGhhcyBhIHRpbWV6b25lIGFzc29jaWF0ZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ0aW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R6Ij50ejwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiA8c3Ryb25nPnR6PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0aW1lIHN0b3JlZCBhcyBhIGR1cmF0aW9uIG9mCi0gdGltZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+IC0gVGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiB0aGUgdGltZSBzdG9yZWQgYW5kIHRoZSBhY3R1YWwgdGltZSAgICAgICAgICBhZnRlciB0aGUgdGltZXpvbmUgaXMgdGFrZW4gaW50byBhY2NvdW50PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz52YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+ZG91YmxlPC9jb2RlPiAtIHRpbWUgc3RvcmVkIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2g8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEJ5dGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRCeXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0OGFlYTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEJ5dGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU1Vuc2lnbmVkQnl0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTVW5zaWduZWRCeXRlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkU2hvcnQ8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNVbnNpZ25lZEJ5dGUiPlhTVW5zaWduZWRCeXRlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1Vuc2lnbmVkQnl0ZSI+WFNVbnNpZ25lZEJ5dGU8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkQnl0ZQotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTVW5zaWduZWRCeXRlIj5YU1Vuc2lnbmVkQnl0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTVW5zaWduZWRCeXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1Vuc2lnbmVkQnl0ZSI+WFNVbnNpZ25lZEJ5dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1Vuc2lnbmVkQnl0ZTwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgdW5zaWduZWRCeXRlIHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkQnl0ZQotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZEJ5dGUgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZEJ5dGUnIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czp1bnNpZ25lZEJ5dGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAidW5zaWduZWRCeXRlIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRJbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRJbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJiNzIyMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkSW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNVbnNpZ25lZEludDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTVW5zaWduZWRJbnQ8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRMb25nPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVW5zaWduZWRJbnQiPlhTVW5zaWduZWRJbnQ8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVW5zaWduZWRJbnQiPlhTVW5zaWduZWRJbnQ8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkSW50Ci0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNVbnNpZ25lZEludCI+WFNVbnNpZ25lZEludDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTVW5zaWduZWRJbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTVW5zaWduZWRJbnQiPlhTVW5zaWduZWRJbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1Vuc2lnbmVkSW50PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZEludCB2YWx1ZTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZEludAotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZEludCBpcyB0byBiZSBleHRyYWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ3Vuc2lnbmVkSW50JyBzdXBwbGllZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6dW5zaWduZWRJbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAidW5zaWduZWRJbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZExvbmcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRMb25nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOGEzYWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZExvbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU1Vuc2lnbmVkTG9uZzwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTVW5zaWduZWRMb25nPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vbk5lZ2F0aXZlSW50ZWdlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1Vuc2lnbmVkTG9uZyI+WFNVbnNpZ25lZExvbmc8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVW5zaWduZWRMb25nIj5YU1Vuc2lnbmVkTG9uZzwvYT48L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRMb25nCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNVbnNpZ25lZExvbmciPlhTVW5zaWduZWRMb25nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNVbnNpZ25lZExvbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTVW5zaWduZWRMb25nIj5YU1Vuc2lnbmVkTG9uZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTVW5zaWduZWRMb25nPC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZExvbmcgdmFsdWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRMb25nCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkTG9uZyBpcyB0byBiZSBleHRyYWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ3Vuc2lnbmVkTG9uZycgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOnVuc2lnbmVkTG9uZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ1bnNpZ25lZExvbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZFNob3J0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkU2hvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZiOWE4ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkU2hvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU1Vuc2lnbmVkU2hvcnQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1Vuc2lnbmVkU2hvcnQ8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRJbnQ8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNVbnNpZ25lZFNob3J0Ij5YU1Vuc2lnbmVkU2hvcnQ8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVW5zaWduZWRTaG9ydCI+WFNVbnNpZ25lZFNob3J0PC9hPjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZFNob3J0Ci0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNVbnNpZ25lZFNob3J0Ij5YU1Vuc2lnbmVkU2hvcnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1Vuc2lnbmVkU2hvcnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTVW5zaWduZWRTaG9ydCI+WFNVbnNpZ25lZFNob3J0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNVbnNpZ25lZFNob3J0PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZFNob3J0IHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkU2hvcnQKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRTaG9ydCBpcyB0byBiZSBleHRyYWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ3Vuc2lnbmVkU2hvcnQnIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czp1bnNpZ25lZFNob3J0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInVuc2lnbmVkU2hvcnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1VudHlwZWRBdG9taWMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiMTk2Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1VudHlwZWRBdG9taWMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU1VudHlwZWRBdG9taWM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1VudHlwZWRBdG9taWM8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVbnR5cGVkQXRvbWljIGRhdGF0eXBlIHdoaWNoIGlzIHVzZWQgdG8gcmVwcmVzZW50Ci0gdW50eXBlZCBhdG9taWMgbm9kZXMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVW50eXBlZEF0b21pYyI+WFNVbnR5cGVkQXRvbWljPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1VudHlwZWRBdG9taWMiPlhTVW50eXBlZEF0b21pYzwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhpcyB1bnR5cGVkIGF0b21pYwotIG5vZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTVW50eXBlZEF0b21pYyI+WFNVbnR5cGVkQXRvbWljPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNVbnR5cGVkQXRvbWljPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1VudHlwZWRBdG9taWMiPlhTVW50eXBlZEF0b21pYzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTVW50eXBlZEF0b21pYzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOnVudHlwZWRBdG9taWMiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoaXMgdW50eXBlZCBhdG9taWMKLSBub2RlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhpcyB1bnR5cGVkIGF0b21pYyBub2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1llYXJNb250aER1cmF0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1llYXJNb250aER1cmF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OTE3OGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNZZWFyTW9udGhEdXJhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTWWVhck1vbnRoRHVyYXRpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1llYXJNb250aER1cmF0aW9uPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgWWVhck1vbnRoRHVyYXRpb24gZGF0YXR5cGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNZZWFyTW9udGhEdXJhdGlvbiI+WFNZZWFyTW9udGhEdXJhdGlvbjwvYT48L3N0cm9uZz4oaW50IHllYXIKLSAgICAgICAgICwKLSAgICAgIGludCBtb250aAotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBuZWdhdGl2ZSk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTWWVhck1vbnRoRHVyYXRpb24iPlhTWWVhck1vbnRoRHVyYXRpb248L2E+PC9zdHJvbmc+KGludCBtb250aHMpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1llYXJNb250aER1cmF0aW9uIj5YU1llYXJNb250aER1cmF0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHRpbWUgZHVyYXRpb24KLSBmcm9tIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGl2Ij5kaXY8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGRpdmlzaW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbik8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2x0Ij5sdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21pbnVzIj5taW51czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbW9udGhWYWx1ZSI+bW9udGhWYWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQgYXMgdGhlIG51bWJlciBvZiBtb250aHMgd2l0aGluIGl0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmVnYXRpdmUiPm5lZ2F0aXZlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHdoZXRoZXIgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoCi0gdGltZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VZTUR1cmF0aW9uIj5wYXJzZVlNRHVyYXRpb248L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgWFNZZWFyTW9udGhEdXJhdGlvbiBieSBwYXJzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLSByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wbHVzIj5wbHVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWVzIj50aW1lczwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cml2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTWWVhck1vbnRoRHVyYXRpb24iPlhTWWVhck1vbnRoRHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1llYXJNb250aER1cmF0aW9uPC9zdHJvbmc+KGludCB5ZWFyCi0gICAgICAgICAsCi0gICAgICBpbnQgbW9udGgKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gbmVnYXRpdmUpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycy4gSWYgdGhlIG51bWJlciBvZiBtb250aHMKLSBzdXBwbGllZCBpcyBtb3JlIHRoYW4gMTIsIHRoZSBudW1iZXIgb2YgeWVhcnMgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTWWVhck1vbnRoRHVyYXRpb24iPlhTWWVhck1vbnRoRHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1llYXJNb250aER1cmF0aW9uPC9zdHJvbmc+KGludCBtb250aHMpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1vbnRoczwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1llYXJNb250aER1cmF0aW9uIj5YU1llYXJNb250aER1cmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNZZWFyTW9udGhEdXJhdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB0byBhIGR1cmF0aW9uIG9mIG5vIHRpbWUgKDB5ZWFycyBhbmQgMG1vbnRocyk8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBkdXJhdGlvbgotIGZyb20gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0aW1lIGR1cmF0aW9uIGV4dHJhY3RlZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGl2Ij5kaXY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZGl2PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgZGl2aXNpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGRpdmlkZSBieTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uICAgICAgICAgIGFmdGVyIHRoZSBkaXZpc2lvbjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgZHVyYXRpb24gb2YgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgc21hbGxlciBkdXJhdGlvbiB0aGFuIHRoYXQgICAgICAgICAgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2x0Ij5sdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBsYXJnZXIgZHVyYXRpb24gdGhhbiB0aGF0ICAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taW51cyI+bWludXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+bWludXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gc3VidHJhY3Q8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiAgICAgICAgICBhZnRlciB0aGUgc3VidHJhY3Rpb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21vbnRoVmFsdWUiPm1vbnRoVmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bW9udGhWYWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkIGFzIHRoZSBudW1iZXIgb2YgbW9udGhzIHdpdGhpbiBpdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIE51bWJlciBvZiBtb250aHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZWdhdGl2ZSI+bmVnYXRpdmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPm5lZ2F0aXZlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaAotIHRpbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2ggdGltZS4gICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlWU1EdXJhdGlvbiI+cGFyc2VZTUR1cmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIDxzdHJvbmc+cGFyc2VZTUR1cmF0aW9uPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBYU1llYXJNb250aER1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+IC0gTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBkdXJhdGlvbiBvZiB0aW1lICAgICAgICAgIHN1cHBsaWVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BsdXMiPnBsdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+cGx1czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbik8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBhZGQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiAgICAgICAgICBhZnRlciB0aGUgYWRkaXRpb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOnllYXJNb250aER1cmF0aW9uIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RpbWVzIj50aW1lczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz50aW1lczwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbik8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBtdWx0aXBseSBieTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uICAgICAgICAgIGFmdGVyIHRoZSBtdWx0aXBsaWNhdGlvbjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ5ZWFyTW9udGhEdXJhdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWwueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvamVsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc0YjA5Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTg0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGplbD4KLQk8YWRtaW4gY3JlYXRpb249IlRodSBBdWcgMjcgMDE6MTY6MTMgR01UIDIwMDkiIHhzZHZlcnNpb249IjEuMC4wIiB2ZXJzaW9uPSIxLjAuMCIgLz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUJ1aWxkZXIiIHR5cGU9IkRPTUJ1aWxkZXIiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIiIHR5cGU9IkRPTUxvYWRlciIgLz4KLQkJPC9pbXBsZW1lbnRzPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgRE9NIGJ1aWxkZXIgbG9hZHMgYW4gRE9NIGZyb20gYW4gSW5wdXRTdHJlYW0uIFRoZSBsb2FkaW5nIGlzIGFsd2F5cyBuYW1lc3BhY2UgYXdhcmUuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgbmFtZT0iX3ZhbGlkYXRpbmciIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgbmFtZT0iX25hbWVzcGFjZV9hd2FyZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRPTUJ1aWxkZXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIERPTSBidWlsZGVyLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsb2FkIiByZXR1cm5jb21tZW50PSJUaGUgbG9hZGVkIGRvY3VtZW50LiIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLkRvY3VtZW50IiB0eXBlPSJEb2N1bWVudCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Mb2FkcyBUaGUgWE1MIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pbgotICAgICAgICAgICAgaXMgdGhlIGlucHV0IHN0cmVhbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ET01Mb2FkZXJFeGNlcHRpb24KLSAgICAgICAgICAgICBET00gbG9hZGVyIGV4Y2VwdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgbG9hZGVkIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaW4iIGNvbW1lbnQ9ImlzIHRoZSBpbnB1dCBzdHJlYW0uIiBmdWxsdHlwZT0iamF2YS5pby5JbnB1dFN0cmVhbSIgdHlwZT0iSW5wdXRTdHJlYW0iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iRE9NIGxvYWRlciBleGNlcHRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUxvYWRlckV4Y2VwdGlvbiIgdHlwZT0iRE9NTG9hZGVyRXhjZXB0aW9uIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF92YWxpZGF0aW5nIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgdmFsaWRhdGluZyBib29sZWFuLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBpbnRlcmZhY2U9InRydWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyIiB0eXBlPSJET01Mb2FkZXIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgRE9NIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibG9hZCIgcmV0dXJuY29tbWVudD0iVGhlIGxvYWRlZCBkb2N1bWVudC4gVGhlIGRvY3VtZW50IGlzIGFsd2F5cyBsb2FkZWQgYXMgbmFtZXNwYWNlLWF3YXJlIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uRG9jdW1lbnQiIHR5cGU9IkRvY3VtZW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBET00gbG9hZGVyIGxvYWRzIHRoZSBYTUwgZG9jdWVtbnQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aW4KLSAgICAgICAgICAgIGlzIHRoZSBpbnB1dCBzdHJlYW0uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RE9NTG9hZGVyRXhjZXB0aW9uCi0gICAgICAgICAgICAgRE9NIGxvYWRlciBleGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGxvYWRlZCBkb2N1bWVudC4gVGhlIGRvY3VtZW50IGlzIGFsd2F5cyBsb2FkZWQgYXMgbmFtZXNwYWNlLWF3YXJlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpbiIgY29tbWVudD0iaXMgdGhlIGlucHV0IHN0cmVhbS4iIGZ1bGx0eXBlPSJqYXZhLmlvLklucHV0U3RyZWFtIiB0eXBlPSJJbnB1dFN0cmVhbSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSJET00gbG9hZGVyIGV4Y2VwdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uIiB0eXBlPSJET01Mb2FkZXJFeGNlcHRpb24iIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X3ZhbGlkYXRpbmciIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCB2YWxpZGF0aW5nIGJvb2xlYW4uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhbAotICAgICAgICAgICAgaXMgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InZhbCIgY29tbWVudD0iaXMgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbi4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYUGF0aEV4Y2VwdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uIiB0eXBlPSJET01Mb2FkZXJFeGNlcHRpb24iPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5FeGNlcHRpb24gY2F1c2VkIGJ5IERPTSBsb2FkZXIuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRPTUxvYWRlckV4Y2VwdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRE9NIGxvYWRlciBleGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJlYXNvbgotICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGV4Y2VwdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJlYXNvbiIgY29tbWVudD0iaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGV4Y2VwdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iRGVmYXVsdFN0YXRpY0NvbnRleHQiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzdXBlcmNsYXNzZnVsbHR5cGU9IkRlZmF1bHRTdGF0aWNDb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dCIgdHlwZT0iRGVmYXVsdER5bmFtaWNDb250ZXh0Ij4KLQkJPGltcGxlbWVudHM+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQk8L2ltcGxlbWVudHM+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGEgRHluYW1pYyBDb250ZXh0LgotIAotIEluaXRpYWxpemVzIGFuZCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IG9mIGEgZHluYW1pYyBjb250ZXh0IGFjY29yZGluZyB0byB0aGUKLSBYUGF0aCAyLjAgc3BlY2lmaWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRGVmYXVsdER5bmFtaWNDb250ZXh0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zY2hlbWEKLSAgICAgICAgICAgIFNjaGVtYSBpbmZvcm1hdGlvbiBvZiBkb2N1bWVudC4gTWF5IGJlIG51bGw8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmRvYwotICAgICAgICAgICAgRG9jdW1lbnQgW3Jvb3RdIG5vZGUgb2YgWE1MIHNvdXJjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InNjaGVtYSIgY29tbWVudD0iU2NoZW1hIGluZm9ybWF0aW9uIG9mIGRvY3VtZW50LiBNYXkgYmUgbnVsbCIgZnVsbHR5cGU9IlhTTW9kZWwiIHR5cGU9IlhTTW9kZWwiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJkb2MiIGNvbW1lbnQ9IkRvY3VtZW50IFtyb290XSBub2RlIG9mIFhNTCBzb3VyY2UuIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uRG9jdW1lbnQiIHR5cGU9IkRvY3VtZW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eiIgcmV0dXJuY29tbWVudD0iYW4geHM6aW50ZWdlciBfdHoiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZWFkcyB0aGUgZGF5IGZyb20gYSBUaW1lRHVyYXRpb24gdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YW4geHM6aW50ZWdlciBfdHo8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImN1cnJlbnRfZGF0ZV90aW1lIiBmdWxsdHlwZT0iamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyIiB0eXBlPSJHcmVnb3JpYW5DYWxlbmRhciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXRzIHRoZSBDdXJyZW50IHN0YWJsZSBkYXRlIHRpbWUgZnJvbSB0aGUgZHluYW1pYyBjb250ZXh0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2VlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQjZ2V0X2N1cnJlbnRfdGltZSgpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X2ZvY3VzIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGFuZ2VzIHRoZSBjdXJyZW50IGZvY3VzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5mCi0gICAgICAgICAgICBmb2N1cyB0byBzZXQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImYiIGNvbW1lbnQ9ImZvY3VzIHRvIHNldCIgZnVsbHR5cGU9IkZvY3VzIiB0eXBlPSJGb2N1cyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImZvY3VzIiByZXR1cm5jb21tZW50PSJfZm9jdXMiIGZ1bGx0eXBlPSJGb2N1cyIgdHlwZT0iRm9jdXMiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJuIHRoZSBmb2N1czwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+X2ZvY3VzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29udGV4dF9pdGVtIiByZXR1cm5jb21tZW50PSJhbiBBbnlUeXBlIHJlc3VsdCBmcm9tIF9mb2N1cy5jb250ZXh0X2l0ZW0oKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIGNvbnRleHQgaXRlbSB0aGF0IGlzIGluIGZvY3VzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbiBBbnlUeXBlIHJlc3VsdCBmcm9tIF9mb2N1cy5jb250ZXh0X2l0ZW0oKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnRleHRfcG9zaXRpb24iIHJldHVybmNvbW1lbnQ9ImFuIGludGVnZXIgcmVzdWx0IGZyb20gX2ZvY3VzLnBvc2l0aW9uKCkiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGZvY3VzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbiBpbnRlZ2VyIHJlc3VsdCBmcm9tIF9mb2N1cy5wb3NpdGlvbigpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibGFzdCIgcmV0dXJuY29tbWVudD0iYW4gaW50ZWdlciByZXN1bHQgZnJvbSBfZm9jdXMubGFzdCgpIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGZvY3VzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbiBpbnRlZ2VyIHJlc3VsdCBmcm9tIF9mb2N1cy5sYXN0KCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfdmFyaWFibGUiIHJldHVybmNvbW1lbnQ9ImFuIEFueVR5cGUgcmVzdWx0IGZyb20gZ2V0X3ZhcihuYW1lKSBvciByZXR1cm4gTlVMTCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIHRoZSB2YXJpYWJsZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbiBBbnlUeXBlIHJlc3VsdCBmcm9tIGdldF92YXIobmFtZSkgb3IgcmV0dXJuIE5VTEw8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXZhbHVhdGVfZnVuY3Rpb24iIHJldHVybmNvbW1lbnQ9ImEgUmVzdWx0U2VxdWVuY2UgZnJvbSBmdW5jdC5ldmFsdWF0ZShhcmdzKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgUmVzdWx0U2VxdWVuY2UgZnJvbSBmdW5jdC5ldmFsdWF0ZShhcmdzKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmdzIiBmdWxsdHlwZT0iamF2YS51dGlsLkNvbGxlY3Rpb24iIHR5cGU9IkNvbGxlY3Rpb24iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhZGRfZnVuY3Rpb25fbGlicmFyeSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QWRkcyBmdW5jdGlvbiBkZWZpbml0aW9ucy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZmwKLSAgICAgICAgICAgIEZ1bmN0aW9uIGxpYnJhcnkgdG8gYWRkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZmwiIGNvbW1lbnQ9IkZ1bmN0aW9uIGxpYnJhcnkgdG8gYWRkLiIgZnVsbHR5cGU9IkZ1bmN0aW9uTGlicmFyeSIgdHlwZT0iRnVuY3Rpb25MaWJyYXJ5IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0X2RvYyIgcmV0dXJuY29tbWVudD0iYSBSZXN1bHRTZXF1ZW5jZSBmcm9tIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmdldCBkb2N1bWVudDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBSZXN1bHRTZXF1ZW5jZSBmcm9tIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icmVzb2x2ZWQiIGZ1bGx0eXBlPSJqYXZhLm5ldC5VUkkiIHR5cGU9IlVSSSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlc29sdmVfdXJpIiBmdWxsdHlwZT0iamF2YS5uZXQuVVJJIiB0eXBlPSJVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ1cmkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfdmFyaWFibGUiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldHMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhcgotICAgICAgICAgICAgVmFyaWFibGUgbmFtZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhbAotICAgICAgICAgICAgVmFyaWFibGUgdmFsdWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YXIiIGNvbW1lbnQ9IlZhcmlhYmxlIG5hbWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InZhbCIgY29tbWVudD0iVmFyaWFibGUgdmFsdWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yIiB0eXBlPSJEZWZhdWx0RXZhbHVhdG9yIj4KLQkJPGltcGxlbWVudHM+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRXZhbHVhdG9yIiB0eXBlPSJFdmFsdWF0b3IiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+RGVmYXVsdCBldmFsdWF0b3IgaW50ZXJmYWNlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRlZmF1bHRFdmFsdWF0b3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+c2V0IHBhcmFtZXRlcnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZGMKLSAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kb2MKLSAgICAgICAgICAgIGlzIHRoZSBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRjIiBjb21tZW50PSJpcyB0aGUgZHluYW1pYyBjb250ZXh0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJkb2MiIGNvbW1lbnQ9ImlzIHRoZSBkb2N1bWVudC4iIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5Eb2N1bWVudCIgdHlwZT0iRG9jdW1lbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImV2YWx1YXRlIiByZXR1cm5jb21tZW50PSJyZXN1bHQgc2VxdWVuY2UuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5ldmFsdWF0ZSB0aGUgeHBhdGggbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ub2RlCi0gICAgICAgICAgICBpcyB0aGUgeHBhdGggbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5keW5hbWljCi0gICAgICAgICAgICAgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVzdWx0IHNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZSIgY29tbWVudD0iaXMgdGhlIHhwYXRoIG5vZGUuIiBmdWxsdHlwZT0iWFBhdGhOb2RlIiB0eXBlPSJYUGF0aE5vZGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0icmVzdWx0IHNlcXVlbmNlLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5pdGVyYXRlIHRocm91Z2ggeHBhdGggZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54cAotICAgICAgICAgICAgaXMgdGhlIHhwYXRoLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJlc3VsdCBzZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InhwIiBjb21tZW50PSJpcyB0aGUgeHBhdGguIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCIgdHlwZT0iWFBhdGgiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGZvciBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmZleAotICAgICAgICAgICAgaXMgdGhlIGZvciBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZmV4IiBjb21tZW50PSJpcyB0aGUgZm9yIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iRm9yRXhwciIgdHlwZT0iRm9yRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiBvciBudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBxdWFudGlmaWVkIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cWV4Ci0gICAgICAgICAgICBpcyB0aGUgcXVhbnRpZmllZCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uIG9yIG51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJxZXgiIGNvbW1lbnQ9ImlzIHRoZSBxdWFudGlmaWVkIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iUXVhbnRpZmllZEV4cHIiIHR5cGU9IlF1YW50aWZpZWRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgaWZleC50aGVuX2NsYXVzZSgpLmFjY2VwdCh0aGlzKS4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgaWYgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pZmV4Ci0gICAgICAgICAgICBpcyB0aGUgaWYgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIGlmZXgudGhlbl9jbGF1c2UoKS5hY2NlcHQodGhpcykuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpZmV4IiBjb21tZW50PSJpcyB0aGUgaWYgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJJZkV4cHIiIHR5cGU9IklmRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBvciBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm9yZXgKLSAgICAgICAgICAgIGlzIHRoZSBvciBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJvcmV4IiBjb21tZW50PSJpcyB0aGUgb3IgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJPckV4cHIiIHR5cGU9Ik9yRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBhbmQgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbmRleAotICAgICAgICAgICAgaXMgdGhlIGFuZCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhbmRleCIgY29tbWVudD0iaXMgdGhlIGFuZCBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkFuZEV4cHIiIHR5cGU9IkFuZEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24gb3IgbnVsbCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBjb21wYXJlIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y21wZXgKLSAgICAgICAgICAgIGlzIHRoZSBjb21wYXJlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb24gb3IgbnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY21wZXgiIGNvbW1lbnQ9ImlzIHRoZSBjb21wYXJlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iQ21wRXhwciIgdHlwZT0iQ21wRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCByYW5nZSBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJleAotICAgICAgICAgICAgaXMgdGhlIHJhbmdlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJleCIgY29tbWVudD0iaXMgdGhlIHJhbmdlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iUmFuZ2VFeHByIiB0eXBlPSJSYW5nZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgYW5kIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YWRkZXgKLSAgICAgICAgICAgIGlzIHRoZSBhbmQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYWRkZXgiIGNvbW1lbnQ9ImlzIHRoZSBhbmQgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJBZGRFeHByIiB0eXBlPSJBZGRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHN1YiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN1YmV4Ci0gICAgICAgICAgICBpcyB0aGUgc3ViIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN1YmV4IiBjb21tZW50PSJpcyB0aGUgc3ViIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iU3ViRXhwciIgdHlwZT0iU3ViRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBtdWx0aXBseSBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm11bGV4Ci0gICAgICAgICAgICBpcyB0aGUgbXVsIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im11bGV4IiBjb21tZW50PSJpcyB0aGUgbXVsIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iTXVsRXhwciIgdHlwZT0iTXVsRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBkaXZpc2lvbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm11bGV4Ci0gICAgICAgICAgICBpcyB0aGUgZGl2aXNpb24gZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXVsZXgiIGNvbW1lbnQ9ImlzIHRoZSBkaXZpc2lvbiBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkRpdkV4cHIiIHR5cGU9IkRpdkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm11bGV4Ci0gICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtdWxleCIgY29tbWVudD0iaXMgdGhlIGludGVnZXIgZGl2aXNpb24gZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJJRGl2RXhwciIgdHlwZT0iSURpdkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgbW9kdWxhciBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm11bGV4Ci0gICAgICAgICAgICBpcyB0aGUgbW9kdWxhciBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtdWxleCIgY29tbWVudD0iaXMgdGhlIG1vZHVsYXIgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJNb2RFeHByIiB0eXBlPSJNb2RFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHVuaW9uIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dW5leAotICAgICAgICAgICAgaXMgdGhlIHVuaW9uIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InVuZXgiIGNvbW1lbnQ9ImlzIHRoZSB1bmlvbiBleHByZXNzaW9uLiIgZnVsbHR5cGU9IlVuaW9uRXhwciIgdHlwZT0iVW5pb25FeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHBpcGUgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5waXBleAotICAgICAgICAgICAgaXMgdGhlIHBpcGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icGlwZXgiIGNvbW1lbnQ9ImlzIHRoZSBwaXBlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iUGlwZUV4cHIiIHR5cGU9IlBpcGVFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGludGVyc2VjdCBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmlleHByCi0gICAgICAgICAgICBpcyB0aGUgaW50ZXJzZWN0IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImlleHByIiBjb21tZW50PSJpcyB0aGUgaW50ZXJzZWN0IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iSW50ZXJzZWN0RXhwciIgdHlwZT0iSW50ZXJzZWN0RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBleGNlcHQgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lZXhwcgotICAgICAgICAgICAgaXMgdGhlIGV4Y2VwdCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlZXhwciIgY29tbWVudD0iaXMgdGhlIGV4Y2VwdCBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkV4Y2VwdEV4cHIiIHR5cGU9IkV4Y2VwdEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pb2V4cAotICAgICAgICAgICAgaXMgdGhlIGluc3RhbmNlIG9mIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImlvZXhwIiBjb21tZW50PSJpcyB0aGUgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJJbnN0T2ZFeHByIiB0eXBlPSJJbnN0T2ZFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHRyZWF0LWFzIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGFleHAKLSAgICAgICAgICAgIGlzIHRoZSB0cmVhdC1hcyBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0YWV4cCIgY29tbWVudD0iaXMgdGhlIHRyZWF0LWFzIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iVHJlYXRBc0V4cHIiIHR5cGU9IlRyZWF0QXNFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGNhc3RhYmxlIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y2V4cAotICAgICAgICAgICAgaXMgdGhlIGNhc3RhYmxlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNleHAiIGNvbW1lbnQ9ImlzIHRoZSBjYXN0YWJsZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkNhc3RhYmxlRXhwciIgdHlwZT0iQ2FzdGFibGVFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGNhc3QgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jZXhwCi0gICAgICAgICAgICBpcyB0aGUgY2FzdCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjZXhwIiBjb21tZW50PSJpcyB0aGUgY2FzdCBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkNhc3RFeHByIiB0eXBlPSJDYXN0RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBtaW51cyBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBtaW51cyBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgbWludXMgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJNaW51c0V4cHIiIHR5cGU9Ik1pbnVzRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBwbHVzIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHBsdXMgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHBsdXMgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJQbHVzRXhwciIgdHlwZT0iUGx1c0V4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgWFBhdGggZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgWFBhdGggZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIFhQYXRoIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iWFBhdGhFeHByIiB0eXBlPSJYUGF0aEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgYSBmb3J3YXJkIHN0ZXAgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZm9yd2FyZCBzdGVwLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZm9yd2FyZCBzdGVwLiIgZnVsbHR5cGU9IkZvcndhcmRTdGVwIiB0eXBlPSJGb3J3YXJkU3RlcCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBhIHJldmVyc2Ugc3RlcCBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSByZXZlcnNlIHN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSByZXZlcnNlIHN0ZXAuIiBmdWxsdHlwZT0iUmV2ZXJzZVN0ZXAiIHR5cGU9IlJldmVyc2VTdGVwIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGEgbmFtZSB0ZXN0IGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlbmFtZSB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGVuYW1lIHRlc3QuIiBmdWxsdHlwZT0iTmFtZVRlc3QiIHR5cGU9Ik5hbWVUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHZhcmlhYmxlIHJlZmVyZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgdmFyaWFibGUgcmVmZXJlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgdmFyaWFibGUgcmVmZXJlbmNlLiIgZnVsbHR5cGU9IlZhclJlZiIgdHlwZT0iVmFyUmVmIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHN0cmluZyBsaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgc3RyaW5nIGxpdGVyYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBzdHJpbmcgbGl0ZXJhbC4iIGZ1bGx0eXBlPSJTdHJpbmdMaXRlcmFsIiB0eXBlPSJTdHJpbmdMaXRlcmFsIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGludGVnZXIgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGludGVnZXIgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGludGVnZXIgbGl0ZXJhbC4iIGZ1bGx0eXBlPSJJbnRlZ2VyTGl0ZXJhbCIgdHlwZT0iSW50ZWdlckxpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSByZXN1bHQgc2VxdWVuY2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgZG91YmxlIGxpdGVyYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBkb3VibGUgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGRvdWJsZSBsaXRlcmFsLiIgZnVsbHR5cGU9IkRvdWJsZUxpdGVyYWwiIHR5cGU9IkRvdWJsZUxpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSByZXN1bHQgc2VxdWVuY2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgZGVjaW1hbCBsaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZGVjaW1hbCBsaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZGVjaW1hbCBsaXRlcmFsLiIgZnVsbHR5cGU9IkRlY2ltYWxMaXRlcmFsIiB0eXBlPSJEZWNpbWFsTGl0ZXJhbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBwYXJlbnQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHBhcmVudCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgcGFyZW50IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iUGFyRXhwciIgdHlwZT0iUGFyRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGNvbnRleHQgaXRlbSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgY29udGV4dCBpdGVtIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iQ250eEl0ZW1FeHByIiB0eXBlPSJDbnR4SXRlbUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24gb3IgbnVsbCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBmdW5jdGlvbiBjYWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZnVuY3Rpb24gY2FsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbiBvciBudWxsPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZnVuY3Rpb24gY2FsbC4iIGZ1bGx0eXBlPSJGdW5jdGlvbkNhbGwiIHR5cGU9IkZ1bmN0aW9uQ2FsbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHNpbmdsZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgc2luZ2xlIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHNpbmdsZSB0eXBlLiIgZnVsbHR5cGU9IlNpbmdsZVR5cGUiIHR5cGU9IlNpbmdsZVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBzZXF1ZW5jZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgc2VxdWVuY2UgdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgc2VxdWVuY2UgdHlwZS4iIGZ1bGx0eXBlPSJTZXF1ZW5jZVR5cGUiIHR5cGU9IlNlcXVlbmNlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGl0ZW0gdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGl0ZW0gdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgaXRlbSB0eXBlLiIgZnVsbHR5cGU9Ikl0ZW1UeXBlIiB0eXBlPSJJdGVtVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBhbnkga2luZCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgYW55IGtpbmQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGFueSBraW5kIHRlc3QuIiBmdWxsdHlwZT0iQW55S2luZFRlc3QiIHR5cGU9IkFueUtpbmRUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9InJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBkb2N1bWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZG9jdW1lbnQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBkb2N1bWVudCB0ZXN0LiIgZnVsbHR5cGU9IkRvY3VtZW50VGVzdCIgdHlwZT0iRG9jdW1lbnRUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHRleHQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHRleHQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHRleHQgdGVzdC4iIGZ1bGx0eXBlPSJUZXh0VGVzdCIgdHlwZT0iVGV4dFRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgY29tbWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgdGV4dCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgdGV4dCB0ZXN0LiIgZnVsbHR5cGU9IkNvbW1lbnRUZXN0IiB0eXBlPSJDb21tZW50VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIGFyZ3VtZW50IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IFBJIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBQSSB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgYXJndW1lbnQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBQSSB0ZXN0LiIgZnVsbHR5cGU9IlBJVGVzdCIgdHlwZT0iUElUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGF0dHJpYnV0ZSB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgYXR0cmlidXRlIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBhdHRyaWJ1dGUgdGVzdC4iIGZ1bGx0eXBlPSJBdHRyaWJ1dGVUZXN0IiB0eXBlPSJBdHRyaWJ1dGVUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC4iIGZ1bGx0eXBlPSJTY2hlbWFBdHRyVGVzdCIgdHlwZT0iU2NoZW1hQXR0clRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSByZXN1bHQgc2VxdWVuY2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgZWxlbWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZWxlbWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZWxlbWVudCB0ZXN0LiIgZnVsbHR5cGU9IkVsZW1lbnRUZXN0IiB0eXBlPSJFbGVtZW50VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBzY2hlbWEgZWxlbWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgc2NoZW1hIGVsZW1lbnQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHNjaGVtYSBlbGVtZW50IHRlc3QuIiBmdWxsdHlwZT0iU2NoZW1hRWxlbVRlc3QiIHR5cGU9IlNjaGVtYUVsZW1UZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGF4aXMgc3RlcC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGF4aXMgc3RlcC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGF4aXMgc3RlcC4iIGZ1bGx0eXBlPSJBeGlzU3RlcCIgdHlwZT0iQXhpc1N0ZXAiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSByZXN1bHQgc2VxdWVuY2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgZmlsdGVyIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGZpbHRlciBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZmlsdGVyIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iRmlsdGVyRXhwciIgdHlwZT0iRmlsdGVyRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBpbnRlcmZhY2U9InRydWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0Ij4KLQkJPGltcGxlbWVudHM+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIgdHlwZT0iU3RhdGljQ29udGV4dCIgLz4KLQkJPC9pbXBsZW1lbnRzPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5JbnRlcmZhY2UgZm9yIGR5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnRleHRfaXRlbSIgcmV0dXJuY29tbWVudD0idGhlIGNvbnRleHQgaXRlbS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXQgY29udGV4dCBpdGVtLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGNvbnRleHQgaXRlbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb250ZXh0X3Bvc2l0aW9uIiByZXR1cm5jb21tZW50PSJwb3NpdGlvbiBvZiBjb250ZXh0IG5vZGUuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+R2V0IGNvbnRleHQgbm9kZSBwb3NpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnBvc2l0aW9uIG9mIGNvbnRleHQgbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsYXN0IiByZXR1cm5jb21tZW50PSJsYXN0IGl0ZW0gcG9zaXRpb24uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+R2V0IHBvc2l0aW9uIG9mIGxhc3QgaXRlbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmxhc3QgaXRlbSBwb3NpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfdmFyaWFibGUiIHJldHVybmNvbW1lbnQ9InZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkdldCB2YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfdmFyaWFibGUiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCB2YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dmFyCi0gICAgICAgICAgICBpcyBuYW1lIG9mIHRoZSB2YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhbAotICAgICAgICAgICAgaXMgdGhlIHZhbHVlIHRvIGJlIHNldCBmb3IgdGhlIHZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idmFyIiBjb21tZW50PSJpcyBuYW1lIG9mIHRoZSB2YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idmFsIiBjb21tZW50PSJpcyB0aGUgdmFsdWUgdG8gYmUgc2V0IGZvciB0aGUgdmFyaWFibGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJldmFsdWF0ZV9mdW5jdGlvbiIgcmV0dXJuY29tbWVudD0icmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBldmFsdWF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXZhbHVhdGUgdGhlIGZ1bmN0aW9uIG9mIHRoZSBhcmd1bWVudHMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHRoZSBuYW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJncwotICAgICAgICAgICAgYXJlIHRoZSBhcmd1bWVudHMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yCi0gICAgICAgICAgICAgZHluYW1pYyBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGV2YWx1YXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJpcyB0aGUgbmFtZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJncyIgY29tbWVudD0iYXJlIHRoZSBhcmd1bWVudHMuIiBmdWxsdHlwZT0iamF2YS51dGlsLkNvbGxlY3Rpb24iIHR5cGU9IkNvbGxlY3Rpb24iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iZHluYW1pYyBlcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9ImN1cnJlbnQgZGF0ZSB0aW1lIGFuZCBpbXBsaWNpdCB0aW1lem9uZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZWFkcyB0aGUgZGF5IGZyb20gYSBUaW1lRHVyYXRpb24gdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y3VycmVudCBkYXRlIHRpbWUgYW5kIGltcGxpY2l0IHRpbWV6b25lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0X2RvYyIgcmV0dXJuY29tbWVudD0iZG9jdW1lbnQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXQgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnVyaQotICAgICAgICAgICAgaXMgdGhlIFVSSSBvZiB0aGUgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InVyaSIgY29tbWVudD0iaXMgdGhlIFVSSSBvZiB0aGUgZG9jdW1lbnQuIiBmdWxsdHlwZT0iamF2YS5uZXQuVVJJIiB0eXBlPSJVUkkiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyZXNvbHZlX3VyaSIgcmV0dXJuY29tbWVudD0idGhlIGFic29sdXRpemVkLCByZXNvbHZlZCBVUkkuIiBmdWxsdHlwZT0iamF2YS5uZXQuVVJJIiB0eXBlPSJVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmVzb2x2ZSBhbiBVUkk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dXJpCi0gICAgICAgICAgICBpcyB0aGUgcG9zc2libHkgcmVsYXRpdmUgVVJJIHRvIHJlc29sdmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgYWJzb2x1dGl6ZWQsIHJlc29sdmVkIFVSSS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idXJpIiBjb21tZW50PSJpcyB0aGUgcG9zc2libHkgcmVsYXRpdmUgVVJJIHRvIHJlc29sdmUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjdXJyZW50X2RhdGVfdGltZSIgcmV0dXJuY29tbWVudD0iVGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSwgd2hpY2ggd2lsbCBhbHdheXMgYmUgc2FtZSBmb3IgdGhlIGR5bmFtaWMgY29udGV4dC4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIiIHR5cGU9IkdyZWdvcmlhbkNhbGVuZGFyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGN1cnJlbnQgZGF0ZSB0aW1lIHVzaW5nIHRoZSBHcmVnb3JpYW5DYWxlbmRhci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUsIHdoaWNoIHdpbGwgYWx3YXlzIGJlIHNhbWUgZm9yIHRoZSBkeW5hbWljIGNvbnRleHQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfZm9jdXMiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBmb2N1cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Zm9jdXMKLSAgICAgICAgICAgIGlzIGZvY3VzIHRvIGJlIHNldC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImZvY3VzIiBjb21tZW50PSJpcyBmb2N1cyB0byBiZSBzZXQuIiBmdWxsdHlwZT0iRm9jdXMiIHR5cGU9IkZvY3VzIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZm9jdXMiIHJldHVybmNvbW1lbnQ9IkZvY3VzIiBmdWxsdHlwZT0iRm9jdXMiIHR5cGU9IkZvY3VzIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybiBmb2N1cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkZvY3VzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYUGF0aEV4Y2VwdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljIEVycm9yIGxpa2UgZGl2aXNpb24gYnkgMCBvciB0eXBlIGVycm9ycy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBEeW5hbWljIEVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jb2RlCi0gICAgICAgICAgICBpcyB0aGUgY29kZSB0aGF0IGlzIHNldC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY29kZSIgY29tbWVudD0iaXMgdGhlIGNvZGUgdGhhdCBpcyBzZXQuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZXJyIiBjb21tZW50PSJpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRHluYW1pYyBFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGUKLSAgICAgICAgICAgIGlzIHRoZSBlcnJvciB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idGUiIGNvbW1lbnQ9ImlzIHRoZSBlcnJvciB0eXBlLiIgZnVsbHR5cGU9IlR5cGVFcnJvciIgdHlwZT0iVHlwZUVycm9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb2RlIiByZXR1cm5jb21tZW50PSJ0aGUgY29kZS4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgc3RyaW5nIG9mIHRoZSBjb2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGNvZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjYW50X2Nhc3QiIHJldHVybmNvbW1lbnQ9InRoZSBEeW5hbWljRXJyb3IuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgaXMgdGhlIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIER5bmFtaWNFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVyciIgY29tbWVudD0iaXMgdGhlIGVycm9yIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0aHJvd190eXBlX2Vycm9yIiByZXR1cm5jb21tZW50PSJ0aGUgRHluYW1pY0Vycm9yLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yCi0gICAgICAgICAgICAgYSBEeW5hbWljIEVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIER5bmFtaWNFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iYSBEeW5hbWljIEVycm9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idXNlcl9lcnJvciIgcmV0dXJuY29tbWVudD0idGhlIER5bmFtaWNFcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZGVzYwotICAgICAgICAgICAgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBEeW5hbWljRXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5zIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29kZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRlc2MiIGNvbW1lbnQ9ImlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InVzZXJfZXJyb3IiIHJldHVybmNvbW1lbnQ9InRoZSBEeW5hbWljRXJyb3IuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBEeW5hbWljRXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlcnIiIGNvbW1lbnQ9ImlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlZ2V4X2ZsYWdzX2Vycm9yIiByZXR1cm5jb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgRHluYW1pYyBFcnJvciBmb3IgaW52YWxpZCBmbGFncyBpbiByZWd1bGFyIGV4cHJlc3Npb25zPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iIC8+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVyciIgY29tbWVudD0iIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyZWdleF9lcnJvciIgcmV0dXJuY29tbWVudD0idGhlIER5bmFtaWNFcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXJyCi0gICAgICAgICAgICBpcyB0aGUgZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgRHluYW1pY0Vycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZXJyIiBjb21tZW50PSJpcyB0aGUgZXJyb3IiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlZ2V4X21hdGNoX3plcm9fbGVuZ3RoIiByZXR1cm5jb21tZW50PSJ0aGUgRHluYW1pY0Vycm9yLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lcnIKLSAgICAgICAgICAgIGlzIHRoZSBlcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBEeW5hbWljRXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVyciIgY29tbWVudD0iaXMgdGhlIGVycm9yIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ1bnN1cHBvcnRlZF9jb2RlcG9pbnQiIHJldHVybmNvbW1lbnQ9InRoZSBEeW5hbWljRXJyb3IuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIFVuaWNvZGUgY29kZXBvaW50PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgaXMgdGhlIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIER5bmFtaWNFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZXJyIiBjb21tZW50PSJpcyB0aGUgZXJyb3IiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InVuc3VwcG9ydGVkX25vcm1hbGl6YXRpb25fZm9ybSIgcmV0dXJuY29tbWVudD0idGhlIER5bmFtaWNFcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgaXMgdGhlIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIER5bmFtaWNFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZXJyIiBjb21tZW50PSJpcyB0aGUgZXJyb3IiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImxleGljYWxfZXJyb3IiIHJldHVybmNvbW1lbnQ9InRoZSBtYWtlX2Vycm9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBhbiBJbnZhbGlkIGxleGljYWwgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXNnCi0gICAgICAgICAgICBpcyB0aGUgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtYWtlX2Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtc2ciIGNvbW1lbnQ9ImlzIHRoZSBtZXNzYWdlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJub3RfY21wIiByZXR1cm5jb21tZW50PSJ0aGUgbWFrZV9lcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gcmVhZHMgYW4gSXRlbXMgbm90IGNvbXBhcmFibGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXNnCi0gICAgICAgICAgICBpcyB0aGUgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtYWtlX2Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtc2ciIGNvbW1lbnQ9ImlzIHRoZSBtZXNzYWdlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb3JlX29uZV9pdGVtIiByZXR1cm5jb21tZW50PSJ0aGUgbWFrZV9lcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1zZwotICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgbWFrZV9lcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXNnIiBjb21tZW50PSJpcyB0aGUgbWVzc2FnZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZW1wdHlfc2VxIiByZXR1cm5jb21tZW50PSJ0aGUgbWFrZV9lcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1zZwotICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgbWFrZV9lcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXNnIiBjb21tZW50PSJpcyB0aGUgbWVzc2FnZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm90X29uZSIgcmV0dXJuY29tbWVudD0idGhlIG1ha2VfZXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tc2cKLSAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIG1ha2VfZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1zZyIgY29tbWVudD0iaXMgdGhlIG1lc3NhZ2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImludmFsaWRfZG9jIiByZXR1cm5jb21tZW50PSJ0aGUgbWFrZV9lcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gcmVhZHMgSW52YWxpZCBhcmd1bWVudCB0byBmbjpkb2M8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXNnCi0gICAgICAgICAgICBpcyB0aGUgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtYWtlX2Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtc2ciIGNvbW1lbnQ9ImlzIHRoZSBtZXNzYWdlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkb2Nfbm90X2ZvdW5kIiByZXR1cm5jb21tZW50PSJ0aGUgbWFrZV9lcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gZm46ZG9jIGNhbm5vdCBsb2FkIGl0cyBkb2N1bWVudDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tc2cKLSAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIG1ha2VfZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXNnIiBjb21tZW50PSJpcyB0aGUgbWVzc2FnZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGl2X3plcm8iIHJldHVybmNvbW1lbnQ9InRoZSBtYWtlX2Vycm9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBhIERpdmlzaW9uIGJ5IHplcm88L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXNnCi0gICAgICAgICAgICBpcyB0aGUgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtYWtlX2Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtc2ciIGNvbW1lbnQ9ImlzIHRoZSBtZXNzYWdlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJudW1lcmljX292ZXJmbG93IiByZXR1cm5jb21tZW50PSJ0aGUgbWFrZV9lcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5OdW1lcmljIG9wZXJhdGlvbiBvdmVyZmxvdy91bmRlcmZsb3c8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXNnCi0gICAgICAgICAgICBpcyB0aGUgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtYWtlX2Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1zZyIgY29tbWVudD0iaXMgdGhlIG1lc3NhZ2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnRleHRVbmRlZmluZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpbnZhbGlkRm9yQ2FzdENvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJGT1JHMDAwMSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5EYXRhIGlzIGludmFsaWQgZm9yIGNhc3Rpbmcgb3IgdGhlIGRhdGEgdHlwZSBjb25zdHJ1Y3Rvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXNnPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Rk9SRzAwMDE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaW52YWxpZFByZWZpeCIgcmV0dXJuY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk5vIG5hbWVzcGFjZSBmb3VuZCBmb3IgcHJlZml4LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiIgLz4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm9Db250ZXh0RG9jIiByZXR1cm5jb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Tm8gY29udGV4dCBkb2N1bWVudDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiIgLz4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBpbnRlcmZhY2U9InRydWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRXZhbHVhdG9yIiB0eXBlPSJFdmFsdWF0b3IiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5pbnRlcmZhY2UgdG8gRXZhbHVhdG9yPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJldmFsdWF0ZSIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIGV2YWx1YXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FdmFsdWF0ZSB0aGUgcm9vdCBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yb290Ci0gICAgICAgICAgICBpcyB0aGUgWFBhdGggbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3IKLSAgICAgICAgICAgICBkeW5hbWljIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBldmFsdWF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icm9vdCIgY29tbWVudD0iaXMgdGhlIFhQYXRoIG5vZGUuIiBmdWxsdHlwZT0iWFBhdGhOb2RlIiB0eXBlPSJYUGF0aE5vZGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iZHluYW1pYyBlcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuSkZsZXhDdXBQYXJzZXIiIHR5cGU9IkpGbGV4Q3VwUGFyc2VyIj4KLQkJPGltcGxlbWVudHM+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXIiIHR5cGU9IlhQYXRoUGFyc2VyIiAvPgotCQk8L2ltcGxlbWVudHM+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkpGbGV4Q3VwUGFyc2VyIHBhcnNlcyB0aGUgeHBhdGggZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJKRmxleEN1cFBhcnNlciIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZSIgcmV0dXJuY29tbWVudD0idGhlIHhwYXRoIHZhbHVlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGgiIHR5cGU9IlhQYXRoIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlRyaWVzIHRvIHBhcnNlIHRoZSB4cGF0aCBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnhwYXRoCi0gICAgICAgICAgICBpcyB0aGUgeHBhdGggc3RyaW5nLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPlhQYXRoUGFyc2VyRXhjZXB0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSB4cGF0aCB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InhwYXRoIiBjb21tZW50PSJpcyB0aGUgeHBhdGggc3RyaW5nLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyRXhjZXB0aW9uIiB0eXBlPSJYUGF0aFBhcnNlckV4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+SW50ZXJmYWNlIHRvIHRoZSBtZXRob2RzIG9mIHJhbmdlIG9mIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWRkIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5hZGQgaXRlbTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pdGVtCi0gICAgICAgICAgICBpcyBhbiBpdGVtIG9mIGFueSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaXRlbSIgY29tbWVudD0iaXMgYW4gaXRlbSBvZiBhbnkgdHlwZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25jYXQiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmNvbmNhdGluYXRlIGZyb20gcnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cnMKLSAgICAgICAgICAgIGlzIGEgUmVzdWx0IFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGNvbW1lbnQ9ImlzIGEgUmVzdWx0IFNlcXVlbmNlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXRlcmF0b3IiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yIiB0eXBlPSJMaXN0SXRlcmF0b3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TGlzdCBJdGVyYXRvci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5nZXQgaXRlbSBpbiBpbmRleCBpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmkKLSAgICAgICAgICAgIGlzIHRoZSBwb3NpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImkiIGNvbW1lbnQ9ImlzIHRoZSBwb3NpdGlvbi4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzaXplIiByZXR1cm5jb21tZW50PSJ0aGUgc2l6ZS4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5nZXQgdGhlIHNpemU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBzaXplLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjbGVhciIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Y2xlYXI8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjcmVhdGVfbmV3IiByZXR1cm5jb21tZW50PSJhIG5ldyByZXN1bHQgc2VxdWVuY2UuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5jcmVhdGUgYSBuZXcgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyByZXN1bHQgc2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZmlyc3QiIHJldHVybmNvbW1lbnQ9InRoZSBmaXJzdCBpdGVtLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnJldHJpZXZlIHRoZSBmaXJzdCBpdGVtPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgZmlyc3QgaXRlbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlbXB0eSIgcmV0dXJuY29tbWVudD0iYm9vbGVhbi4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmNoZWNrIGlzIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmciIHJldHVybmNvbW1lbnQ9InJlc3VsdCBzdHJpbmciIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+cmV0cmlldmUgaXRlbXMgaW4gc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJlc3VsdCBzdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyZWxlYXNlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5yZWxlYXNlIHRoZSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3RvcnkiIHR5cGU9IlJlc3VsdFNlcXVlbmNlRmFjdG9yeSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBzZXF1ZW5jZSBmYWN0b3J5PC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlJlc3VsdFNlcXVlbmNlRmFjdG9yeSIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iZmFjdF9jcmVhdGVfbmV3IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iZmFjdF9yZWxlYXNlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImZhY3RfY3JlYXRlX25ldyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpdGVtIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJmYWN0X3ByaW50X2RlYnVnIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCIgLz4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNyZWF0ZV9uZXciIHJldHVybmNvbW1lbnQ9InRoZSBjcmVhdGlvbiBvZiBhIG5ldyByZXN1bHQgc2VxdWVuY2UiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgY3JlYXRpb24gb2YgYSBuZXcgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjcmVhdGVfbmV3IiByZXR1cm5jb21tZW50PSJmYWN0b3J5IGNyZWF0aW5nIG5ldyBpdGVtIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pdGVtCi0gICAgICAgICAgICBpcyBhbiBpdGVtIG9mIGFueSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmZhY3RvcnkgY3JlYXRpbmcgbmV3IGl0ZW08L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Iml0ZW0iIGNvbW1lbnQ9ImlzIGFuIGl0ZW0gb2YgYW55IHR5cGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlbGVhc2UiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJzCi0gICAgICAgICAgICBpcyB0aGUgcmVzdWx0IHNlcXVlbmNlIGZhY3RvcnkgcmVsZWFzZSByczwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGNvbW1lbnQ9ImlzIHRoZSByZXN1bHQgc2VxdWVuY2UgZmFjdG9yeSByZWxlYXNlIHJzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icHJpbnRfZGVidWciIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmZhY3RvcnkgZGVidWc8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBpbnRlcmZhY2U9InRydWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ2hlY2tlciIgdHlwZT0iU3RhdGljQ2hlY2tlciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkludGVyZmFjZSB0byBzdGF0aWMgY2hlY2tlci48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNoZWNrIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5jaGVja3MgWFBhdGhOb2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdGF0aWMgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yb290Ci0gICAgICAgICAgICBpcyBhbiBYUGF0aCBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icm9vdCIgY29tbWVudD0iaXMgYW4gWFBhdGggbm9kZS4iIGZ1bGx0eXBlPSJYUGF0aE5vZGUiIHR5cGU9IlhQYXRoTm9kZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yIiB0eXBlPSJTdGF0aWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgaW50ZXJmYWNlPSJ0cnVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiIHR5cGU9IlN0YXRpY0NvbnRleHQiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5pbnRlcmZhY2UgdG8gc3RhdGljIGNvbnRleHQ8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InhwYXRoMV9jb21wYXRpYmxlIiByZXR1cm5jb21tZW50PSJib29sZWFuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5pcyBpdCB4cGF0aCAxLjAgY29tcGF0aWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmJvb2xlYW48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwcmVmaXhfZXhpc3RzIiByZXR1cm5jb21tZW50PSJib29sZWFuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5uYW1lc3BhY2VzIGRvZXMgdGhlIHByZWZpeCBleGlzdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wcmVmaXgKLSAgICAgICAgICAgIGlzIHRoZSBwcmVmaXg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwcmVmaXgiIGNvbW1lbnQ9ImlzIHRoZSBwcmVmaXgiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyZXNvbHZlX3ByZWZpeCIgcmV0dXJuY29tbWVudD0ic3RyaW5nIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnByZWZpeAotICAgICAgICAgICAgaXMgdGhlIHByZWZpeDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icHJlZml4IiBjb21tZW50PSJpcyB0aGUgcHJlZml4IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGVmYXVsdF9uYW1lc3BhY2UiIHJldHVybmNvbW1lbnQ9InN0cmluZyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj50aGUgZGVmYXVsdCBuYW1lc3BhY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlIiByZXR1cm5jb21tZW50PSJzdHJpbmciIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhdHRyaWJ1dGVfdHlwZV9kZWZpbml0aW9uIiByZXR1cm5jb21tZW50PSJhdHRyaWJ1dGVzJmFwb3M7cyB0eXBlIGRlZmluaXRpb24iIGZ1bGx0eXBlPSJYU1R5cGVEZWZpbml0aW9uIiB0eXBlPSJYU1R5cGVEZWZpbml0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmF0dHIKLSAgICAgICAgICAgIGlzIHRoZSBxbmFtZSB2YXJpYWJsZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmF0dHJpYnV0ZXMmYXBvcztzIHR5cGUgZGVmaW5pdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXR0ciIgY29tbWVudD0iaXMgdGhlIHFuYW1lIHZhcmlhYmxlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVsZW1lbnRfdHlwZV9kZWZpbml0aW9uIiByZXR1cm5jb21tZW50PSJlbGVtZW50JmFwb3M7cyB0eXBlIGRlZmluaXRpb24iIGZ1bGx0eXBlPSJYU1R5cGVEZWZpbml0aW9uIiB0eXBlPSJYU1R5cGVEZWZpbml0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVsZW0KLSAgICAgICAgICAgIGlzIHRoZSBlbGVtIG9mIHRoZSBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVsZW1lbnQmYXBvcztzIHR5cGUgZGVmaW5pdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZWxlbSIgY29tbWVudD0iaXMgdGhlIGVsZW0gb2YgdGhlIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImF0dHJpYnV0ZV9kZWNsYXJlZCIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+aXMgdGhlIGF0dHJpYnV0ZSBkZWNsYXJlZD88L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXR0cgotICAgICAgICAgICAgaXMgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhdHRyIiBjb21tZW50PSJpcyB0aGUgYXR0cmlidXRlIG9mIHRoZSBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlbGVtZW50X2RlY2xhcmVkIiByZXR1cm5jb21tZW50PSJib29sZWFuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5pcyB0aGUgZWxlbWVudCBkZWNsYXJlZD88L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZWxlbQotICAgICAgICAgICAgaXMgdGhlIGVsZW0gb2YgdGhlIHFuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZWxlbSIgY29tbWVudD0iaXMgdGhlIGVsZW0gb2YgdGhlIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImZ1bmN0aW9uX2V4aXN0cyIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+aXMgdGhlIGVsZW1lbnQgZGVjbGFyZWQ/PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHRoZSBxbmFtZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcml0eQotICAgICAgICAgICAgaW50ZWdlciBvZiBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmJvb2xlYW48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImlzIHRoZSBxbmFtZSBuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyaXR5IiBjb21tZW50PSJpbnRlZ2VyIG9mIHFuYW1lIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJiYXNlX3VyaSIgcmV0dXJuY29tbWVudD0idXJpIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJIiB0eXBlPSJYU0FueVVSSSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5iYXNlIHVyaTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dXJpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibmV3X3Njb3BlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5uZXcgc2NvcGU8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlc3Ryb3lfc2NvcGUiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmRlc3Ryb3kgc2NvcGU8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFkZF92YXJpYWJsZSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+YWRkIHZhcmlhYmxlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHRoZSBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgdGhlIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlbF92YXJpYWJsZSIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiBpZiBkZWxldGVkIHZhcmlhYmxlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5kZWxldGUgdGhlIHZhcmlhYmxlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHRoZSBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmJvb2xlYW4gaWYgZGVsZXRlZCB2YXJpYWJsZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgdGhlIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhcmlhYmxlX2V4aXN0cyIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiBpZiB2YXJpYWJsZSBleGlzdHMiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHRoZSBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmJvb2xlYW4gaWYgdmFyaWFibGUgZXhpc3RzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJpcyB0aGUgcW5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmFyaWFibGVfaW5fc2NvcGUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhcgotICAgICAgICAgICAgaXMgdGhlIHZhcmlhYmxlIG9mIHFuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YXIiIGNvbW1lbnQ9ImlzIHRoZSB2YXJpYWJsZSBvZiBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX2RlZmluZWQiIHJldHVybmNvbW1lbnQ9ImJvb2xlYW4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHFuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgcW5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGVyaXZlc19mcm9tIiByZXR1cm5jb21tZW50PSJib29sZWFuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hdAotICAgICAgICAgICAgdGhlIG5vZGUgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXQKLSAgICAgICAgICAgIGlzIHRoZSBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmJvb2xlYW48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImF0IiBjb21tZW50PSJ0aGUgbm9kZSB0eXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImV0IiBjb21tZW50PSJpcyB0aGUgcW5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGVyaXZlc19mcm9tIiByZXR1cm5jb21tZW50PSJib29sZWFuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hdAotICAgICAgICAgICAgdGhlIG5vZGUgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXQKLSAgICAgICAgICAgIGlzIHRoZSBYU1R5cGVEZWZpbml0aW9uIG9mIHRoZSBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXQiIGNvbW1lbnQ9InRoZSBub2RlIHR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZXQiIGNvbW1lbnQ9ImlzIHRoZSBYU1R5cGVEZWZpbml0aW9uIG9mIHRoZSBub2RlIiBmdWxsdHlwZT0iWFNUeXBlRGVmaW5pdGlvbiIgdHlwZT0iWFNUeXBlRGVmaW5pdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFkZF9uYW1lc3BhY2UiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmFkZCBuYW1lc3BhY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cHJlZml4Ci0gICAgICAgICAgICB0aGUgcHJlZml4IG9mIHRoZSBuYW1lc3BhY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5zCi0gICAgICAgICAgICBpcyB0aGUgWFNUeXBlRGVmaW5pdGlvbiBvZiB0aGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icHJlZml4IiBjb21tZW50PSJ0aGUgcHJlZml4IG9mIHRoZSBuYW1lc3BhY2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJucyIgY29tbWVudD0iaXMgdGhlIFhTVHlwZURlZmluaXRpb24gb2YgdGhlIG5vZGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJleHBhbmRfZnVuY3Rpb25fcW5hbWUiIHJldHVybmNvbW1lbnQ9ImJvb2xlYW4gaWYgZnVuY3Rpb24gY2FuIGJlIGV4cGFuZGVkIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5leHBhbmQgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgaXMgdGhlIHFuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImlzIHRoZSBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJleHBhbmRfZWxlbV90eXBlX3FuYW1lIiByZXR1cm5jb21tZW50PSJib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+ZXhwYW5kIGVsZW1lbnQgdHlwZSBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyB0aGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgdGhlIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImV4cGFuZF9xbmFtZSIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmV4cGFuZCBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyB0aGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgdGhlIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFkZF9mdW5jdGlvbl9saWJyYXJ5IiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5hZGQgZnVuY3Rpb24gdG8gbGlicmFyeTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5mbAotICAgICAgICAgICAgaXMgdGhlIGZ1bmN0aW9uIGxpYnJhcnk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImZsIiBjb21tZW50PSJpcyB0aGUgZnVuY3Rpb24gbGlicmFyeSIgZnVsbHR5cGU9IkZ1bmN0aW9uTGlicmFyeSIgdHlwZT0iRnVuY3Rpb25MaWJyYXJ5IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibWFrZV9hdG9taWMiIHJldHVybmNvbW1lbnQ9ImFueSBhdG9taWMgdHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIiB0eXBlPSJBbnlBdG9taWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHRoZSBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFueSBhdG9taWMgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgdGhlIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF9iYXNlX3VyaSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0cyB0aGUgYmFzZSB1cmkgZm9yIHRoZSBjb250ZXh0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5iYXNldXJpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImJhc2V1cmkiIGNvbW1lbnQ9IiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFBhdGhFeGNlcHRpb24iIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzZXJpYWxpemFibGU9InRydWUiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yIiB0eXBlPSJTdGF0aWNFcnJvciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkJhc2UgY2xhc3MgZm9yIGFsbCBzdGF0aWMgZXJyb3JzIGFzIGRlZmluZWQgYnkgdGhlIFhQYXRoIDIuMCBzcGVjaWZpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlN0YXRpY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBhIGdlbmVyaWMgc3RhdGljIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmNvZGUKLSAgICAgICAgICAgIFRoZSBlcnJvciBjb2RlIGFzIHNwZWNpZmllZCBpbiBYUGF0aCAyLjA8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgSHVtYXIgcmVhZGFibGUgZXJyb3IgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY29kZSIgY29tbWVudD0iVGhlIGVycm9yIGNvZGUgYXMgc3BlY2lmaWVkIGluIFhQYXRoIDIuMCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVyciIgY29tbWVudD0iSHVtYXIgcmVhZGFibGUgZXJyb3IgbWVzc2FnZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29kZSIgcmV0dXJuY29tbWVudD0iZXJyb3IgY29kZSB3aGljaCByZXByZXNlbnRzIHRoZSBlcnJvciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXJyb3IgY29kZSB3aGljaCByZXByZXNlbnRzIHRoZSBlcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY05hbWVSZXNvbHZlciIgdHlwZT0iU3RhdGljTmFtZVJlc29sdmVyIj4KLQkJPGltcGxlbWVudHM+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ2hlY2tlciIgdHlwZT0iU3RhdGljQ2hlY2tlciIgLz4KLQkJPC9pbXBsZW1lbnRzPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGlzIGNsYXNzIHJlc29sdmVzIHN0YXRpYyBuYW1lcy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU3RhdGljTmFtZVJlc29sdmVyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBzdGF0aWMgbmFtZSByZXNvbHZlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zYwotICAgICAgICAgICAgaXMgdGhlIHN0YXRpYyBjb250ZXh0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic2MiIGNvbW1lbnQ9ImlzIHRoZSBzdGF0aWMgY29udGV4dC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIgdHlwZT0iU3RhdGljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2hlY2siIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIHRoZSBYUGF0aCBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ub2RlCi0gICAgICAgICAgICBpcyB0aGUgWFBhdGggbm9kZSB0byBjaGVjay48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdGF0aWNFcnJvcgotICAgICAgICAgICAgIHN0YXRpYyBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGNvbW1lbnQ9ImlzIHRoZSBYUGF0aCBub2RlIHRvIGNoZWNrLiIgZnVsbHR5cGU9IlhQYXRoTm9kZSIgdHlwZT0iWFBhdGhOb2RlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9InN0YXRpYyBlcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3IiIHR5cGU9IlN0YXRpY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBYUGF0aCBieSB2aXNpdGluZyBhbGwgdGhlIG5vZGVzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54cAotICAgICAgICAgICAgaXMgdGhlIFhQYXRoLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4cCIgY29tbWVudD0iaXMgdGhlIFhQYXRoLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGgiIHR5cGU9IlhQYXRoIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgZm9yIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmZleAotICAgICAgICAgICAgaXMgdGhlIGZvciBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJmZXgiIGNvbW1lbnQ9ImlzIHRoZSBmb3IgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJGb3JFeHByIiB0eXBlPSJGb3JFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgcXVhbnRpZmllZCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5xZXgKLSAgICAgICAgICAgIGlzIHRoZSBxdWFudGlmaWVkIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InFleCIgY29tbWVudD0iaXMgdGhlIHF1YW50aWZpZWQgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJRdWFudGlmaWVkRXhwciIgdHlwZT0iUXVhbnRpZmllZEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4gaWYgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aWZleAotICAgICAgICAgICAgaXMgdGhlIGlmIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImlmZXgiIGNvbW1lbnQ9ImlzIHRoZSBpZiBleHByZXNzaW9uLiIgZnVsbHR5cGU9IklmRXhwciIgdHlwZT0iSWZFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icHJpbnRCaW5FeHByIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIGJpbmFyeSBleHByZXNzaW9uIGJ5IGNoZWNraW5nIGl0cyBsZWZ0IGFuZCByaWdodCBjaGlsZHJlbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24gaXRzZWxmLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBleHByZXNzaW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uIGl0c2VsZi4iIGZ1bGx0eXBlPSJCaW5FeHByIiB0eXBlPSJCaW5FeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGFuIE9SIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm9yZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJvcmV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJPckV4cHIiIHR5cGU9Ik9yRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBBTkQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YW5kZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhbmRleCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iQW5kRXhwciIgdHlwZT0iQW5kRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y21wZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjbXBleCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iQ21wRXhwciIgdHlwZT0iQ21wRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHJhbmdlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJleAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJleCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iUmFuZ2VFeHByIiB0eXBlPSJSYW5nZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4gYWRkaXRvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hZGRleAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFkZGV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJBZGRFeHByIiB0eXBlPSJBZGRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgc3VidHJhY3Rpb24gZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3ViZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzdWJleCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iU3ViRXhwciIgdHlwZT0iU3ViRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIG11bHRpcGxpY2F0aW9uIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm11bGV4Ci0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXVsZXgiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Ik11bEV4cHIiIHR5cGU9Ik11bEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBkaXZpc2lvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tdWxleAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im11bGV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJEaXZFeHByIiB0eXBlPSJEaXZFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGFuIGludGVnZXIgZGl2aXNvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tdWxleAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im11bGV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJJRGl2RXhwciIgdHlwZT0iSURpdkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBtb2QgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXVsZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtdWxleCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iTW9kRXhwciIgdHlwZT0iTW9kRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHVuaW9uIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnVuZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ1bmV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJVbmlvbkV4cHIiIHR5cGU9IlVuaW9uRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHBpcGVkIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnBpcGV4Ci0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icGlwZXgiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IlBpcGVFeHByIiB0eXBlPSJQaXBlRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBpbnRlcnNlY3Rpb24gZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aWV4cHIKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpZXhwciIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iSW50ZXJzZWN0RXhwciIgdHlwZT0iSW50ZXJzZWN0RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBleGNlcHQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZWV4cHIKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlZXhwciIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iRXhjZXB0RXhwciIgdHlwZT0iRXhjZXB0RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiAmYXBvcztpbnN0YW5jZSBvZiZhcG9zOyBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pb2V4cAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImlvZXhwIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJJbnN0T2ZFeHByIiB0eXBlPSJJbnN0T2ZFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgJmFwb3M7dHJlYXQgYXMmYXBvczsgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGFleHAKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0YWV4cCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iVHJlYXRBc0V4cHIiIHR5cGU9IlRyZWF0QXNFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgY2FzdGFibGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y2V4cAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNleHAiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkNhc3RhYmxlRXhwciIgdHlwZT0iQ2FzdGFibGVFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgY2FzdCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jZXhwCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2V4cCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iQ2FzdEV4cHIiIHR5cGU9IkNhc3RFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icHJpbnRVbkV4cHIiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgdW5hcnkgZXhwcmVzc2lvbiBieSBjaGVja2luZyBpdHMgb25lIGNoaWxkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uIGl0c2VsZi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImlzIHRoZSBuYW1lIG9mIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uIGl0c2VsZi4iIGZ1bGx0eXBlPSJVbkV4cHIiIHR5cGU9IlVuRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIG1pbnVzIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJNaW51c0V4cHIiIHR5cGU9Ik1pbnVzRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHBsdXMgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IlBsdXNFeHByIiB0eXBlPSJQbHVzRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiB4cGF0aCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iWFBhdGhFeHByIiB0eXBlPSJYUGF0aEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBmb3J3YXJkIHN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJGb3J3YXJkU3RlcCIgdHlwZT0iRm9yd2FyZFN0ZXAiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSByZXZlcnNlIHN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJSZXZlcnNlU3RlcCIgdHlwZT0iUmV2ZXJzZVN0ZXAiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBuYW1lIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJOYW1lVGVzdCIgdHlwZT0iTmFtZVRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSB2YXJpYWJsZSByZWZlcmVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJWYXJSZWYiIHR5cGU9IlZhclJlZiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHN0cmluZyBsaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iU3RyaW5nTGl0ZXJhbCIgdHlwZT0iU3RyaW5nTGl0ZXJhbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBpbnRlZ2VyIGxpdGVyYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJJbnRlZ2VyTGl0ZXJhbCIgdHlwZT0iSW50ZWdlckxpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBkb3VibGUgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkRvdWJsZUxpdGVyYWwiIHR5cGU9IkRvdWJsZUxpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBkZWNpbWFsIGxpdGVyYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJEZWNpbWFsTGl0ZXJhbCIgdHlwZT0iRGVjaW1hbExpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJQYXJFeHByIiB0eXBlPSJQYXJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgY29udGV4dCBpdGVtIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJDbnR4SXRlbUV4cHIiIHR5cGU9IkNudHhJdGVtRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIGZ1bmN0aW9uIGNhbGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJGdW5jdGlvbkNhbGwiIHR5cGU9IkZ1bmN0aW9uQ2FsbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHNpbmdsZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iU2luZ2xlVHlwZSIgdHlwZT0iU2luZ2xlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHNlcXVlbmNlIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJTZXF1ZW5jZVR5cGUiIHR5cGU9IlNlcXVlbmNlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBpdGVtIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJJdGVtVHlwZSIgdHlwZT0iSXRlbVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4gYW55IGtpbmQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkFueUtpbmRUZXN0IiB0eXBlPSJBbnlLaW5kVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIGRvY3VtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJEb2N1bWVudFRlc3QiIHR5cGU9IkRvY3VtZW50VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHRleHQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IlRleHRUZXN0IiB0eXBlPSJUZXh0VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIGNvbW1lbnQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkNvbW1lbnRUZXN0IiB0eXBlPSJDb21tZW50VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3RpbmcgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IlBJVGVzdCIgdHlwZT0iUElUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGFuIGF0dHJpYnV0ZSB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iQXR0cmlidXRlVGVzdCIgdHlwZT0iQXR0cmlidXRlVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IlNjaGVtYUF0dHJUZXN0IiB0eXBlPSJTY2hlbWFBdHRyVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBlbGVtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJFbGVtZW50VGVzdCIgdHlwZT0iRWxlbWVudFRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBzY2hlbWEgZWxlbWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iU2NoZW1hRWxlbVRlc3QiIHR5cGU9IlNjaGVtYUVsZW1UZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGFuIGF4aXMgc3RlcC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9IkF4aXNTdGVwIiB0eXBlPSJBeGlzU3RlcCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIGZpbHRlciBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iRmlsdGVyRXhwciIgdHlwZT0iRmlsdGVyRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iRXhjZXB0aW9uIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc2VyaWFsaXphYmxlPSJ0cnVlIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5FeGNlcHRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24iIHR5cGU9IlhQYXRoRXhjZXB0aW9uIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhpcyBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggYW4gWFBhdGggZXhjZXB0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYUGF0aEV4Y2VwdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgWFBhdGhFeGNlcHRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVhc29uCi0gICAgICAgICAgICBJcyB0aGUgcmVhc29uIHdoeSB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93bi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJlYXNvbiIgY29tbWVudD0iSXMgdGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyZWFzb24iIHJldHVybmNvbW1lbnQ9InRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3cuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvdy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgaW50ZXJmYWNlPSJ0cnVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyIiB0eXBlPSJYUGF0aFBhcnNlciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlRoaXMgaXMgYW4gaW50ZXJmYWNlIGNsYXNzIGZvciB0aGUgWFBhdGggcGFyc2VyLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2UiIHJldHVybmNvbW1lbnQ9IlRoZSBwYXJzZWQgWFBhdGguIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCIgdHlwZT0iWFBhdGgiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIHRoZSBYUGF0aCBwYXJzZXIgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54cGF0aAotICAgICAgICAgICAgaXMgdGhlIGlucHV0IFhQYXRoIHRvIGJlIHBhcnNlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5YUGF0aFBhcnNlckV4Y2VwdGlvbgotICAgICAgICAgICAgIFhQYXRoIHBhcnNlciBleGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIHBhcnNlZCBYUGF0aC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InhwYXRoIiBjb21tZW50PSJpcyB0aGUgaW5wdXQgWFBhdGggdG8gYmUgcGFyc2VkLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSJYUGF0aCBwYXJzZXIgZXhjZXB0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlckV4Y2VwdGlvbiIgdHlwZT0iWFBhdGhQYXJzZXJFeGNlcHRpb24iIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJTdGF0aWNFcnJvciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXJFeGNlcHRpb24iIHR5cGU9IlhQYXRoUGFyc2VyRXhjZXB0aW9uIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhpcyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBYUGF0aCBwYXJzZXIuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJYUFNUMDAwMyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJJTlZBTElEX1hQQVRIX0VYUFJFU1NJT04iIGNvbnN0ZXhwcj0iJnF1b3Q7WFBTVDAwMDMmcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VGhlIHR5cGUgb2YgZXhjZXB0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJPC9maWVsZHM+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFBhdGhQYXJzZXJFeGNlcHRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIFhQYXRoUGFyc2VyRXhjZXB0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZWFzb24KLSAgICAgICAgICAgIGlzIHRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icmVhc29uIiBjb21tZW50PSJpcyB0aGUgcmVhc29uIHdoeSB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93bi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhlcmNlc0xvYWRlciIgdHlwZT0iWGVyY2VzTG9hZGVyIj4KLQkJPGltcGxlbWVudHM+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyIiB0eXBlPSJET01Mb2FkZXIiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+WGVyY2VzIGxvYWRlciBjbGFzcy4gVGhlIGxvYWRpbmcgaXMgYWx3YXlzIG5hbWVzcGFjZSBhd2FyZS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxmaWVsZHM+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Imh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik5BTUVTUEFDRVNfRkVBVFVSRSIgY29uc3RleHByPSImcXVvdDtodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVkFMSURBVElPTl9GRUFUVVJFIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU0NIRU1BX1ZBTElEQVRJT05fRkVBVFVSRSIgY29uc3RleHByPSImcXVvdDtodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEmcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYS1mdWxsLWNoZWNraW5nIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNDSEVNQV9GVUxMX0NIRUNLSU5HX0ZFQVRVUkUiIGNvbnN0ZXhwcj0iJnF1b3Q7aHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hLWZ1bGwtY2hlY2tpbmcmcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL2R5bmFtaWMiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRFlOQU1JQ19WQUxJREFUSU9OX0ZFQVRVUkUiIGNvbnN0ZXhwcj0iJnF1b3Q7aHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vZHluYW1pYyZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL25vbnZhbGlkYXRpbmcvbG9hZC1leHRlcm5hbC1kdGQiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTE9BRF9FWFRFUk5BTF9EVERfRkVBVFVSRSIgY29uc3RleHByPSImcXVvdDtodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvbm9udmFsaWRhdGluZy9sb2FkLWV4dGVybmFsLWR0ZCZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvamF4cC9wcm9wZXJ0aWVzL3NjaGVtYUxhbmd1YWdlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkpBWFBfU0NIRU1BX0xBTkdVQUdFIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2pheHAvcHJvcGVydGllcy9zY2hlbWFMYW5ndWFnZSZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVzNDX1hNTF9TQ0hFTUEiIGNvbnN0ZXhwcj0iJnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC9wcm9wZXJ0aWVzL2RvbS9kb2N1bWVudC1jbGFzcy1uYW1lIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRPQ1VNRU5UX0lNUExFTUVOVEFUSU9OX1BST1BFUlRZIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly9hcGFjaGUub3JnL3htbC9wcm9wZXJ0aWVzL2RvbS9kb2N1bWVudC1jbGFzcy1uYW1lJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJvcmcuYXBhY2hlLnhlcmNlcy5kb20uUFNWSURvY3VtZW50SW1wbCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJET0NVTUVOVF9QU1ZJX0lNUExFTUVOVEFUSU9OIiBjb25zdGV4cHI9IiZxdW90O29yZy5hcGFjaGUueGVyY2VzLmRvbS5QU1ZJRG9jdW1lbnRJbXBsJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgbmFtZT0iX3ZhbGlkYXRpbmciIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgbmFtZT0iX3NjaGVtYSIgZnVsbHR5cGU9ImphdmF4LnhtbC52YWxpZGF0aW9uLlNjaGVtYSIgdHlwZT0iU2NoZW1hIiAvPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYZXJjZXNMb2FkZXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIFhlcmNlcyBsb2FkZXIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWGVyY2VzTG9hZGVyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic2NoZW1hIiBmdWxsdHlwZT0iamF2YXgueG1sLnZhbGlkYXRpb24uU2NoZW1hIiB0eXBlPSJTY2hlbWEiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImxvYWQiIHJldHVybmNvbW1lbnQ9IlRoZSBsb2FkZWQgZG9jdW1lbnQuIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uRG9jdW1lbnQiIHR5cGU9IkRvY3VtZW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBYZXJjZXMgbG9hZGVyIGxvYWRzIHRoZSBYTUwgZG9jdW1lbnQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aW4KLSAgICAgICAgICAgIGlzIHRoZSBpbnB1dCBzdHJlYW0uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RE9NTG9hZGVyRXhjZXB0aW9uCi0gICAgICAgICAgICAgRE9NIGxvYWRlciBleGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGxvYWRlZCBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImluIiBjb21tZW50PSJpcyB0aGUgaW5wdXQgc3RyZWFtLiIgZnVsbHR5cGU9ImphdmEuaW8uSW5wdXRTdHJlYW0iIHR5cGU9IklucHV0U3RyZWFtIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IkRPTSBsb2FkZXIgZXhjZXB0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXJFeGNlcHRpb24iIHR5cGU9IkRPTUxvYWRlckV4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfdmFsaWRhdGluZyIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IHZhbGlkYXRpbmcgYm9vbGVhbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgaXMgdGhlIHZhbHVlIHRvIHNldCB0aGUgdmFsaWRhdGluZyBib29sZWFuIHRvLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iaXMgdGhlIHZhbHVlIHRvIHNldCB0aGUgdmFsaWRhdGluZyBib29sZWFuIHRvLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhQYXRoTm9kZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9IlhQYXRoTm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGgiIHR5cGU9IlhQYXRoIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgWFBhdGguPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhQYXRoIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBYUGF0aC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXhwcnMKLSAgICAgICAgICAgIFhQYXRoIGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZXhwcnMiIGNvbW1lbnQ9IlhQYXRoIGV4cHJlc3Npb25zLiIgZnVsbHR5cGU9ImphdmEudXRpbC5Db2xsZWN0aW9uIiB0eXBlPSJDb2xsZWN0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0iWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRvciIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuSXRlcmF0b3IiIHR5cGU9Ikl0ZXJhdG9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJGdW5jdGlvbkxpYnJhcnkiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uIiBzdXBlcmNsYXNzZnVsbHR5cGU9IkZ1bmN0aW9uTGlicmFyeSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeSIgdHlwZT0iRm5GdW5jdGlvbkxpYnJhcnkiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5NYWludGFpbnMgYSBsaWJyYXJ5IG9mIGNvcmUgZnVuY3Rpb25zIGFuZCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL3d3dy53My5vcmcvMjAwNS94cGF0aC1mdW5jdGlvbnMiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFBBVEhfRlVOQ1RJT05TX05TIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlBhdGggdG8geHBhdGggZnVuY3Rpb25zIHNwZWNpZmljYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJGbkZ1bmN0aW9uTGlicmFyeSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRm5GdW5jdGlvbkxpYnJhcnkuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ29uc3RydWN0b3JGTCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24iIHN1cGVyY2xhc3NmdWxsdHlwZT0iQ29uc3RydWN0b3JGTCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5YU0N0ckxpYnJhcnkiIHR5cGU9IlhTQ3RyTGlicmFyeSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlhNTCBTY2hlbWEgY29udHJvbCBsaWJyYXJ5IHN1cHBvcnQuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYTUxfU0NIRU1BX05TIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlBhdGggdG8gdzMub3JnIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTQ3RyTGlicmFyeSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgWFNDdHJMaWJyYXJ5LjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJBbnlTaW1wbGVUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIiB0eXBlPSJBbnlBdG9taWNUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q29tbW9uIGJhc2UgZm9yIGV2ZXJ5IGF0b21pYyB0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkFueUF0b21pY1R5cGUiIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iQW55VHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZSIgdHlwZT0iQW55U2ltcGxlVHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNvbW1vbiBiYXNlIGZvciBldmVyeSBzaW1wbGUgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBbnlTaW1wbGVUeXBlIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q29tbW9uIGJhc2UgZm9yIGV2ZXJ5IHR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQW55VHlwZSIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IkRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iRGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik5vZGVUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQXR0clR5cGUiIHR5cGU9IkF0dHJUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQXR0cmlidXRlVHlwZSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBdHRyVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byBudWxsPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQXR0clR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnYKLSAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGUgYmVpbmcgcmVwcmVzZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGNvbW1lbnQ9IlRoZSBhdHRyaWJ1dGUgYmVpbmcgcmVwcmVzZW50ZWQiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5BdHRyIiB0eXBlPSJBdHRyIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7YXR0cmlidXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDthdHRyaWJ1dGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlZF92YWx1ZSIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJub2RlX25hbWUiIHJldHVybmNvbW1lbnQ9Ik5hbWUgb2YgdGhlIG5vZGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmFtZSBvZiB0aGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzSUQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzSURSRUYiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImlzQXR0clR5cGUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZU5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJDdHJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIHR5cGU9IkNhbGVuZGFyVHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNvbW1vbiBiYXNlIGZvciBhbGwgQ2FsZW5kYXIgYmFzZWQgY2xhc3NlczwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJDYWxlbmRhclR5cGUiIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOb2RlVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNvbW1lbnRUeXBlIiB0eXBlPSJDb21tZW50VHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIENvbW1lbnRUeXBlIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkNvbW1lbnRUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2UgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnYKLSAgICAgICAgICAgIFRoZSBjb21tZW50IGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBjb21tZW50PSJUaGUgY29tbWVudCBiZWluZyByZXByZXNlbnRlZCIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLkNvbW1lbnQiIHR5cGU9IkNvbW1lbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDtjb21tZW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtjb21tZW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21tZW50IGJlaW5nIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1lbnQgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1lbnQgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZWRfdmFsdWUiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBjb21tZW50IHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBjb21tZW50IHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGNvbW1lbnQgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm9kZV9uYW1lIiByZXR1cm5jb21tZW50PSJudWxsIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5VbnN1cHBvcnRlZCBtZXRob2QgZm9yIHRoaXMgbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGw8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEUkVGIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJBbnlBdG9taWNUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIiB0eXBlPSJDdHJUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3RyVHlwZSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJDdHJUeXBlIiAvPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iVGhlIHJlc3VsdGluZyBSZXN1bHRTZXF1ZW5jZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VXNlZCBmb3IgY29uc3RydWN0b3IgZnVuY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgRWl0aGVyIGFuIGVtcHR5IHNlcXVlbmNlIG9yIDEgYXRvbWljIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgcmVzdWx0aW5nIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IkVpdGhlciBhbiBlbXB0eSBzZXF1ZW5jZSBvciAxIGF0b21pYyB0eXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iTm9kZVR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlIiB0eXBlPSJEb2NUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRG9jdW1lbnRUeXBlIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRvY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnYKLSAgICAgICAgICAgIFRoZSBkb2N1bWVudCBiZWluZyByZXByZXNlbnRlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgY29tbWVudD0iVGhlIGRvY3VtZW50IGJlaW5nIHJlcHJlc2VudGVkIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uRG9jdW1lbnQiIHR5cGU9IkRvY3VtZW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0iQWN0dWFsIGRvY3VtZW50IGJlaW5nIHJlcHJlc2VudGVkIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uRG9jdW1lbnQiIHR5cGU9IkRvY3VtZW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIGRvY3VtZW50IGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BY3R1YWwgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7ZG9jdW1lbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2RvY3VtZW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZWRfdmFsdWUiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm9kZV9uYW1lIiByZXR1cm5jb21tZW50PSJRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgbm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5RTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzSUQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzSURSRUYiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iTm9kZVR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5FbGVtZW50VHlwZSIgdHlwZT0iRWxlbWVudFR5cGUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBFbGVtZW50VHlwZSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJFbGVtZW50VHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byBhIG51bGwgZWxlbWVudDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkVsZW1lbnRUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj52Ci0gICAgICAgICAgICBUaGUgZWxlbWVudCBiZWluZyByZXByZXNlbnRlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgY29tbWVudD0iVGhlIGVsZW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5FbGVtZW50IiB0eXBlPSJFbGVtZW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0iQWN0dWFsIGVsZW1lbnQgdmFsdWUgYmVpbmcgcmVwcmVzZW50ZWQiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5FbGVtZW50IiB0eXBlPSJFbGVtZW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIGVsZW1lbnQgdmFsdWUgYmVpbmcgcmVwcmVzZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2VsZW1lbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2VsZW1lbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVsZW1lbnQgYmVpbmcgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlZF92YWx1ZSIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVudCBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InRleHRub2RlX3N0cmluZ3MiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBzdXBwbGllZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZWN1cnNpdmVseSBjb25jYXRlbmF0ZSBUZXh0Tm9kZSBzdHJpbmdzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5vZGUKLSAgICAgICAgICAgIE5vZGUgdG8gcmVjdXJzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZSIgY29tbWVudD0iTm9kZSB0byByZWN1cnNlIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uTm9kZSIgdHlwZT0iTm9kZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5vZGVfbmFtZSIgcmV0dXJuY29tbWVudD0iUU5hbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIG5vZGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UU5hbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuaWxsZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzSUQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzSURSRUYiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImlzRWxlbWVudFR5cGUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZU5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJBbnlUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIGEgTm9kZSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iSURSRUYiIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iU0NIRU1BX1RZUEVfSURSRUYiIGNvbnN0ZXhwcj0iJnF1b3Q7SURSRUYmcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IklEIiB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9IlNDSEVNQV9UWVBFX0lEIiBjb25zdGV4cHI9IiZxdW90O0lEJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJOb2RlVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bm9kZQotICAgICAgICAgICAgVGhlIE5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmRvY3VtZW50X29yZGVyCi0gICAgICAgICAgICBUaGUgZG9jdW1lbnQgb3JkZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGNvbW1lbnQ9IlRoZSBOb2RlIGJlaW5nIHJlcHJlc2VudGVkIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uTm9kZSIgdHlwZT0iTm9kZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm9kZV92YWx1ZSIgcmV0dXJuY29tbWVudD0iQWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5Ob2RlIiB0eXBlPSJOb2RlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkFjdHVhbCBub2RlIGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVkX3ZhbHVlIiByZXR1cm5jb21tZW50PSJBY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm9kZV9uYW1lIiByZXR1cm5jb21tZW50PSJRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgbm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5RTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5pbGxlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkb21fdG9feHBhdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZSIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLk5vZGUiIHR5cGU9Ik5vZGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVsaW1pbmF0ZV9kdXBzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic29ydF9kb2N1bWVudF9vcmRlciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJycyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNhbWUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJiIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImJlZm9yZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0d28iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJiZWZvcmUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJiIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFmdGVyIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InR3byIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFmdGVyIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImEiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iYiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJnZXRUeXBlZFZhbHVlRm9yUHJpbWl0aXZlVHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGVEZWYiIGZ1bGx0eXBlPSJYU1R5cGVEZWZpbml0aW9uIiB0eXBlPSJYU1R5cGVEZWZpbml0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzSUQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEUkVGIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJpc1R5cGUiIHJldHVybmNvbW1lbnQ9IiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VXRpbGl0eSBtZXRob2QgdG8gY2hlY2sgdG8gc2VlIGlmIGEgcGFydGljdWxhciBUeXBlSW5mbyBtYXRjaGVzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50eXBlSW5mbzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHlwZU5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIiAvPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZUluZm8iIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLlR5cGVJbmZvIiB0eXBlPSJUeXBlSW5mbyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGVOYW1lIiBjb21tZW50PSIiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJDdHJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBOdW1lcmljVHlwZSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJOdW1lcmljVHlwZSIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iemVybyIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiBub2RlIHJlcHJlc250cyAwLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIHdoZXRoZXIgbm9kZSByZXByZXNudHMgMDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiBub2RlIHJlcHJlc250cyAwLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idW5hcnlfbWludXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlcgotIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWJzIiByZXR1cm5jb21tZW50PSJOZXcgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjZWlsaW5nIiByZXR1cm5jb21tZW50PSJBIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlCi0gICAgICAgICBudW1iZXIgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJmbG9vciIgcmV0dXJuY29tbWVudD0iQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAgICBudW1iZXIgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icm91bmQiIHJldHVybmNvbW1lbnQ9IkEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyb3VuZF9oYWxmX3RvX2V2ZW4iIHJldHVybmNvbW1lbnQ9IkEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyb3VuZF9oYWxmX3RvX2V2ZW4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icHJlY2lzaW9uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJnZXRfc2luZ2xlX2FyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfc2luZ2xlX3R5cGUiIHJldHVybmNvbW1lbnQ9IlRoZSBub2RlIGJlaW5nIHRlc3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIHdoZXRoZXIgdGhlIHN1cHBsaWVkIG5vZGUgaXMgb2YgdGhlIHN1cHBsaWVkIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXQKLSAgICAgICAgICAgIFRoZSBub2RlIGJlaW5nIHRlc3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHlwZQotICAgICAgICAgICAgVGhlIHR5cGUgZXhwZWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgbm9kZSBiZWluZyB0ZXN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3IKLSAgICAgICAgICAgICBJZiBub2RlIGJlaW5nIHRlc3RlZCBpcyBub3Qgb2YgZXhwZWN0ZWQgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXQiIGNvbW1lbnQ9IlRoZSBub2RlIGJlaW5nIHRlc3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZSIgY29tbWVudD0iVGhlIHR5cGUgZXhwZWN0ZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IklmIG5vZGUgYmVpbmcgdGVzdGVkIGlzIG5vdCBvZiBleHBlY3RlZCB0eXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0X3NpbmdsZV90eXBlIiByZXR1cm5jb21tZW50PSJUaGUgbm9kZSBiZWluZyB0ZXN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayB3aGV0aGVyIGZpcnN0IG5vZGUgaW4gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgaXMgb2YgdGhlIHN1cHBsaWVkCi0gdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ycwotICAgICAgICAgICAgVGhlIG5vZGUgYmVpbmcgdGVzdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50eXBlCi0gICAgICAgICAgICBUaGUgdHlwZSBleHBlY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBub2RlIGJlaW5nIHRlc3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcgotICAgICAgICAgICAgIElmIG5vZGUgYmVpbmcgdGVzdGVkIGlzIG5vdCBvZiBleHBlY3RlZCB0eXBlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJycyIgY29tbWVudD0iVGhlIG5vZGUgYmVpbmcgdGVzdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGUiIGNvbW1lbnQ9IlRoZSB0eXBlIGV4cGVjdGVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSJJZiBub2RlIGJlaW5nIHRlc3RlZCBpcyBub3Qgb2YgZXhwZWN0ZWQgdHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik5vZGVUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUElUeXBlIiB0eXBlPSJQSVR5cGUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUElUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj52Ci0gICAgICAgICAgICBUaGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50czwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZG9jX29yZGVyCi0gICAgICAgICAgICBUaGUgZG9jdW1lbnQgb3JkZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGNvbW1lbnQ9IlRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRoaXMgbm9kZSByZXByZXNlbnRzIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uIiB0eXBlPSJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJBY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50cyIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbiIgdHlwZT0iUHJvY2Vzc2luZ0luc3RydWN0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdGhpcyBub2RlIHJlcHJlc2VudHM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRoaXMgbm9kZSByZXByZXNlbnRzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24mcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24mcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uCi0gc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVkX3ZhbHVlIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotICAgICAgICAgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uCi0gICAgICAgICBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJub2RlX25hbWUiIHJldHVybmNvbW1lbnQ9IkEgUU5hbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdHMgdGhlIG5vZGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgUU5hbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEUkVGIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkN0clR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgYSBRTmFtZSBkYXRhdHlwZSAobmFtZSBvZiBhIG5vZGUpPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnByZWZpeAotICAgICAgICAgICAgUHJlZml4IG9mIHRoZSBub2RlIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmxvY2FsX3BhcnQKLSAgICAgICAgICAgIFRoZSBub2RlIG5hbWUgaXRzZWxmPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ucwotICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIG5vZGVuYW1lIGJlbG9uZ3MgdG88L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWZpeCIgY29tbWVudD0iUHJlZml4IG9mIHRoZSBub2RlIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsb2NhbF9wYXJ0IiBjb21tZW50PSJUaGUgbm9kZSBuYW1lIGl0c2VsZiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5zIiBjb21tZW50PSJUaGUgbmFtZXNwYWNlIHRoaXMgbm9kZW5hbWUgYmVsb25ncyB0byIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wcmVmaXgKLSAgICAgICAgICAgIFByZWZpeCBvZiB0aGUgbm9kZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sb2NhbF9wYXJ0Ci0gICAgICAgICAgICBUaGUgbm9kZSBuYW1lIGl0c2VsZjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icHJlZml4IiBjb21tZW50PSJQcmVmaXggb2YgdGhlIG5vZGUgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImxvY2FsX3BhcnQiIGNvbW1lbnQ9IlRoZSBub2RlIG5hbWUgaXRzZWxmIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHVzaW5nIG9ubHkgdGhlIG5vZGUgbmFtZSAobm8gcHJlZml4KTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sb2NhbF9wYXJ0Ci0gICAgICAgICAgICBUaGUgbm9kZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsb2NhbF9wYXJ0IiBjb21tZW50PSJUaGUgbm9kZSBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHdpdGggYSBudWxsIHByZWZpeCBhbmQgbnVsbCBub2RlIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZV9RTmFtZSIgcmV0dXJuY29tbWVudD0ibnVsbCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBRTmFtZSBieSBwYXJzaW5nIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzdHIiIGNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgUU5hbWUgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgUU5hbWUgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gZXh0cmFjdCBmcm9tPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFFOYW1lIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBleHRyYWN0IGZyb20iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nKCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOlFOYW1lJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpRTmFtZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O1FOYW1lJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtRTmFtZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmciIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXhwYW5kZWRfbmFtZSIgcmV0dXJuY29tbWVudD0iRnVsbCBwYXRobmFtZSBpbmNsdWRpbmcgbmFtZXNwYWNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZnVsbCBwYXRobmFtZSBpbmNsdWRpbmcgdGhlIG5hbWVzcGFjZS4gVGhpcyBtZXRob2QgbXVzdCBub3QKLSBiZSBjYWxsZWQgaWYgYSBuYW1lc3BhY2UgZG9lcyBleGlzdCBmb3IgdGhpcyBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5GdWxsIHBhdGhuYW1lIGluY2x1ZGluZyBuYW1lc3BhY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwcmVmaXgiIHJldHVybmNvbW1lbnQ9IlByZWZpeCBvZiB0aGUgbm9kZSZhcG9zO3MgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBwcmVmaXggb2YgdGhlIG5vZGUmYXBvcztzIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5QcmVmaXggb2YgdGhlIG5vZGUmYXBvcztzIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X25hbWVzcGFjZSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0cyB0aGUgbmFtZXNwYWNlIGZvciB0aGlzIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bgotICAgICAgICAgICAgTmFtZXNwYWNlIHRoaXMgbm9kZSBiZWxvbmdzIGluPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuIiBjb21tZW50PSJOYW1lc3BhY2UgdGhpcyBub2RlIGJlbG9uZ3MgaW4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuYW1lc3BhY2UiIHJldHVybmNvbW1lbnQ9Ik5hbWVzcGFjZSB0aGF0IHRoaXMgbm9kZSBiZWxvbmdzIGluIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgbmFtZXNwYWNlIHRoYXQgdGhpcyBub2RlIGJlbG9uZ3MgaW4uIFRoaXMgbWV0aG9kIG11c3Qgbm90Ci0gYmUgY2FsbGVkIGlmIHRoZSBub2RlIGRvZXMgbm90IGJlbG9uZyBpbiBhIG5hbWVzcGFjZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmFtZXNwYWNlIHRoYXQgdGhpcyBub2RlIGJlbG9uZ3MgaW48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsb2NhbCIgcmV0dXJuY29tbWVudD0iTm9kZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG5vZGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5vZGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJleHBhbmRlZCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiBhIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWZpbmVkIGZvciBub2RlLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIGZvciB3aGV0aGVyIGEgbmFtZXNwYWNlIGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoaXMgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiBhIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWZpbmVkIGZvciBub2RlLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcXVhbHMiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHR3byByZXByZXNlbnQgdGhlIHNhbWUgbm9kZS4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBRTmFtZSBhbmQgYSBzdXBwbGllZCBRTmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5vYmoKLSAgICAgICAgICAgIFRoZSBvYmplY3QgdG8gY29tcGFyZSB3aXRoLiBTaG91bGQgYmUgb2YgdHlwZSBRTmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHR3byByZXByZXNlbnQgdGhlIHNhbWUgbm9kZS4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJvYmoiIGNvbW1lbnQ9IlRoZSBvYmplY3QgdG8gY29tcGFyZSB3aXRoLiBTaG91bGQgYmUgb2YgdHlwZSBRTmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imhhc2hDb2RlIiByZXR1cm5jb21tZW50PSJUaGUgaGFzaGNvZGUgZm9yIHRoZSBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2FsY3VsYXRlcyB0aGUgaGFzaGNvZGUgZm9yIHRoZSBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgaGFzaGNvZGUgZm9yIHRoZSBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHR3byByZXByZXNlbnQgdGhlIHNhbWUgbm9kZS4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBRTmFtZSBhbmQgdGhlIHN1cHBsaWVkIFFOYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFFOYW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHR3byByZXByZXNlbnQgdGhlIHNhbWUgbm9kZS4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBRTmFtZSB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idG9TdHJpbmciIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOb2RlVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlRleHRUeXBlIiB0eXBlPSJUZXh0VHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFRleHRUeXBlIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlRleHRUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnYKLSAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgVGV4dFR5cGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgY29tbWVudD0iVGhlIHZhbHVlIG9mIHRoZSBUZXh0VHlwZSBub2RlIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uVGV4dCIgdHlwZT0iVGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3RleHQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3RleHQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCB2YWx1ZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlZF92YWx1ZSIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFRleHQgdmFsdWUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFRleHQgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVGV4dCB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJub2RlX25hbWUiIHJldHVybmNvbW1lbnQ9Im51bGwgKG5vIHVzZXIgZGVmaW5lZCBuYW1lIGZvciB0aGlzIG5vZGUgZ2V0cyBkZWZpbmVkKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VW5zdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIG5vZGV0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbCAobm8gdXNlciBkZWZpbmVkIG5hbWUgZm9yIHRoaXMgbm9kZSBnZXRzIGRlZmluZWQpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNJRCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+V2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlOzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEUkVGIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkRlY2ltYWxGb3JtYXQiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzZXJpYWxpemFibGU9InRydWUiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS50ZXh0LkRlY2ltYWxGb3JtYXQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFBhdGhEZWNpbWFsRm9ybWF0IiB0eXBlPSJYUGF0aERlY2ltYWxGb3JtYXQiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGlzIGlzIGFuIFhQYXRoIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIERlY2ltYWxGb3JtYXQgdG8gaGFuZGxlCi0gc29tZSBvZiB0aGUgeHBhdGggc3BlY2lmaWMgZm9ybWF0dGluZyByZXF1aXJlbWVudHMuICAgU3BlY2lmaWNhbGx5Ci0gaXQgYWxsb3dzIGZvciBFIyB0byBiZSByZXByZXNlbnRlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBleHBvbmVudCB2YWx1ZQotIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlIGFsbCBleGlzdGluZyBEZWNpbWFsRm9ybWF0IHBhdHRlcm5zIGFyZSBoYW5kbGVkCi0gYXMgaXMuPC9kZXNjcmlwdGlvbj4KLQkJCTxhdHRyaWJ1dGUgbmFtZT0iQGF1dGhvciI+Ci0JCQkJPGRlc2NyaXB0aW9uPmRjYXJ2ZXI8L2Rlc2NyaXB0aW9uPgotCQkJPC9hdHRyaWJ1dGU+Ci0JCQk8YXR0cmlidXRlIG5hbWU9IkBzZWUiPgotCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJPC9hdHRyaWJ1dGU+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYUGF0aERlY2ltYWxGb3JtYXQiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwYXR0ZXJuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ4cGF0aEZvcm1hdCIgcmV0dXJuY29tbWVudD0iIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkZvcm1hdHMgdGhlIHN0cmluZyBkcm9wcGluZyBhIFplcm8gRXhwb25lbnQgVmFsdWUgaWYgaXQgZXhpc3RzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5vYmo8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIiAvPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ib2JqIiBjb21tZW50PSIiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkN0clR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJIiB0eXBlPSJYU0FueVVSSSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlJlcHJlc2VudHMgYSBVbml2ZXJzYWwgUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSByZWZlcmVuY2U8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNBbnlVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QXJpdHkgMSBDb25zdHJ1Y3RvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVSSTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNBbnlVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QXJpdHkgMCBDb25zdHJ1Y3Rvci4gSW5pdGlhdGVzIFVSSSB0byBudWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6YW55VVJJJnF1b3Q7LCB0aGUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmFueVVSSSZxdW90OywgdGhlIGZ1bGwgdHlwZSBwYXRobmFtZSBvZiB0aGlzIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDthbnlVUkkmcXVvdDssIHRoZSB0eXBlIG5hbWUgb2YgdGhpcyBkYXRhdHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0eXBlIG5hbWUgb2YgdGhpcyBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7YW55VVJJJnF1b3Q7LCB0aGUgdHlwZSBuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9InRoZSBVUkkgdmFsdWUgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIHRoZSBVUkkgZGF0YXR5cGUgYXMgYQotICAgICAgICAgU3RyaW5nIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlRyYW5zZm9ybXMgYW5kIHJldHJpZXZlcyB0aGUgVVJJIHZhbHVlIG9mIHRoaXMgVVJJIGRhdGF0eXBlIGluIFN0cmluZwotIGZvcm1hdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIFVSSSB2YWx1ZSBoZWxkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgdGhlIFVSSSBkYXRhdHlwZSBhcyBhCi0gICAgICAgICBTdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0ibmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0aW9uIG9mIGEgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgYSBVUkkgZnJvbSBhIHByZXZpb3VzIHJlc3VsdAotIHNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIHByZXZpb3VzIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVVJJIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9InByZXZpb3VzIHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imd0IiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HcmVhdGVyIHRoYW4gY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibHQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkxlc3MgdGhhbiBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkN0clR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQmFzZTY0QmluYXJ5IiB0eXBlPSJYU0Jhc2U2NEJpbmFyeSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0Jhc2U2NEJpbmFyeSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgdG8gaW5pdGlhbGlzZSB0bzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTQmFzZTY0QmluYXJ5Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHRvIG51bGw8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmJhc2U2NEJpbmFyeSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6YmFzZTY0QmluYXJ5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7YmFzZTY0QmluYXJ5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtiYXNlNjRCaW5hcnkmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJUaGUgYmFzZTY0QmluYXJ5IHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgYmFzZTY0QmluYXJ5IHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJUaGUgYmFzZTY0QmluYXJ5IHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyBiYXNlNjRCaW5hcnkgdmFsdWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYmFzZTY0QmluYXJ5IHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGJhc2U2NEJpbmFyeSB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgYmFzZTY0QmluYXJ5IHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBiYXNlNjRCaW5hcnkgdmFsdWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBzYW1lLiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIGJhc2U2NEJpbmFyeTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIHNhbWUuIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkN0clR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbiIgdHlwZT0iWFNCb29sZWFuIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiBhIHRydWUgb3IgYSBmYWxzZSB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNCb29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYXRlcyB0aGUgbmV3IHJlcHJlc2VudGF0aW9uIHRvIHRoZSBib29sZWFuIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICBJbml0aWFsaXplcyB0aGlzIGRhdGF0eXBlIHRvIHJlcHJlc2VudCB0aGlzIGJvb2xlYW48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9IkluaXRpYWxpemVzIHRoaXMgZGF0YXR5cGUgdG8gcmVwcmVzZW50IHRoaXMgYm9vbGVhbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNCb29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYXRlcyB0byBhIGRlZmF1bHQgcmVwcmVzZW50YXRpb24gb2YgZmFsc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpib29sZWFuJnF1b3Q7LCB0aGUgZnVsbCBkYXRhdHlwZSBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmJvb2xlYW4mcXVvdDssIHRoZSBmdWxsIGRhdGF0eXBlIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtib29sZWFuJnF1b3Q7LCB3aGljaCBpcyB0aGUgZGF0YXR5cGUgbmFtZS4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgdGhlIGRhdGF0eXBlIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2Jvb2xlYW4mcXVvdDssIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSBuYW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0idGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmFsdWUiIHJldHVybmNvbW1lbnQ9InRoZSBhY3R1YWwgYm9vbGVhbiB2YWx1ZSBzdG9yZWQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIGJvb2xlYW4gdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgYWN0dWFsIGJvb2xlYW4gdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9IkEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBib29sZWFuIHZhbHVlIHN1cHBsaWVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgYm9vbGVhbiB2YWx1ZQotIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgYm9vbGVhbiB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYm9vbGVhbiB2YWx1ZSBzdXBwbGllZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGJvb2xlYW4gdmFsdWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlIGVxdWFsaXR5Ci0gICAgICAgICBjb21wYXJpc29uIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIGZvciBlcXVhbGl0eSBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuCi0gcmVwcmVzZW50YXRpb24uIFJldHVybnMgdHJ1ZSBpZiBib3RoIHJlcHJlc2VudCBzYW1lIGJvb2xlYW4gdmFsdWUsIGZhbHNlCi0gb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlCi0gICAgICAgICAgICB3aXRoLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlIGVxdWFsaXR5Ci0gICAgICAgICBjb21wYXJpc29uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgdG8gY29tcGFyZQotICAgICAgICAgICAgd2l0aC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ3QiIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlCi0gICAgICAgICBjb21wYXJpc29uIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIGJldHdlZW4gdGhlIHN1cHBsaWVkIGFuZCB0aGlzIGJvb2xlYW4gcmVwcmVzZW50YXRpb24uIFJldHVybnMKLSB0cnVlIGlmIHRoaXMgWFNCb29sZWFuIHJlcHJlc2VudHMgdHJ1ZSBhbmQgdGhhdCBYU0Jvb2xlYW4gc3VwcGxpZWQKLSByZXByZXNlbnRzIGZhbHNlLiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgdG8gY29tcGFyZQotICAgICAgICAgICAgd2l0aC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRydWUvZmFsc2UgcmVzdWx0IG9mIHRoZQotICAgICAgICAgY29tcGFyaXNvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHRvIGNvbXBhcmUKLSAgICAgICAgICAgIHdpdGguIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imx0IiByZXR1cm5jb21tZW50PSJOZXcgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRydWUvZmFsc2UgcmVzdWx0IG9mIHRoZQotICAgICAgICAgY29tcGFyaXNvbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zCi0gdHJ1ZSBpZiB0aGlzIFhTQm9vbGVhbiByZXByZXNlbnRzIGZhbHNlIGFuZCB0aGF0IFhTQm9vbGVhbiBzdXBwbGllZAotIHJlcHJlc2VudHMgdHJ1ZS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHRvIGNvbXBhcmUKLSAgICAgICAgICAgIHdpdGguPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0cnVlL2ZhbHNlIHJlc3VsdCBvZiB0aGUKLSAgICAgICAgIGNvbXBhcmlzb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlCi0gICAgICAgICAgICB3aXRoLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTU2hvcnQiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Nob3J0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQnl0ZSIgdHlwZT0iWFNCeXRlIj4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0J5dGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNCeXRlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGJ5dGUgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgQnl0ZSB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9IkJ5dGUgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpieXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpieXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7Ynl0ZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7Ynl0ZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO2J5dGUmYXBvczsgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgJmFwb3M7Ynl0ZSZhcG9zOyBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBieXRlIGlzIHRvIGJlIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztieXRlJmFwb3M7IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBieXRlIGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ2FsZW5kYXJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZSIgdHlwZT0iWFNEYXRlIj4KLQkJPGltcGxlbWVudHM+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xvbmVhYmxlIiB0eXBlPSJDbG9uZWFibGUiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+UmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIG9mIHRoZSBmb3JtIHllYXItbW9udGgtZGF5IGFuZCBvcHRpb25hbCB0aW1lem9uZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0RhdGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgYSBzdXBwbGllZCBkYXRlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmNhbAotICAgICAgICAgICAgVGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHoKLSAgICAgICAgICAgIFRoZSB0aW1lIHpvbmUgb2YgdGhlIGRhdGUgdG8gYmUgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2FsIiBjb21tZW50PSJUaGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaGUgdGltZSB6b25lIG9mIHRoZSBkYXRlIHRvIGJlIHN0b3JlZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0RhdGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZGF0ZTwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2RhdGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF5cGUgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2RhdGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF5cGUgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNsb25lIiByZXR1cm5jb21tZW50PSJBIGNvcHkgb2YgdGhpcyBkYXRlIHJlcHJlc2VudGF0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgZGF0ZSByZXByZXNlbnRhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBjb3B5IG9mIHRoaXMgZGF0ZSByZXByZXNlbnRhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIiB0eXBlPSJDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBhcnNlX2RhdGUiIHJldHVybmNvbW1lbnQ9IlRoZSBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlIiB0eXBlPSJYU0RhdGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSAob2YgdGhlIGZvcm0geWVhci1tb250aC1kYXkgb3IKLSB5ZWFyLW1vbnRoLWRheSt0aW1lem9uZSkgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mCi0gaXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGF0ZSB2YWx1ZSBzdXBwbGllZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRhdGUgdmFsdWUgaW4KLSB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRhdGUgdmFsdWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGRhdGUgdmFsdWUgc3VwcGxpZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkYXRlIHZhbHVlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InllYXIiIHJldHVybmNvbW1lbnQ9InRoZSB5ZWFyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIHRoZSB5ZWFyIGZyb20gdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgeWVhciB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb250aCIgcmV0dXJuY29tbWVudD0idGhlIG1vbnRoIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIHRoZSBtb250aCBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIG1vbnRoIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRheSIgcmV0dXJuY29tbWVudD0idGhlIGRheSB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgZGF5IGZyb20gdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgZGF5IHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InRpbWV6b25lZCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGVyZSBpcyBhIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGUuIEZhbHNlCi0gICAgICAgICBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgd2hldGhlciB0aGlzIGRhdGUgaGFzIGFuIG9wdGlvbmFsIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGVyZSBpcyBhIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGUuIEZhbHNlCi0gICAgICAgICBvdGhlcndpc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6ZGF0ZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaXZlIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpkYXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2FsZW5kYXIiIHJldHVybmNvbW1lbnQ9IkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEudXRpbC5DYWxlbmRhciIgdHlwZT0iQ2FsZW5kYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR6IiByZXR1cm5jb21tZW50PSJ0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIGRhdGVzIGFyZSByZXByZXNlbnQgdGhlIHNhbWUgZXhhY3QgcG9pbnQgaW4gdGltZS4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVxdWFsaXR5IGNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8KLSBhY2NvdW50KTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgdHdvIGRhdGVzIGFyZSByZXByZXNlbnQgdGhlIHNhbWUgZXhhY3QgcG9pbnQgaW4gdGltZS4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibHQiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgaW4gdGltZSwgdGhpcyBkYXRlIGxpZXMgYmVmb3JlIHRoZSBkYXRlIHN1cHBsaWVkLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgKHRha2luZyB0aW1lem9uZXMgaW50byBhY2NvdW50KTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgbGllcyBiZWZvcmUgdGhlIGRhdGUgc3VwcGxpZWQuIEZhbHNlCi0gICAgICAgICBvdGhlcndpc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imd0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBsaWVzIGFmdGVyIHRoZSBkYXRlIHN1cHBsaWVkLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgKHRha2luZyB0aW1lem9uZXMgaW50byBhY2NvdW50KTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgbGllcyBhZnRlciB0aGUgZGF0ZSBzdXBwbGllZC4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmFsdWUiIHJldHVybmNvbW1lbnQ9Ik51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGJlZ2luaW5nIG9mIHRoZSBlcG9jaCIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkN1cnJlbnRseSB1bnN1cHBvcnRlZCBtZXRob2QuIFJldHJpZXZlcyB0aGUgZGF0ZSBpbiBtaWxsaXNlY29uZHMgc2luY2UKLSB0aGUgYmVnaW5pbmcgb2YgZXBvY2g8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGJlZ2luaW5nIG9mIHRoZSBlcG9jaDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1pbnVzIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBtaW51cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlIGFuZCBhIHN1cHBsaWVkIHJlc3VsdAotIHNlcXVlbmNlIChYU0RhdGUsIFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkKLSB2YWxpZCBvbmVzKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzCi0gICAgICAgICAgICBvcGVyYXRvci4gSWYgdGhpcyBpcyBhbiBYU0RhdGUsIHRoZSByZXN1bHQgd2lsbCBiZSBhCi0gICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiB0aGVzZSB0d28KLSAgICAgICAgICAgIGRhdGVzLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4KLSAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGUgb2YgdGhlIHJlc3VsdAotICAgICAgICAgICAgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotICAgICAgICAgICAgb3BlcmF0b3IuIElmIHRoaXMgaXMgYW4gWFNEYXRlLCB0aGUgcmVzdWx0IHdpbGwgYmUgYQotICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlc2UgdHdvCi0gICAgICAgICAgICBkYXRlcy4gSWYgYXJnIGlzIGFuIFhEVFllYXJNb250aER1cmF0aW9uIG9yIGFuCi0gICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlIG9mIHRoZSByZXN1bHQKLSAgICAgICAgICAgIG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBsdXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbWludXMgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkgdmFsaWQKLSBvbmVzKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzCi0gICAgICAgICAgICBvcGVyYXRvci4gSWYgYXJnIGlzIGFuIFhEVFllYXJNb250aER1cmF0aW9uIG9yIGFuCi0gICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlIG9mIHRoZSByZXN1bHQKLSAgICAgICAgICAgIG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBtaW51cyBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMKLSAgICAgICAgICAgIG9wZXJhdG9yLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4KLSAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGUgb2YgdGhlIHJlc3VsdAotICAgICAgICAgICAgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDYWxlbmRhclR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZSIgdHlwZT0iWFNEYXRlVGltZSI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lYWJsZSIgdHlwZT0iQ2xvbmVhYmxlIiAvPgotCQk8L2ltcGxlbWVudHM+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGF0ZVRpbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhdGVzIGEgbmV3IHJlcHJlc2VudGF0aW9uIG9mIGEgc3VwcGxpZWQgZGF0ZSBhbmQgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jYWwKLSAgICAgICAgICAgIFRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR6Ci0gICAgICAgICAgICBUaGUgdGltZXpvbmUgb2YgdGhlIGRhdGUgdG8gYmUgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2FsIiBjb21tZW50PSJUaGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgYW5kIHRpbWUgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaGUgdGltZXpvbmUgb2YgdGhlIGRhdGUgdG8gYmUgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGF0ZVRpbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGl0YXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNsb25lIiByZXR1cm5jb21tZW50PSJBIGNvcHkgb2YgdGhpcyBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBjb3B5IG9mIHRoaXMgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIiB0eXBlPSJDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2RhdGVUaW1lJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRheXBlIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtkYXRlVGltZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXlwZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc19kaWdpdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGlzIG51bWVyaWMuIEZhbHNlIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIHRvIHNlZSBpZiBhIGNoYXJhY3RlciBpcyBudW1lcmljPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIENoYXJhY3RlciB0byBiZSB0ZXN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgbnVtZXJpYy4gRmFsc2Ugb3RoZXJ3aXNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iQ2hhcmFjdGVyIHRvIGJlIHRlc3RlZCIgZnVsbHR5cGU9ImNoYXIiIHR5cGU9ImNoYXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBhcnNlX2RhdGUiIHJldHVybmNvbW1lbnQ9IkludGVnZXIgYXJyYXkgb2Ygc2l6ZSAzLiBFbGVtZW50IDEgaXMgdGhlIHllYXIsIGVsZW1lbnQgMiBpcyB0aGUKLSAgICAgICAgIG1vbnRoIGFuZCBlbGVtZW50IDMgaXMgdGhlIGRheSIgZnVsbHR5cGU9ImludFtdIiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZSB5ZWFyLAotIG1vbnRoIGFuZCBkYXkgZnJvbSBpdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5JbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIGlzIHRoZSB5ZWFyLCBlbGVtZW50IDIgaXMgdGhlCi0gICAgICAgICBtb250aCBhbmQgZWxlbWVudCAzIGlzIHRoZSBkYXk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfdGltZSIgcmV0dXJuY29tbWVudD0iSW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSBpcyB0aGUgaG91ciwgZWxlbWVudCAyIGlzIHRoZQotICAgICAgICAgbWludXRlIGFuZCBlbGVtZW50IDMgaXMgdGhlIHNlY29uZHMiIGZ1bGx0eXBlPSJkb3VibGVbXSIgdHlwZT0iZG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUgaG91ciwKLSBtaW51dGUgYW5kIHNlY29uZHMgZnJvbSBpdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5JbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIGlzIHRoZSBob3VyLCBlbGVtZW50IDIgaXMgdGhlCi0gICAgICAgICBtaW51dGUgYW5kIGVsZW1lbnQgMyBpcyB0aGUgc2Vjb25kczwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZV90aW1lem9uZSIgcmV0dXJuY29tbWVudD0iSW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSByZXByZXNlbnRzIHdoZXRoZXIgdGhlCi0gICAgICAgICB0aW1lem9uZSBpcyBhaGVhZCBvciBiZWhpbmQgR01ULCBlbGVtZW50IDIgaXMgdGhlIGhvdXIKLSAgICAgICAgIGRpc3BsYWNlbWVudCBhbmQgZWxlbWVudCAzIGlzIHRoZSBtaW51dGUgZGlzcGxhY2VtZW50LiIgZnVsbHR5cGU9ImludFtdIiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZQotIHRpbWV6b25lIGZyb20gaXQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+SW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSByZXByZXNlbnRzIHdoZXRoZXIgdGhlCi0gICAgICAgICB0aW1lem9uZSBpcyBhaGVhZCBvciBiZWhpbmQgR01ULCBlbGVtZW50IDIgaXMgdGhlIGhvdXIKLSAgICAgICAgIGRpc3BsYWNlbWVudCBhbmQgZWxlbWVudCAzIGlzIHRoZSBtaW51dGUgZGlzcGxhY2VtZW50LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZURhdGVUaW1lIiByZXR1cm5jb21tZW50PSJUaGUgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSAoYW5kIG9wdGlvbmFsCi0gICAgICAgICB0aW1lem9uZSkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZSIgdHlwZT0iWFNEYXRlVGltZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0gWFNEYXRlVGltZSBvYmplY3QgdXNpbmcgdGhhdCBpbmZvcm1hdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSAoYW5kIG9wdGlvbmFsCi0gICAgICAgICB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGF0ZSBhbmQgdGltZSB2YWx1ZQotICAgICAgICAgc3VwcGxpZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkYXRlIGFuZCB0aW1lCi0gdmFsdWUgaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkYXRlIGFuZCB0aW1lCi0gICAgICAgICAgICB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGF0ZSBhbmQgdGltZSB2YWx1ZQotICAgICAgICAgc3VwcGxpZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkYXRlIGFuZCB0aW1lCi0gICAgICAgICAgICB2YWx1ZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ5ZWFyIiByZXR1cm5jb21tZW50PSJ0aGUgeWVhciB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgeWVhciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHllYXIgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibW9udGgiIHJldHVybmNvbW1lbnQ9InRoZSBtb250aCB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgbW9udGggZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtb250aCB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkYXkiIHJldHVybmNvbW1lbnQ9InRoZSBkYXkgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgdGhlIGRheSBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGRheSB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJob3VyIiByZXR1cm5jb21tZW50PSJ0aGUgaG91ciB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgaG91ciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGhvdXIgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibWludXRlIiByZXR1cm5jb21tZW50PSJ0aGUgbWludXRlIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIHRoZSBtaW51dGUgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtaW51dGUgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2Vjb25kIiByZXR1cm5jb21tZW50PSJ0aGUgc2Vjb25kcyB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgc2Vjb25kcyBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHNlY29uZHMgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBhZF9pbnQiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFkZGVkIGludGVnZXIiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFkcyB0aGUgc3VwcGxpZWQgbnVtYmVyIHRvIHRoZSBzdXBwbGllZCBudW1iZXIgb2YgZGlnaXRzIGJ5IGFkZGluZyAwJmFwb3M7cwotIGluIGZyb250IG9mIGl0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bQotICAgICAgICAgICAgTnVtYmVyIHRoYXQgc2kgdG8gYmUgcGFkZGVkIChpZiBuZWNjZXNzYXkpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sZW4KLSAgICAgICAgICAgIERlc2lyZWQgbGVuZ3RoIGFmdGVyIHBhZGRpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhZGRlZCBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJudW0iIGNvbW1lbnQ9Ik51bWJlciB0aGF0IHNpIHRvIGJlIHBhZGRlZCAoaWYgbmVjY2Vzc2F5KSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ibGVuIiBjb21tZW50PSJEZXNpcmVkIGxlbmd0aCBhZnRlciBwYWRkaW5nIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGFuZCB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGFuZCB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpkYXRlVGltZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaXZlIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpkYXRlVGltZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNhbGVuZGFyIiByZXR1cm5jb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ2FsZW5kYXIiIHR5cGU9IkNhbGVuZGFyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5DYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIGRhdGVzIGFuZCB0aW1lcyBhcmUgcmVwcmVzZW50IHRoZSBzYW1lIGV4YWN0Ci0gICAgICAgICBwb2ludCBpbiB0aW1lLiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZwotIHRpbWV6b25lcyBpbnRvIGFjY291bnQpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgdHdvIGRhdGVzIGFuZCB0aW1lcyBhcmUgcmVwcmVzZW50IHRoZSBzYW1lIGV4YWN0Ci0gICAgICAgICBwb2ludCBpbiB0aW1lLiBGYWxzZSBvdGhlcndpc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0byIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgYW5kIHRpbWUgbGllcyBiZWZvcmUgdGhlIGRhdGUgYW5kIHRpbWUKLSAgICAgICAgIHN1cHBsaWVkLiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZyB0aW1lem9uZXMKLSBpbnRvIGFjY291bnQpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgYW5kIHRpbWUgbGllcyBiZWZvcmUgdGhlIGRhdGUgYW5kIHRpbWUKLSAgICAgICAgIHN1cHBsaWVkLiBGYWxzZSBvdGhlcndpc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0byIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJndCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgYW5kIHRpbWUgbGllcyBhZnRlciB0aGUgZGF0ZSBhbmQgdGltZQotICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzIGFuZCB0aW1lcyAodGFraW5nIHRpbWV6b25lcwotIGludG8gYWNjb3VudCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBYU0RhdGVUaW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG88L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBhbmQgdGltZSBsaWVzIGFmdGVyIHRoZSBkYXRlIGFuZCB0aW1lCi0gICAgICAgICBzdXBwbGllZC4gRmFsc2Ugb3RoZXJ3aXNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJYU0RhdGVUaW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9InRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBiZWdpbmluZyBvZiB0aGUgZXBvY2giIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DdXJyZW50bHkgdW5zdXBwb3J0ZWQgbWV0aG9kLiBSZXRyaWV2ZXMgdGhlIGRhdGUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlCi0gdGhlIGJlZ2luaW5nIG9mIGVwb2NoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBiZWdpbmluZyBvZiB0aGUgZXBvY2g8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51cyIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBtaW51cyBvcGVyYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbWludXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZVRpbWUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhTRGF0ZVRpbWUsIFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlCi0gb25seSB2YWxpZCBvbmVzKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzCi0gICAgICAgICAgICBvcGVyYXRvci4gSWYgdGhpcyBpcyBhbiBYU0RhdGVUaW1lLCB0aGUgcmVzdWx0IHdpbGwgYmUgYQotICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlc2UgdHdvCi0gICAgICAgICAgICBkYXRlcy4gSWYgYXJnIGlzIGFuIFhEVFllYXJNb250aER1cmF0aW9uIG9yIGFuCi0gICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlVGltZSBvZiB0aGUKLSAgICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY3VycmVudCBkYXRlIG1pbnVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0gICAgICAgICAgICBzdXBwbGllZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotICAgICAgICAgICAgb3BlcmF0b3IuIElmIHRoaXMgaXMgYW4gWFNEYXRlVGltZSwgdGhlIHJlc3VsdCB3aWxsIGJlIGEKLSAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlIHR3bwotICAgICAgICAgICAgZGF0ZXMuIElmIGFyZyBpcyBhbiBYRFRZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZVRpbWUgb2YgdGhlCi0gICAgICAgICAgICByZXN1bHQgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZQotICAgICAgICAgICAgc3VwcGxpZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBsdXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbWludXMgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGVUaW1lIGFuZCBhIHN1cHBsaWVkCi0gcmVzdWx0IHNlcXVlbmNlIChYRFRZZWFyTW9udGhEdXJhdGlvbiBhbmQgWERURGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5Ci0gdmFsaWQgb25lcykuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotICAgICAgICAgICAgb3BlcmF0b3IuIElmIGFyZyBpcyBhbiBYRFRZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZVRpbWUgb2YgdGhlCi0gICAgICAgICAgICByZXN1bHQgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZQotICAgICAgICAgICAgc3VwcGxpZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBtaW51cyBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMKLSAgICAgICAgICAgIG9wZXJhdG9yLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4KLSAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGVUaW1lIG9mIHRoZQotICAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUKLSAgICAgICAgICAgIHN1cHBsaWVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTRHVyYXRpb24iIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uIiB0eXBlPSJYU0RheVRpbWVEdXJhdGlvbiI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lYWJsZSIgdHlwZT0iQ2xvbmVhYmxlIiAvPgotCQk8L2ltcGxlbWVudHM+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERheVRpbWVEdXJhdGlvbiBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0RheVRpbWVEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycy4gSWYgbW9yZSB0aGFuIDI0IGhvdXJzIGlzCi0gc3VwcGxpZWQsIHRoZSBudW1iZXIgb2YgZGF5cyBpcyBhZGp1c3RlZCBhY29yZGluZ2x5LiBUaGUgc2FtZSBvY2N1cnMgZm9yCi0gbWludXRlcyBhbmQgc2Vjb25kczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kYXlzCi0gICAgICAgICAgICBOdW1iZXIgb2YgZGF5cyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmhvdXJzCi0gICAgICAgICAgICBOdW1iZXIgb2YgaG91cnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5taW51dGVzCi0gICAgICAgICAgICBOdW1iZXIgb2YgbWludXRlcyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnNlY29uZHMKLSAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmVnYXRpdmUKLSAgICAgICAgICAgIFRydWUgaWYgdGhpcyBkdXJhdGlvbiBvZiB0aW1lIHJlcHJlc2VudHMgYSBiYWNrd2FyZHMgcGFzc2FnZQotICAgICAgICAgICAgdGhyb3VnaCB0aW1lLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRheXMiIGNvbW1lbnQ9Ik51bWJlciBvZiBkYXlzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iaG91cnMiIGNvbW1lbnQ9Ik51bWJlciBvZiBob3VycyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1pbnV0ZXMiIGNvbW1lbnQ9Ik51bWJlciBvZiBtaW51dGVzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ic2Vjb25kcyIgY29tbWVudD0iTnVtYmVyIG9mIHNlY29uZHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuZWdhdGl2ZSIgY29tbWVudD0iVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0gICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEYXlUaW1lRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnNlY3MKLSAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzZWNzIiBjb21tZW50PSJOdW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGF5VGltZUR1cmF0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHRvIGEgZHVyYXRpb24gb2Ygbm8gdGltZSAoMGRheXMsIDBob3VycywgMG1pbnV0ZXMsIDBzZWNvbmRzKTwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjbG9uZSIgcmV0dXJuY29tbWVudD0iTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIGNvcHkgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhIHRpbWUgZHVyYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIiB0eXBlPSJDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZURURHVyYXRpb24iIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2RheVRpbWVEdXJhdGlvbiZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cml2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtkYXlUaW1lRHVyYXRpb24mcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmRheVRpbWVEdXJhdGlvbiZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6ZGF5VGltZUR1cmF0aW9uJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBsdXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiBhZnRlcgotICAgICAgICAgdGhlIGFkZGl0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbik8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBhZGQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLSAgICAgICAgIHRoZSBhZGRpdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSB0byBhZGQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51cyIgcmV0dXJuY29tbWVudD0iTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0gICAgICAgICB0aGUgc3VidHJhY3Rpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIHN1YnRyYWN0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0gICAgICAgICB0aGUgc3VidHJhY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gc3VidHJhY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0aW1lcyIgcmV0dXJuY29tbWVudD0iTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0gICAgICAgICB0aGUgbXVsdGlwbGljYXRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIG11bHRpcGx5IGJ5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0gICAgICAgICB0aGUgbXVsdGlwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gbXVsdGlwbHkgYnkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkaXYiIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiBhZnRlcgotICAgICAgICAgdGhlIGRpdmlzaW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgZGl2aXNpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbik8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBkaXZpZGUgYnk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLSAgICAgICAgIHRoZSBkaXZpc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSB0byBkaXZpZGUgYnkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik51bWVyaWNUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEZWNpbWFsIiB0eXBlPSJYU0RlY2ltYWwiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGVjaW1hbCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwLjA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0RlY2ltYWwiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhdGVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG51bWJlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBOdW1iZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJOdW1iZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0RlY2ltYWwiIHR5cGU9IkJpZ0RlY2ltYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEZWNpbWFsIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmRlY2ltYWwmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmRlY2ltYWwmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtkZWNpbWFsJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtkZWNpbWFsJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIHZhbHVlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iemVybyIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgaWYgdGhpcyBYU0RlY2ltYWwgcmVwcmVzZW50cyAwPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoaXMgWFNEZWNpbWFsIHJlcHJlc2VudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9IkEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkZWNpbWFsIG51bWJlciBzdXBwbGllZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRlY2ltYWwKLSBudW1iZXIgaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkZWNpbWFsIG51bWJlci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGVjaW1hbCBudW1iZXIgc3VwcGxpZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkZWNpbWFsIG51bWJlci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkb3VibGVfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQiIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBkZXByZWNhdGVkIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5Vc2UgZ2V0VmFsdWUoKSBpbnN0ZWFkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImdldFZhbHVlIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0RlY2ltYWwiIHR5cGU9IkJpZ0RlY2ltYWwiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X2RvdWJsZSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0cyB0aGUgbnVtYmVyIHN0b3JlZCB0byB0aGF0IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIE51bWJlciB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9Ik51bWJlciB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSAyIHJlcHJlc2VudGF0aW9uIHJlcHJlc2VudCB0aGUgc2FtZSBudW1iZXIuIEZhbHNlCi0gICAgICAgICBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hdAotICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEZWNpbWFsKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIDIgcmVwcmVzZW50YXRpb24gcmVwcmVzZW50IHRoZSBzYW1lIG51bWJlci4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXQiIGNvbW1lbnQ9IlJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUKLSAgICAgICAgICAgIFhTRGVjaW1hbCkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imd0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSBzdXBwbGllZCB0eXBlIHJlcHJlc2VudHMgYSBudW1iZXIgc21hbGxlciB0aGFuIHRoaXMKLSAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEZWNpbWFsKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBzbWFsbGVyIHRoYW4gdGhpcwotICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUKLSAgICAgICAgICAgIFhTRGVjaW1hbCkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImNvbnZlcnRBcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibHQiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBncmVhdGVyIHRoYW4gdGhpcwotICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0gICAgICAgICAgICBYU0RlY2ltYWwpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGlzCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEZWNpbWFsKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGx1cyIgcmV0dXJuY29tbWVudD0iQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIGFkZGl0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEZWNpbWFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgYWRkaXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibWludXMiIHJldHVybmNvbW1lbnQ9IkEgWFNEZWNpbWFsIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBzdWJ0cmFjdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIHN1YnRyYWN0aW9uIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgc3VidHJhY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0aW1lcyIgcmV0dXJuY29tbWVudD0iQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG11bHRpcGxpY2F0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEZWNpbWFsIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBtdWx0aXBsaWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRpdiIgcmV0dXJuY29tbWVudD0iQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIGRpdmlzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgZGl2aXNpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEZWNpbWFsIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBkaXZpc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlkaXYiIHJldHVybmNvbW1lbnQ9IkEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGludGVnZXIKLSAgICAgICAgIGRpdmlzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sCi0gdGhlIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0RlY2ltYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgaW50ZWdlcgotICAgICAgICAgZGl2aXNpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb2QiIHJldHVybmNvbW1lbnQ9IkEgWFNEZWNpbWFsIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0gUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEZWNpbWFsIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InVuYXJ5X21pbnVzIiByZXR1cm5jb21tZW50PSJBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoaXMgWFNEZWNpbWFsIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5OZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGlzIFhTRGVjaW1hbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFicyIgcmV0dXJuY29tbWVudD0iQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2VpbGluZyIgcmV0dXJuY29tbWVudD0iQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImZsb29yIiByZXR1cm5jb21tZW50PSJBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAgICBudW1iZXIgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAgICBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icm91bmQiIHJldHVybmNvbW1lbnQ9IkEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icm91bmRfaGFsZl90b19ldmVuIiByZXR1cm5jb21tZW50PSJBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJvdW5kX2hhbGZfdG9fZXZlbiIgcmV0dXJuY29tbWVudD0iQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cHJlY2lzaW9uIEFuIGludGVnZXIgcHJlY2lzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwcmVjaXNpb24iIGNvbW1lbnQ9IkFuIGludGVnZXIgcHJlY2lzaW9uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik51bWVyaWNUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGUiIHR5cGU9IlhTRG91YmxlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRG91YmxlIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG51bWJlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBOdW1iZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJOdW1iZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEb3VibGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEb3VibGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdXNpbmcgYSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmluaXQKLSAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaW5pdCIgY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBhcnNlX2RvdWJsZSIgcmV0dXJuY29tbWVudD0iTmV3IFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlIiB0eXBlPSJYU0RvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmkKLSAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIG51bWJlciBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaSIgY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9IkEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb3VibGUgbnVtYmVyIHN1cHBsaWVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZG91YmxlIG51bWJlcgotIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZG91YmxlIG51bWJlci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZG91YmxlIG51bWJlciBzdXBwbGllZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRvdWJsZSBudW1iZXIuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmRvdWJsZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6ZG91YmxlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7ZG91YmxlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtkb3VibGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuYW4iIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIE5hTi4gRmFsc2Ugb3RoZXJ3aXNlLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIE5hTjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgTmFOLiBGYWxzZSBvdGhlcndpc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaW5maW5pdGUiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIGluZmluaXR5LiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgYW4gaW5maW5pdGUgbnVtYmVyIChuZWdhdGl2ZSBvciBwb3NpdGl2ZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIGluZmluaXR5LiBGYWxzZSBvdGhlcndpc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iemVybyIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIDA8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuZWdhdGl2ZVplcm8iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRvdWJsZV92YWx1ZSIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIDIgcmVwcmVzZW50YXRpb25zIHJlcHJlc2VudCB0aGUgc2FtZSBudW1iZXIuIEZhbHNlCi0gICAgICAgICBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hYQotICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEb3VibGUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgMiByZXByZXNlbnRhdGlvbnMgcmVwcmVzZW50IHRoZSBzYW1lIG51bWJlci4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhYSIgY29tbWVudD0iUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEb3VibGUpIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJndCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiB0aGlzCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUKLSAgICAgICAgICAgIFhTRG91YmxlKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBzbWFsbGVyIHRoYW4gdGhpcwotICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUKLSAgICAgICAgICAgIFhTRG91YmxlKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iY29udmVydEFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGlzCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBDdXJyZW50bHkKLSBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIGV4aXN0cyBzbyB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gbXVzdCBiZQotIG9mIHR5cGUgWFNEb3VibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEb3VibGUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGlzCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEb3VibGUpIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwbHVzIiByZXR1cm5jb21tZW50PSJBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGFkZGl0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgYWRkaXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibWludXMiIHJldHVybmNvbW1lbnQ9IkEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIHN1YnRyYWN0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gc3VidHJhY3Rpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIHN1YnRyYWN0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBzdWJ0cmFjdGlvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InRpbWVzIiByZXR1cm5jb21tZW50PSJBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBtdWx0aXBsaWNhdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLAotIHRoZSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEb3VibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gbXVsdGlwbGljYXRpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG11bHRpcGxpY2F0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBtdWx0aXBsaWNhdGlvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRpdiIgcmV0dXJuY29tbWVudD0iQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBkaXZpc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGRpdmlzaW9uIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGRpdmlzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBkaXZpc2lvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlkaXYiIHJldHVybmNvbW1lbnQ9IkEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGludGVnZXIKLSAgICAgICAgIGRpdmlzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyCi0gICAgICAgICBkaXZpc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1vZCIgcmV0dXJuY29tbWVudD0iQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIG1vZHVsdXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idW5hcnlfbWludXMiIHJldHVybmNvbW1lbnQ9IkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGlzIFhTRGVjaW1hbCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGlzIFhTRGVjaW1hbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFicyIgcmV0dXJuY29tbWVudD0iQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5BYnNvbHV0ZXMgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNlaWxpbmciIHJldHVybmNvbW1lbnQ9IkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlCi0gICAgICAgICBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZmxvb3IiIHJldHVybmNvbW1lbnQ9IkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAgICBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icm91bmQiIHJldHVybmNvbW1lbnQ9IkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJvdW5kX2hhbGZfdG9fZXZlbiIgcmV0dXJuY29tbWVudD0iQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icm91bmRfaGFsZl90b19ldmVuIiByZXR1cm5jb21tZW50PSJBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZAotIHByZWNpc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cHJlY2lzaW9uCi0gICAgICAgICAgICBBbiBpbnRlZ2VyIHByZWNpc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwcmVjaXNpb24iIGNvbW1lbnQ9IkFuIGludGVnZXIgcHJlY2lzaW9uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkN0clR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB4czpkdXJhdGlvbiBkYXRhIHR5cGUuIE90aGVyIGR1cmF0aW9uIGltcGxlbWVudGF0aW9ucwotIHNob3VsZCBpbmhlcml0IGZyb20gdGhpcyBpbXBsZW1lbnRhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCTxkZXNjcmlwdGlvbj4xLjEgVGhpcyB1c2VkIHRvIGJlIGFuIGFic3RyYWN0IGNsYXNzIGJ1dCB3YXMgaW5jb3JyZWN0bHkgaW1wbGVtZW50ZWQKLSAgICAgICAgYXMgc3VjaC48L2Rlc2NyaXB0aW9uPgotCQkJPC9hdHRyaWJ1dGU+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9Il95ZWFyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJfbW9udGgiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9Il9kYXlzIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJfaG91cnMiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9Il9taW51dGVzIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJfc2Vjb25kcyIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIiAvPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iX25lZ2F0aXZlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJPC9maWVsZHM+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycy4gSWYgbW9yZSB0aGFuIDI0IGhvdXJzIGlzCi0gc3VwcGxpZWQsIHRoZSBudW1iZXIgb2YgZGF5cyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4gVGhlIHNhbWUgb2NjdXJzIGZvcgotIG1pbnV0ZXMgYW5kIHNlY29uZHM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eWVhcnMKLSAgICAgICAgICAgIE51bWJlciBvZiB5ZWFycyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tb250aHMKLSAgICAgICAgICAgIE51bWJlciBvZiBtb250aHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZGF5cwotICAgICAgICAgICAgTnVtYmVyIG9mIGRheXMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ob3VycwotICAgICAgICAgICAgTnVtYmVyIG9mIGhvdXJzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bWludXRlcwotICAgICAgICAgICAgTnVtYmVyIG9mIG1pbnV0ZXMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zZWNvbmRzCi0gICAgICAgICAgICBOdW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5lZ2F0aXZlCi0gICAgICAgICAgICBUcnVlIGlmIHRoaXMgZHVyYXRpb24gb2YgdGltZSByZXByZXNlbnRzIGEgYmFja3dhcmRzIHBhc3NhZ2UKLSAgICAgICAgICAgIHRocm91Z2ggdGltZS4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ5ZWFycyIgY29tbWVudD0iTnVtYmVyIG9mIHllYXJzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZS4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1vbnRocyIgY29tbWVudD0iTnVtYmVyIG9mIG1vbnRocyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJkYXlzIiBjb21tZW50PSJOdW1iZXIgb2YgZGF5cyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImhvdXJzIiBjb21tZW50PSJOdW1iZXIgb2YgaG91cnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtaW51dGVzIiBjb21tZW50PSJOdW1iZXIgb2YgbWludXRlcyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InNlY29uZHMiIGNvbW1lbnQ9Ik51bWJlciBvZiBzZWNvbmRzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ibmVnYXRpdmUiIGNvbW1lbnQ9IlRydWUgaWYgdGhpcyBkdXJhdGlvbiBvZiB0aW1lIHJlcHJlc2VudHMgYSBiYWNrd2FyZHMgcGFzc2FnZQotICAgICAgICAgICAgdGhyb3VnaCB0aW1lLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnNlY3MKLSAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzZWNzIiBjb21tZW50PSJOdW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdG8gYSBkdXJhdGlvbiBvZiBubyB0aW1lICgwZGF5cywgMGhvdXJzLCAwbWludXRlcywgMHNlY29uZHMpPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRheXMiIHJldHVybmNvbW1lbnQ9Ik51bWJlciBvZiBkYXlzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBkYXlzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk51bWJlciBvZiBkYXlzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51dGVzIiByZXR1cm5jb21tZW50PSJOdW1iZXIgb2YgbWludXRlcyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBudW1iZXIgb2YgbWludXRlcyAobWF4IDYwKSB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk51bWJlciBvZiBtaW51dGVzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJob3VycyIgcmV0dXJuY29tbWVudD0iTnVtYmVyIG9mIGhvdXJzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBob3VycyAobWF4IDI0KSB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OdW1iZXIgb2YgaG91cnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNlY29uZHMiIHJldHVybmNvbW1lbnQ9Ik51bWJlciBvZiBzZWNvbmRzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIChtYXggNjApIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZXkgYm90aCByZXByZXNlbnQgdGhlIGR1cmF0aW9uIG9mIHRpbWUuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgZHVyYXRpb24gb2YgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgbGFyZ2VyIGR1cmF0aW9uIHRoYW4gdGhhdAotICAgICAgICAgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBsYXJnZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0gICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ3QiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIHNtYWxsZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0gICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIHNtYWxsZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0gICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibmVnYXRpdmUiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoIHRpbWUuCi0gICAgICAgICBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaAotIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoIHRpbWUuCi0gICAgICAgICBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0iTnVtYmVyIG9mIHNlY29uZHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQgYXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHdpdGhpbiBpdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TnVtYmVyIG9mIHNlY29uZHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgdGltZSBkdXJhdGlvbiBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBkdXJhdGlvbgotIGZyb20gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0aW1lIGR1cmF0aW9uIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZURURHVyYXRpb24iIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjbG9uZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9ImphdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgdHlwZT0iQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24iIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ieWVhciIgcmV0dXJuY29tbWVudD0iTnVtYmVyIG9mIHllYXJzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiB5ZWFycyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OdW1iZXIgb2YgeWVhcnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1vbnRoIiByZXR1cm5jb21tZW50PSJOdW1iZXIgb2YgbW9udGhzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtb250aHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iaXNDYXN0YWJsZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhYXQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIgdHlwZT0iQW55QXRvbWljVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNOQ05hbWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05DTmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0VudGl0eSIgdHlwZT0iWFNFbnRpdHkiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5CdWlsdCBpbiBEYXRhIFR5cGUgZm9yIHhzOkVudGl0eTwvZGVzY3JpcHRpb24+Ci0JCQk8YXR0cmlidXRlIG5hbWU9IkBhdXRob3IiPgotCQkJCTxkZXNjcmlwdGlvbj5kY2FydmVyPC9kZXNjcmlwdGlvbj4KLQkJCTwvYXR0cmlidXRlPgotCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJPC9hdHRyaWJ1dGU+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0VudGl0eSIgLz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRW50aXR5Ij4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idmFsdWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIEVOVElUWSBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgd2l0aGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiAgVGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoaXMKLSBpcyByZWxheGVkIGZyb20gdGhlIFhNTCBTY2hlbWEgcmVxdWlyZW1lbnQuICBUaGUgRU5USVRZIGRvZXMKLSBub3QgaGF2ZSB0byBiZSBsb2NhdGVkIG9yIGV4cGFuZGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5kCi0gZXZhbHVhdGlvbiBmb3IgY2FzdGluZy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBFTlRJVFk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgRU5USVRZIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIEVOVElUWSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iTnVtZXJpY1R5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Zsb2F0IiB0eXBlPSJYU0Zsb2F0Ij4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRmxvYXQgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNGbG9hdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbnVtYmVyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIFRoZSBudW1iZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJUaGUgbnVtYmVyIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImZsb2F0IiB0eXBlPSJmbG9hdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0Zsb2F0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmZsb2F0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpmbG9hdCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2Zsb2F0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtmbG9hdCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBudW1iZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5hbiIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpcyB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgTmFOLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBOYU48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaXMgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIE5hTi4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaW5maW5pdGUiIHJldHVybmNvbW1lbnQ9IlRydWUgaXMgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIGluZmluaXR5LiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBpbmZpbml0eTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpcyB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgaW5maW5pdHkuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Inplcm8iIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDA8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5lZ2F0aXZlWmVybyIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBmbG9hdCBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBmbG9hdCBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsb2F0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGZsb2F0IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsb2F0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZmxvYXRfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlRoZSBhY3R1YWwgZmxvYXQgdmFsdWUgc3RvcmVkIiBmdWxsdHlwZT0iZmxvYXQiIHR5cGU9ImZsb2F0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIGZsb2F0IHZhbHVlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCBmbG9hdCB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgbnVtYmVyLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YWEKLSAgICAgICAgICAgIFRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSBudW1iZXIuIEZhbHNlCi0gICAgICAgICBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFhIiBjb21tZW50PSJUaGUgZGF0YXR5cGUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imd0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiBpcyBhIHNtYWxsZXIgbnVtYmVyIHRoYW4gdGhlCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiBpcyBhIHNtYWxsZXIgbnVtYmVyIHRoYW4gdGhlCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGRhdGF0eXBlIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gaXMgYSBncmVhdGVyIG51bWJlciB0aGFuIHRoZQotICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgZGF0YXR5cGUgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gaXMgYSBncmVhdGVyIG51bWJlciB0aGFuIHRoZQotICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGx1cyIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGFkZGl0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGFkZGl0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1pbnVzIiByZXR1cm5jb21tZW50PSJBIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIHN1YnRyYWN0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIHN1YnRyYWN0aW9uIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIHN1YnRyYWN0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIHN1YnRyYWN0aW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXMiIHJldHVybmNvbW1lbnQ9IkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbXVsdGlwbGljYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbXVsdGlwbGljYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkaXYiIHJldHVybmNvbW1lbnQ9IkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBkaXZpc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGRpdmlzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIGRpdmlzaW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaWRpdiIgcmV0dXJuY29tbWVudD0iQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgaW50ZWdlcgotICAgICAgICAgZGl2aXNpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgaW50ZWdlcgotICAgICAgICAgZGl2aXNpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb2QiIHJldHVybmNvbW1lbnQ9IkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIG1vZHVsdXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNGbG9hdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ1bmFyeV9taW51cyIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk5lZ2F0ZXMgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWJzIiByZXR1cm5jb21tZW50PSJBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNlaWxpbmciIHJldHVybmNvbW1lbnQ9IkEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImZsb29yIiByZXR1cm5jb21tZW50PSJBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyb3VuZCIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJvdW5kX2hhbGZfdG9fZXZlbiIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJvdW5kX2hhbGZfdG9fZXZlbiIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZCBwcmVjaXNpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnByZWNpc2lvbiBBbiBpbnRlZ2VyIHByZWNpc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWNpc2lvbiIgY29tbWVudD0iQW4gaW50ZWdlciBwcmVjaXNpb24iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImNvbnZlcnRBcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDYWxlbmRhclR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5IiB0eXBlPSJYU0dEYXkiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEYXkgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNHRGF5Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jYWwKLSAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50egotICAgICAgICAgICAgVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjYWwiIGNvbW1lbnQ9IkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0dEYXkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXk8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtnRGF5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtnRGF5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfZ0RheSIgcmV0dXJuY29tbWVudD0iVGhlIFhTR0RheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dEYXkiIHR5cGU9IlhTR0RheSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXkgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHRGF5Ci0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIFhTR0RheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIGRheSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnRGF5IGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdEYXkgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ0RheSBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkYXkiIHJldHVybmNvbW1lbnQ9IlRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXIiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBkYXkgYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCBkYXkgYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InRpbWV6b25lZCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBkYXkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgZGF5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBkYXk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6Z0RheSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6Z0RheSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjYWxlbmRhciIgcmV0dXJuY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ2FsZW5kYXIiIHR5cGU9IkNhbGVuZGFyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIGRheS4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dEYXk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNHRGF5IHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIGRheS4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgWFNHRGF5IHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eiIgcmV0dXJuY29tbWVudD0idGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkNhbGVuZGFyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aCIgdHlwZT0iWFNHTW9udGgiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnTW9udGggZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNHTW9udGgiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbW9udGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y2FsCi0gICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50egotICAgICAgICAgICAgVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9udGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNhbCIgY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEudXRpbC5DYWxlbmRhciIgdHlwZT0iQ2FsZW5kYXIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eiIgY29tbWVudD0iVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9udGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0dNb250aCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7Z01vbnRoJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtnTW9udGgmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZV9nTW9udGgiIHJldHVybmNvbW1lbnQ9IlRoZSBYU0dNb250aCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aCIgdHlwZT0iWFNHTW9udGgiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9udGggYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHTW9udGgKLSByZXByZXNlbnRhdGlvbiBvZiBpdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBYU0dNb250aCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgbW9udGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ01vbnRoIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdNb250aCBpcyB0byBiZSBleHRyYWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgbW9udGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdNb250aCBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb250aCIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpnTW9udGgmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmdNb250aCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjYWxlbmRhciIgcmV0dXJuY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEudXRpbC5DYWxlbmRhciIgdHlwZT0iQ2FsZW5kYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5DYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG1vbnRoLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR01vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFhTR01vbnRoIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG1vbnRoLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBYU0dNb250aCB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9InRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDYWxlbmRhclR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGhEYXkiIHR5cGU9IlhTR01vbnRoRGF5Ij4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTW9udGhEYXkgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNHTW9udGhEYXkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbW9udGggYW5kIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jYWwKLSAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBhbmQgZGF5IHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHoKLSAgICAgICAgICAgIFRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vbnRoIGFuZCBkYXk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNhbCIgY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb250aCBhbmQgZGF5IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNHTW9udGhEYXkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBtb250aCBhbmQgZGF5PC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7Z01vbnRoRGF5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtnTW9udGhEYXkmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZV9nTW9udGhEYXkiIHJldHVybmNvbW1lbnQ9IlRoZSBYU0dNb250aERheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aERheSIgdHlwZT0iWFNHTW9udGhEYXkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9udGggYW5kIGRheSBhbmQgY29uc3RydWN0cyBhIG5ldwotIFhTR01vbnRoRGF5IHJlcHJlc2VudGF0aW9uIG9mIGl0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgKGFuZCBvcHRpb25hbAotICAgICAgICAgICAgdGltZXpvbmUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIFhTR01vbnRoRGF5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzdHIiIGNvbW1lbnQ9IlRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgKGFuZCBvcHRpb25hbAotICAgICAgICAgICAgdGltZXpvbmUpIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBtb250aCBhbmQgZGF5IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdNb250aERheSBpbgotIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnTW9udGhEYXkgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIG1vbnRoIGFuZCBkYXk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdNb250aERheSBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb250aCIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGF5IiByZXR1cm5jb21tZW50PSJUaGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0aW1lem9uZWQiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIGZvciB3aGV0aGVyIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZCBhdCBjcmVhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGggYW5kIGRheSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aCBhbmQgZGF5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aCBhbmQgZGF5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmdNb250aERheSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6Z01vbnRoRGF5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNhbGVuZGFyIiByZXR1cm5jb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ2FsZW5kYXIiIHR5cGU9IkNhbGVuZGFyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5DYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgbW9udGggYW5kIGRheS4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dNb250aERheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBYU0dNb250aERheSB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSBtb250aCBhbmQgZGF5LgotICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBYU0dNb250aERheSB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9InRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ2FsZW5kYXJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXIiIHR5cGU9IlhTR1llYXIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnTW9udGggZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNHWWVhciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jYWwKLSAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR6Ci0gICAgICAgICAgICBUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2FsIiBjb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb250aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTR1llYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCB5ZWFyPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7Z1llYXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2dZZWFyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfZ1llYXIiIHJldHVybmNvbW1lbnQ9IlRoZSBYU0dZZWFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXIiIHR5cGU9IlhTR1llYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgeWVhciBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0dZZWFyCi0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBYU0dZZWFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzdHIiIGNvbW1lbnQ9IlRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ1llYXIgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ1llYXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdZZWFyIGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InllYXIiIHJldHVybmNvbW1lbnQ9IlRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InRpbWV6b25lZCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6Z1llYXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmdZZWFyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNhbGVuZGFyIiByZXR1cm5jb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ2FsZW5kYXIiIHR5cGU9IkNhbGVuZGFyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5DYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgeWVhci4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dZZWFyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFhTR1llYXIgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgeWVhci4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgWFNHWWVhciB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9InRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ2FsZW5kYXJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXJNb250aCIgdHlwZT0iWFNHWWVhck1vbnRoIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgWWVhck1vbnRoIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTR1llYXJNb250aCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB5ZWFyIGFuZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jYWwKLSAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR6Ci0gICAgICAgICAgICBUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB5ZWFyIGFuZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2FsIiBjb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB5ZWFyIGFuZCBtb250aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTR1llYXJNb250aCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHllYXIgYW5kIG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7Z1llYXJNb250aCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7Z1llYXJNb250aCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBhcnNlX2dZZWFyTW9udGgiIHJldHVybmNvbW1lbnQ9IlRoZSBYU0dZZWFyTW9udGggcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHWWVhck1vbnRoIiB0eXBlPSJYU0dZZWFyTW9udGgiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgeWVhciBhbmQgbW9udGggYW5kIGNvbnN0cnVjdHMgYSBuZXcKLSBYU0dZZWFyTW9udGggcmVwcmVzZW50YXRpb24gb2YgaXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggKGFuZCBvcHRpb25hbAotICAgICAgICAgICAgdGltZXpvbmUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIFhTR1llYXJNb250aCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCAoYW5kIG9wdGlvbmFsCi0gICAgICAgICAgICB0aW1lem9uZSkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXIgYW5kIG1vbnRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdZZWFyTW9udGggaW4KLSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ1llYXJNb250aCBpcyB0byBiZQotICAgICAgICAgICAgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXIgYW5kIG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnWWVhck1vbnRoIGlzIHRvIGJlCi0gICAgICAgICAgICBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ5ZWFyIiByZXR1cm5jb21tZW50PSJUaGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlciIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb250aCIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIgYW5kIG1vbnRoIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIgYW5kIG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyIGFuZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpnWWVhck1vbnRoJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpnWWVhck1vbnRoJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNhbGVuZGFyIiByZXR1cm5jb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgeWVhciBhbmQgbW9udGguCi0gICAgICAgICBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHWWVhck1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFhTR1llYXJNb250aCB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSB5ZWFyIGFuZCBtb250aC4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgWFNHWWVhck1vbnRoIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eiIgcmV0dXJuY29tbWVudD0idGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDdHJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0hleEJpbmFyeSIgdHlwZT0iWFNIZXhCaW5hcnkiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB4czpoZXhCaW5hcnkgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNIZXhCaW5hcnkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBUaGUgU3RyaW5nIHRvIGluaXRpYWxpc2UgdG88L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9IlRoZSBTdHJpbmcgdG8gaW5pdGlhbGlzZSB0byIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0hleEJpbmFyeSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byBudWxsPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpoZXhCaW5hcnkmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmhleEJpbmFyeSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2hleEJpbmFyeSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7aGV4QmluYXJ5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iVGhlIGhleEJpbmFyeSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdmFsdWUoKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGhleEJpbmFyeSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0iVGhlIGhleEJpbmFyeSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBoZXhCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBoZXhCaW5hcnkgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgaGV4QmluYXJ5IHZhbHVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGhleEJpbmFyeSB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBoZXhCaW5hcnkgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIGhleEJpbmFyeSB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgaGV4QmluYXJ5IHZhbHVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbiBhcmUgc2FtZS4gRmFsc2Ugb3RoZXJ3aXNlLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSBoZXhCaW5hcnk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBzYW1lLiBGYWxzZSBvdGhlcndpc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYU05DTmFtZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTkNOYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSUQiIHR5cGU9IlhTSUQiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTSUQiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTSUQiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTTkNOYW1lIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRFJFRiIgdHlwZT0iWFNJRFJFRiI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNJRFJFRiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNJRFJFRiIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNMb25nIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNMb25nIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50IiB0eXBlPSJYU0ludCI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNJbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNJbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgaW50IHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIEludCB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9IkludCB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmludCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6aW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7aW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtpbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztpbnQmYXBvczsgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgJmFwb3M7aW50JmFwb3M7IGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGludCBpcyB0byBiZSBleHRyYWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7aW50JmFwb3M7IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBpbnQgaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYU0RlY2ltYWwiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWwiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyIiB0eXBlPSJYU0ludGVnZXIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBJbnRlZ2VyIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTSW50ZWdlciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0ludGVnZXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBJbnRlZ2VyIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iSW50ZWdlciB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtpbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtpbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnRlZ2VyIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iemVybyIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpcyB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBpcyAwLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIHdoZXRoZXIgdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgaXMgMDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpcyB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBpcyAwLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGludGVnZXIgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgaW50ZWdlciBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBpbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBpbnRlZ2VyIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBpbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImludF92YWx1ZSIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdJbnRlZ2VyIiB0eXBlPSJCaWdJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIGludGVnZXIgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgYWN0dWFsIGludGVnZXIgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X2ludCIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0cyB0aGUgaW50ZWdlciBzdG9yZWQgdG8gdGhhdCBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBJbnRlZ2VyIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iSW50ZWdlciB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBsdXMiIHJldHVybmNvbW1lbnQ9IkEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBhZGRpdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIGFkZGl0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1pbnVzIiByZXR1cm5jb21tZW50PSJBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgc3VidHJhY3Rpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBzdWJ0cmFjdGlvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIHN1YnRyYWN0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIHN1YnRyYWN0aW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXMiIHJldHVybmNvbW1lbnQ9IkEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBtdWx0aXBsaWNhdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG11bHRpcGxpY2F0aW9uIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbXVsdGlwbGljYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb2QiIHJldHVybmNvbW1lbnQ9IkEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InVuYXJ5X21pbnVzIiByZXR1cm5jb21tZW50PSJOZXcgWFNJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5OZWdhdGVzIHRoZSBpbnRlZ2VyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBpbnRlZ2VyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFicyIgcmV0dXJuY29tbWVudD0iTmV3IFhTSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIG9mIHRoZSBpbnRlZ2VyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QWJzb2x1dGVzIHRoZSBpbnRlZ2VyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIG9mIHRoZSBpbnRlZ2VyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imd0IiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iY29udmVydEFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRpdiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYU0ludGVnZXIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNMb25nIiB0eXBlPSJYU0xvbmciPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTTG9uZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0xvbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbG9uZyB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBMb25nIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iTG9uZyB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmxvbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmxvbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtsb25nJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtsb25nJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7bG9uZyZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBsb25nIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGxvbmcgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO2xvbmcmYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGxvbmcgaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYU1N0cmluZyIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTkNOYW1lIiB0eXBlPSJYU05DTmFtZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIE5DTmFtZSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU05DTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIFN0cmluZyB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9IlN0cmluZyB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNOQ05hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdG8gbnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6TkNOYW1lJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpOQ05hbWUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtOQ05hbWUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O05DTmFtZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIE5DTmFtZSBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBOQ05hbWUgd2l0aGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgTkNOYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIE5DTmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBOQ05hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTTm9uUG9zaXRpdmVJbnRlZ2VyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25Qb3NpdGl2ZUludGVnZXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOZWdhdGl2ZUludGVnZXIiIHR5cGU9IlhTTmVnYXRpdmVJbnRlZ2VyIj4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU05lZ2F0aXZlSW50ZWdlciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIC0xPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNOZWdhdGl2ZUludGVnZXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbmVnYXRpdmVJbnRlZ2VyIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIG5lZ2F0aXZlSW50ZWdlciB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9Im5lZ2F0aXZlSW50ZWdlciB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOm5lZ2F0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6bmVnYXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7bmVnYXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtuZWdhdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztuZWdhdGl2ZUludGVnZXImYXBvczsgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbmVnYXRpdmVJbnRlZ2VyCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5lZ2F0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7bmVnYXRpdmVJbnRlZ2VyJmFwb3M7IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBuZWdhdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYU0ludGVnZXIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25OZWdhdGl2ZUludGVnZXIiIHR5cGU9IlhTTm9uTmVnYXRpdmVJbnRlZ2VyIj4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU05vbk5lZ2F0aXZlSW50ZWdlciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU05vbk5lZ2F0aXZlSW50ZWdlciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBub25OZWdhdGl2ZUludGVnZXIgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgbm9uTmVnYXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0ibm9uTmVnYXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdJbnRlZ2VyIiB0eXBlPSJCaWdJbnRlZ2VyIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6bm9uTmVnYXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpub25OZWdhdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtub25OZWdhdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O25vbk5lZ2F0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO25vbk5lZ2F0aXZlSW50ZWdlciZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBub25OZWdhdGl2ZUludGVnZXIKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbm9uTmVnYXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztub25OZWdhdGl2ZUludGVnZXImYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5vbk5lZ2F0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTSW50ZWdlciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlciIgdHlwZT0iWFNOb25Qb3NpdGl2ZUludGVnZXIiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTTm9uUG9zaXRpdmVJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTTm9uUG9zaXRpdmVJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG5vblBvc2l0aXZlSW50ZWdlciB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBub25Qb3NpdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJub25Qb3NpdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpub25Qb3NpdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOm5vblBvc2l0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O25vblBvc2l0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7bm9uUG9zaXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7bm9uUG9zaXRpdmVJbnRlZ2VyJmFwb3M7IHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIG5vblBvc2l0aXZlSW50ZWdlcgotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBub25Qb3NpdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO25vblBvc2l0aXZlSW50ZWdlciZhcG9zOyBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbm9uUG9zaXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ3RyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb3RhdGlvbiIgdHlwZT0iWFNOb3RhdGlvbiI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNOb3RhdGlvbiIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTTm9uTmVnYXRpdmVJbnRlZ2VyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25OZWdhdGl2ZUludGVnZXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNQb3NpdGl2ZUludGVnZXIiIHR5cGU9IlhTUG9zaXRpdmVJbnRlZ2VyIj4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Bvc2l0aXZlSW50ZWdlciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDE8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Bvc2l0aXZlSW50ZWdlciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBwb3NpdGl2ZUludGVnZXIgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgcG9zaXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0icG9zaXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdJbnRlZ2VyIiB0eXBlPSJCaWdJbnRlZ2VyIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6cG9zaXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpwb3NpdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtwb3NpdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3Bvc2l0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO3Bvc2l0aXZlSW50ZWdlciZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBwb3NpdGl2ZUludGVnZXIKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgcG9zaXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztwb3NpdGl2ZUludGVnZXImYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHBvc2l0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTSW50IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTaG9ydCIgdHlwZT0iWFNTaG9ydCI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNTaG9ydCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Nob3J0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHNob3J0IHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIFNob3J0IHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iU2hvcnQgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpzaG9ydCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6c2hvcnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtzaG9ydCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7c2hvcnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztzaG9ydCZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSAmYXBvcztzaG9ydCZhcG9zOyBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBzaG9ydCBpcyB0byBiZSBleHRyYWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7c2hvcnQmYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHNob3J0IGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ3RyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmciIHR5cGU9IlhTU3RyaW5nIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3RyaW5nIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJUaGUgU3RyaW5nIHRvIGluaXRpYWxpc2UgdG8iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdG8gbnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6c3RyaW5nJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpzdHJpbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtzdHJpbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3N0cmluZyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlRoZSBTdHJpbmcgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RyaW5nIHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHZhbHVlKCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBTdHJpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmFsdWUiIHJldHVybmNvbW1lbnQ9IlRoZSBTdHJpbmcgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RyaW5nIHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZ192YWx1ZSgpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgU3RyaW5nIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgU3RyaW5nIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFN0cmluZyBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIFN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBTdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgU3RyaW5nIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbiBhcmUgb2YgdGhlIHNhbWUgU3RyaW5nLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIFN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imd0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoaXMgU3RyaW5nIGlzIGxleG9ncmFwaGljYWxseSBncmVhdGVyIHRoYW4gdGhhdAotICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaCBtdXN0IGJlIG9mCi0gdHlwZSBTdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGlzIFN0cmluZyBpcyBsZXhvZ3JhcGhpY2FsbHkgZ3JlYXRlciB0aGFuIHRoYXQKLSAgICAgICAgIHN1cHBsaWVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIFN0cmluZyBpcyBsZXhvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIHRoYXQgc3VwcGxpZWQuCi0gICAgICAgICBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2ggbXVzdCBiZSBvZgotIHR5cGUgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhpcyBTdHJpbmcgaXMgbGV4b2dyYXBoaWNhbGx5IGxlc3MgdGhhbiB0aGF0IHN1cHBsaWVkLgotICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDYWxlbmRhclR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lIiB0eXBlPSJYU1RpbWUiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9ImphdmEubGFuZy5DbG9uZWFibGUiIHR5cGU9IkNsb25lYWJsZSIgLz4KLQkJPC9pbXBsZW1lbnRzPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUaW1lIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTVGltZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byB0aGUgc3VwcGxpZWQgdGltZSBhbmQgdGltZXpvbmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y2FsCi0gICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR6Ci0gICAgICAgICAgICBUaGUgdGltZXpvbmUgKHBvc3NpYmx5IG51bGwpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNhbCIgY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWUgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaGUgdGltZXpvbmUgKHBvc3NpYmx5IG51bGwpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRpbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1RpbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdG8gdGhlIGN1cnJlbnQgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjbG9uZSIgcmV0dXJuY29tbWVudD0iTmV3IFhTVGltZSByZXByZXNlbnRpbmcgdGhlIGNvcHkgb2YgdGhlIHRpbWUgYW5kIHRpbWV6b25lIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgY29weSBvZiB0aGUgdGltZSAoYW5kIHRpbWV6b25lKSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBjb3B5IG9mIHRoZSB0aW1lIGFuZCB0aW1lem9uZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9ImphdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgdHlwZT0iQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24iIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDt0aW1lJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt0aW1lJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfdGltZSIgcmV0dXJuY29tbWVudD0iTmV3IFhTVGltZSByZXByZXNlbnRpbmcgdGhlIHN1cHBsaWVkIHRpbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lIiB0eXBlPSJYU1RpbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBTdHJpbmcgcmVwcmVzZW50ZWQgc3VwcGxpZWQgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRlZCB0aW1lIGFuZCB0aW1lem9uZSB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgc3VwcGxpZWQgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJTdHJpbmcgcmVwcmVzZW50ZWQgdGltZSBhbmQgdGltZXpvbmUgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB0aW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHRpbWUgZnJvbSB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSB0aW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaG91ciIgcmV0dXJuY29tbWVudD0iVGhlIGhvdXIgc3RvcmVkIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBob3VyIHN0b3JlZCBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgaG91ciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51dGUiIHJldHVybmNvbW1lbnQ9IlRoZSBtaW51dGUgc3RvcmVkIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBtaW51dGUgc3RvcmVkIGFzIGFuIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBtaW51dGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2Vjb25kIiByZXR1cm5jb21tZW50PSJUaGUgc2Vjb25kIHN0b3JlZCIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgc2Vjb25kcyBzdG9yZWQgYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIHNlY29uZCBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0aW1lem9uZWQiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHRpbWUgaGFzIGEgdGltZXpvbmUgYXNzb2NpYXRlZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciB0aGUgdGltZSBzdG9yZWQgaGFzIGEgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIGl0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0aW1lIGhhcyBhIHRpbWV6b25lIGFzc29jaWF0ZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOnRpbWUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOnRpbWUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2FsZW5kYXIiIHJldHVybmNvbW1lbnQ9IkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEudXRpbC5DYWxlbmRhciIgdHlwZT0iQ2FsZW5kYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGltZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR6IiByZXR1cm5jb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZSB0aW1lIHN0b3JlZCBhbmQgdGhlIGFjdHVhbCB0aW1lCi0gICAgICAgICBhZnRlciB0aGUgdGltZXpvbmUgaXMgdGFrZW4gaW50byBhY2NvdW50IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRpbWUgc3RvcmVkIGFzIGEgZHVyYXRpb24gb2YKLSB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZSB0aW1lIHN0b3JlZCBhbmQgdGhlIGFjdHVhbCB0aW1lCi0gICAgICAgICBhZnRlciB0aGUgdGltZXpvbmUgaXMgdGFrZW4gaW50byBhY2NvdW50PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmFsdWUiIHJldHVybmNvbW1lbnQ9InRpbWUgc3RvcmVkIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2giIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGltZSBzdG9yZWQgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGJvdGggWFNUaW1lJmFwb3M7cyByZXByZXNlbnQgdGhlIHNhbWUgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiBib3RoIFhTVGltZSZhcG9zO3MgcmVwcmVzZW50IHRoZSBzYW1lIHRpbWUuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgWFNUaW1lIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNudHMgYSBwb2ludCBpbiB0aW1lIGFmdGVyIHRoYXQKLSAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNudHMgYSBwb2ludCBpbiB0aW1lIGFmdGVyIHRoYXQKLSAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJndCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNudHMgYSBwb2ludCBpbiB0aW1lIGJlZm9yZSB0aGF0Ci0gICAgICAgICByZXByZXNlbnRlZCBieSB0aGUgdGltZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBYU1RpbWUgcmVwcmVzZW50YXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNUaW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzbnRzIGEgcG9pbnQgaW4gdGltZSBiZWZvcmUgdGhhdAotICAgICAgICAgcmVwcmVzZW50ZWQgYnkgdGhlIHRpbWUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFhTVGltZSB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibWludXMiIHJldHVybmNvbW1lbnQ9IkEgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIHN1YnRyYWN0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gYmV0d2VlbiB0aGlzIHRpbWUgc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSByZXByZXNlbnRhdGlvbi4gVGhpcyBzdXBwbGllZCByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIGVpdGhlciB0eXBlCi0gWFNUaW1lIChpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiB0aGVzZQotIHR3byB0aW1lcykgb3IgYSBYRFREYXlUaW1lRHVyYXRpb24gKGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyB0aGUgdGltZQotIHdoZW4gdGhpcyBkdXJhdGlvbiBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIHRpbWUgc3RvcmVkKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gc3VidHJhY3QgKGVpdGhlciBYU1RpbSBvcgotICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIHN1YnRyYWN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXByZXNlbnRhdGlvbiB0byBzdWJ0cmFjdCAoZWl0aGVyIFhTVGltIG9yCi0gICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24pIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBsdXMiIHJldHVybmNvbW1lbnQ9IkEgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoaXMgYWRkaXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIHRpbWUgc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQgdGltZQotIGR1cmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIEEgWERURGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvCi0gICAgICAgICAgICBhZGQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTVGltZSByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGlzIGFkZGl0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJBIFhEVERheVRpbWVEdXJhdGlvbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSB0bwotICAgICAgICAgICAgYWRkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYU1Vuc2lnbmVkU2hvcnQiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkU2hvcnQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEJ5dGUiIHR5cGU9IlhTVW5zaWduZWRCeXRlIj4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Vuc2lnbmVkQnl0ZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Vuc2lnbmVkQnl0ZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZEJ5dGUgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgdW5zaWduZWRCeXRlIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0idW5zaWduZWRCeXRlIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdJbnRlZ2VyIiB0eXBlPSJCaWdJbnRlZ2VyIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6dW5zaWduZWRCeXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czp1bnNpZ25lZEJ5dGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDt1bnNpZ25lZEJ5dGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3Vuc2lnbmVkQnl0ZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO3Vuc2lnbmVkQnl0ZSZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZEJ5dGUKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRCeXRlIGlzIHRvIGJlIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvczt1bnNpZ25lZEJ5dGUmYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkQnl0ZSBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTVW5zaWduZWRMb25nIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZExvbmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEludCIgdHlwZT0iWFNVbnNpZ25lZEludCI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNVbnNpZ25lZEludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Vuc2lnbmVkSW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHVuc2lnbmVkSW50IHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIHVuc2lnbmVkSW50IHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0idW5zaWduZWRJbnQgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czp1bnNpZ25lZEludCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6dW5zaWduZWRJbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDt1bnNpZ25lZEludCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7dW5zaWduZWRJbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvczt1bnNpZ25lZEludCZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZEludAotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZEludCBpcyB0byBiZSBleHRyYWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7dW5zaWduZWRJbnQmYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkSW50IGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNOb25OZWdhdGl2ZUludGVnZXIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vbk5lZ2F0aXZlSW50ZWdlciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkTG9uZyIgdHlwZT0iWFNVbnNpZ25lZExvbmciPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTVW5zaWduZWRMb25nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTVW5zaWduZWRMb25nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHVuc2lnbmVkTG9uZyB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICB1bnNpZ25lZExvbmcgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJ1bnNpZ25lZExvbmcgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czp1bnNpZ25lZExvbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOnVuc2lnbmVkTG9uZyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3Vuc2lnbmVkTG9uZyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7dW5zaWduZWRMb25nJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7dW5zaWduZWRMb25nJmFwb3M7IHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkTG9uZwotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZExvbmcgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO3Vuc2lnbmVkTG9uZyZhcG9zOyBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRMb25nIGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNVbnNpZ25lZEludCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRJbnQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZFNob3J0IiB0eXBlPSJYU1Vuc2lnbmVkU2hvcnQiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTVW5zaWduZWRTaG9ydCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Vuc2lnbmVkU2hvcnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgdW5zaWduZWRTaG9ydCB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICB1bnNpZ25lZFNob3J0IHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0idW5zaWduZWRTaG9ydCB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOnVuc2lnbmVkU2hvcnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOnVuc2lnbmVkU2hvcnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDt1bnNpZ25lZFNob3J0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt1bnNpZ25lZFNob3J0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7dW5zaWduZWRTaG9ydCZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZFNob3J0Ci0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkU2hvcnQgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO3Vuc2lnbmVkU2hvcnQmYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkU2hvcnQgaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDdHJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1VudHlwZWRBdG9taWMiIHR5cGU9IlhTVW50eXBlZEF0b21pYyI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVudHlwZWRBdG9taWMgZGF0YXR5cGUgd2hpY2ggaXMgdXNlZCB0byByZXByZXNlbnQKLSB1bnR5cGVkIGF0b21pYyBub2Rlcy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNVbnR5cGVkQXRvbWljIiAvPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNVbnR5cGVkQXRvbWljIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhlIHVudHlwZWQgYXRvbWljCi0gICAgICAgICAgICBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGUgdW50eXBlZCBhdG9taWMKLSAgICAgICAgICAgIG5vZGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czp1bnR5cGVkQXRvbWljJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czp1bnR5cGVkQXRvbWljJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIHVudHlwZWQgYXRvbWljIG5vZGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIHVudHlwZWQgYXRvbWljCi0gbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIHVudHlwZWQgYXRvbWljIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNEdXJhdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNZZWFyTW9udGhEdXJhdGlvbiIgdHlwZT0iWFNZZWFyTW9udGhEdXJhdGlvbiI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFllYXJNb250aER1cmF0aW9uIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTWWVhck1vbnRoRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIHRoZSBudW1iZXIgb2YgbW9udGhzCi0gc3VwcGxpZWQgaXMgbW9yZSB0aGFuIDEyLCB0aGUgbnVtYmVyIG9mIHllYXJzIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj55ZWFyCi0gICAgICAgICAgICBOdW1iZXIgb2YgeWVhcnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tb250aAotICAgICAgICAgICAgTnVtYmVyIG9mIG1vbnRocyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5lZ2F0aXZlCi0gICAgICAgICAgICBUcnVlIGlmIHRoaXMgZHVyYXRpb24gb2YgdGltZSByZXByZXNlbnRzIGEgYmFja3dhcmRzIHBhc3NhZ2UKLSAgICAgICAgICAgIHRocm91Z2ggdGltZS4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ5ZWFyIiBjb21tZW50PSJOdW1iZXIgb2YgeWVhcnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtb250aCIgY29tbWVudD0iTnVtYmVyIG9mIG1vbnRocyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5lZ2F0aXZlIiBjb21tZW50PSJUcnVlIGlmIHRoaXMgZHVyYXRpb24gb2YgdGltZSByZXByZXNlbnRzIGEgYmFja3dhcmRzIHBhc3NhZ2UKLSAgICAgICAgICAgIHRocm91Z2ggdGltZS4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1llYXJNb250aER1cmF0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgbW9udGhzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1vbnRocwotICAgICAgICAgICAgTnVtYmVyIG9mIG1vbnRocyBpbiB0aGUgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibW9udGhzIiBjb21tZW50PSJOdW1iZXIgb2YgbW9udGhzIGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNZZWFyTW9udGhEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byBhIGR1cmF0aW9uIG9mIG5vIHRpbWUgKDB5ZWFycyBhbmQgMG1vbnRocyk8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZVlNRHVyYXRpb24iIHJldHVybmNvbW1lbnQ9Ik5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZQotICAgICAgICAgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFhTWWVhck1vbnRoRHVyYXRpb24gYnkgcGFyc2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0gcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0gICAgICAgICBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eWVhck1vbnRoRHVyYXRpb24mcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpdmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eWVhck1vbnRoRHVyYXRpb24mcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0aW1lIGR1cmF0aW9uIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB0aW1lIGR1cmF0aW9uCi0gZnJvbSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHRpbWUgZHVyYXRpb24gZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuZWdhdGl2ZSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2ggdGltZS4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHdoZXRoZXIgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoCi0gdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2ggdGltZS4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOnllYXJNb250aER1cmF0aW9uJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czp5ZWFyTW9udGhEdXJhdGlvbiZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb250aFZhbHVlIiByZXR1cm5jb21tZW50PSJOdW1iZXIgb2YgbW9udGhzIG1ha2luZyB1cCB0aGlzIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkIGFzIHRoZSBudW1iZXIgb2YgbW9udGhzIHdpdGhpbiBpdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TnVtYmVyIG9mIG1vbnRocyBtYWtpbmcgdXAgdGhpcyBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgZHVyYXRpb24gb2YgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGV5IGJvdGggcmVwcmVzZW50IHRoZSBkdXJhdGlvbiBvZiB0aW1lLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imx0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBsYXJnZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0gICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIGxhcmdlciBkdXJhdGlvbiB0aGFuIHRoYXQKLSAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJndCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgc21hbGxlciBkdXJhdGlvbiB0aGFuIHRoYXQKLSAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgc21hbGxlciBkdXJhdGlvbiB0aGFuIHRoYXQKLSAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwbHVzIiByZXR1cm5jb21tZW50PSJOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotICAgICAgICAgYWZ0ZXIgdGhlIGFkZGl0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGFkZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uCi0gICAgICAgICBhZnRlciB0aGUgYWRkaXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gYWRkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibWludXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uCi0gICAgICAgICBhZnRlciB0aGUgc3VidHJhY3Rpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gc3VidHJhY3Q8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotICAgICAgICAgYWZ0ZXIgdGhlIHN1YnRyYWN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIHN1YnRyYWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uCi0gICAgICAgICBhZnRlciB0aGUgbXVsdGlwbGljYXRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gbXVsdGlwbHkgYnk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotICAgICAgICAgYWZ0ZXIgdGhlIG11bHRpcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIG11bHRpcGx5IGJ5IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGl2IiByZXR1cm5jb21tZW50PSJOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotICAgICAgICAgYWZ0ZXIgdGhlIGRpdmlzaW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgZGl2aXNpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGRpdmlkZSBieTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uCi0gICAgICAgICBhZnRlciB0aGUgZGl2aXNpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gZGl2aWRlIGJ5IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotPC9qZWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWx0b2h0bWwueHNsIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvamVsdG9odG1sLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRhZjAwZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWx0b2h0bWwueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyMzE0NzIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gLS0+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgotICAgICAgICAgICAgICAgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgICAgICAgICAgICAgIHhtbG5zOnJlZGlyZWN0PSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4vcmVkaXJlY3QiCi0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXM9InJlZGlyZWN0Ij4KLSAgICA8eHNsOm91dHB1dCBlbmNvZGluZz0iVVRGLTgiIG1ldGhvZD0iaHRtbCIgaW5kZW50PSJubyIgb21pdC14bWwtZGVjbGFyYXRpb249InllcyIvPgotICAgIAotICAgIDwhLS0gQ3JlYXRlIHRoZSBIVE1MIHN0cnVjdHVyZSAtLT4KLQk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLSAgIAkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIvL2plbGNsYXNzIi8+Ci0JPC94c2w6dGVtcGxhdGU+Ci0gICAKLSAgICA8IS0tIFRoaXMgaXMgdGhlIG1haW4gd29yayBob3JzZSB0aGF0IGRvZXMgdGhlIGdlbmVyYWwgbGF5b3V0IGZvciB0aGUgY2xhc3MgcGFnZSAtLT4KLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJqZWxjbGFzcyI+Ci0gICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9Im91dHB1dEZpbGUiPgotICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgIDx4c2w6dGV4dD4uaHRtbDwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDp2YXJpYWJsZT4KLSAgICAgIDx4c2w6bWVzc2FnZSB0ZXJtaW5hdGU9Im5vIj4KLSAgICAgICAgIDx4c2w6dGV4dD5HZW5lcmF0aW5nIEphdmFEb2MgZm9yIDwveHNsOnRleHQ+Ci0gICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICA8eHNsOnRleHQ+LjwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDptZXNzYWdlPgotICAgICAgPHJlZGlyZWN0OndyaXRlIHNlbGVjdD0iJG91dHB1dEZpbGUiPgotICAgICAgIDxodG1sPgotICAgICAgICAgPGJvZHk+Ci0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgIDxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2UgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBwYWNrYWdlIi8+PC9zdHJvbmc+PC9mb250PgotICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgPGhyLz4KLSAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgIDxmb250IHNpemU9Ii0xIj48c3Ryb25nPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcGFja2FnZSIvPjwvc3Ryb25nPjwvZm9udD48YnIvPgotICAgICAgICAgICAgICAgQ2xhc3MgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0eXBlIi8+Ci0gICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgPGJyLz4KLSAgICAgICAgICAgIDxoci8+Ci0gICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZm9ybWF0LWhlYWRlciIvPgotICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNvbW1lbnQvYXR0cmlidXRlIi8+Ci0gICAgICAgICAgICA8aHIvPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJkZXNjZW5kYW50OjpmaWVsZHMiPgotICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPgotICAgICAgICAgICAgICAgICAgPHRyIGJnY29sb3I9IiNDQ0NDRkYiIGNvbHM9IjIiPgotICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImZpZWxkcy9maWVsZCIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgotICAgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgotICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iZGVzY2VuZGFudDo6Y29uc3RydWN0b3IiPgotICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPgotICAgICAgICAgICAgICAgICAgPHRyIGJnY29sb3I9IiNDQ0NDRkYiPgotICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImRlc2NlbmRhbnQ6OmNvbnN0cnVjdG9yIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgPGJyLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJkZXNjZW5kYW50OjptZXRob2RzIj4KLSAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIiBjb2xzPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kcy9tZXRob2QiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KLSAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDxoci8+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImZpZWxkcyI+Ci0gICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZmllbGREZXRhaWwiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJtZXRob2RzL2NvbnN0cnVjdG9yIj4KLSAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb25zdHJ1Y3RvckRldGFpbCIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9Im1ldGhvZHMvbWV0aG9kIj4KLSAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtZXRob2RzRGV0YWlsIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgPC9ib2R5PgotICAgICAgICAgPC9odG1sPgotICAgICAgPC9yZWRpcmVjdDp3cml0ZT4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8IS0tIE91dHB1dCBhbnkgZGVzY3JpcHRpb24gdGhhdCBtYXkgYmUgdGhlcmUgZm9yIGNvbW1lbnRzLiAtLT4KLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb21tZW50L2Rlc2NyaXB0aW9uIj4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPCEtLSBPdXRwdXQgdGhlIHZhcmlvdXMgYXR0cmlidXRlIGluZm9ybWF0aW9uIGZvciB0aGUgY2xhc3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29tbWVudC9hdHRyaWJ1dGUiPgotICAgICAgICAgPHA+Ci0gICAgICAgICAgICA8eHNsOmNob29zZT4KLSAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAYXV0aG9yIj4KLSAgICAgICAgICAgICAgICAgIDxzdHJvbmc+QXV0aG9yOjwvc3Ryb25nPjxici8+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGVzY3JpcHRpb24iIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4gCi0gICAgICAgICAgICAgICA8L3hzbDp3aGVuPgotICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBzZWUiPgotICAgICAgICAgICAgICAgICAgPHN0cm9uZz5TZWUgQWxzbzo8L3N0cm9uZz48YnIvPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRlc2NyaXB0aW9uIiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+Ci0gICAgICAgICAgICAgICA8L3hzbDp3aGVuPgotICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgotICAgICAgICAgPC9wPgotICAgIDwveHNsOnRlbXBsYXRlPgotCi0KLSAgICAgICAgPCEtLSBDcmVhdGUgdGhlIGZpZWxkIHN1bW1hcnkgcm93cyAtLT4KLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmaWVsZCIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCIgd2lkdGg9IjIwJSI+Ci0gICAgICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAc3RhdGljID0gJ3RydWUnIj4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gc3RhdGljIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZnVsbHR5cGUiLz4gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHdpZHRoPSI4MCUiPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZmllbGRfe0BuYW1lfSI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICAgICAmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsKLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICAKLSAgICA8IS0tIENyZWF0ZSB0aGUgY29uc3RydWN0b3JzIHJvd3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29uc3RydWN0b3IiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8c3Ryb25nPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjY29uX3tAbmFtZX0iPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pig8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pik8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFyYW0iPgotICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPjx4c2w6dGV4dD4gPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSAhPSBsYXN0KCkiPgotICAgICAgICAgLAotICAgICAgPC94c2w6aWY+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPCEtLSBDcmVhdGUgdGhlIG1ldGhvZCBzdW1tYXJ5IHJvd3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgIDx0ciB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0IiB3aWR0aD0iMjAlIj4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2aXNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBzdGF0aWMgPSAndHJ1ZSciPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiBzdGF0aWM8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0iIj4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI21ldGhvZF97QG5hbWV9Ij4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pig8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pik8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgICAgPGJyLz4KLSAgICAgICAgICAgICAgICYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOwotICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hdC1oZWFkZXIiPgotICAgICAgICAgPHByZT4KLTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPiBjbGFzcyA8c3Ryb25nPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdHlwZSIvPjwvc3Ryb25nPgotZXh0ZW5kcyA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHN1cGVyY2xhc3NmdWxsdHlwZSIvPgotICAgICAgICAgPC9wcmU+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmaWVsZERldGFpbCI+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY29scz0iMiI+Ci0gICAgICAgICA8dHIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiNDQ0NDRkYiIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZmllbGRzL2ZpZWxkIiBtb2RlPSJkZXRhaWwiPgotICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciLz4KLSAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmaWVsZHMvZmllbGQiIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8aDI+Ci0gICAgICAgICA8YSBuYW1lPSJmaWVsZF97QG5hbWV9Ij4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgPC9hPgotICAgICAgPC9oMj4KLSAgICAgIDxwPgotICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZpc2liaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iQHN0YXRpYyA9ICd0cnVlJyI+Ci0gICAgICAgICAgICAgICA8eHNsOnRleHQ+IHN0YXRpYyA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8c3Ryb25nPgotICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICA8L3N0cm9uZz4gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgICA8eHNsOmlmIHRlc3Q9ImNvbW1lbnQiPgotICAgICAgICAgPHRhYmxlPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNvbW1lbnQvZGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICA8L3RhYmxlPgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8aHIvPgotICAgICAgCi0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjb25zdHJ1Y3RvckRldGFpbCI+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY29scz0iMiI+Ci0gICAgICAgICA8dHIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiNDQ0NDRkYiIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kcy9jb25zdHJ1Y3RvciIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kcy9jb25zdHJ1Y3RvciIgbW9kZT0iZGV0YWlsIj4KLSAgICAgIDxoMj4KLSAgICAgICAgIDxhIG5hbWU9ImNvbl97QG5hbWV9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2E+Ci0gICAgICA8L2gyPgotICAgICAgPHA+Ci0gICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHN0cm9uZz4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9zdHJvbmc+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InBhcmFtcyI+Ci0gICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InBhcmFtcy9wYXJhbSIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KTwveHNsOnRleHQ+Ci0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgICA8cD4KLSAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgPC9wPgotICAgICAgPGhyLz4KLSAgICAgIAotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0ibWV0aG9kc0RldGFpbCI+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY29scz0iMiI+Ci0gICAgICAgICA8dHIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiNDQ0NDRkYiIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJtZXRob2RzL21ldGhvZCIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kcy9tZXRob2QiIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8aDI+Ci0gICAgICAgICA8YSBuYW1lPSJtZXRob2Rfe0BuYW1lfSI+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgIDwvYT4KLSAgICAgIDwvaDI+Ci0gICAgICA8cD4KLSAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2aXNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8c3Ryb25nPgotICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICA8L3N0cm9uZz4KLSAgICAgICAgICAgIDx4c2w6dGV4dD4oPC94c2w6dGV4dD4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icGFyYW1zIj4KLSAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icGFyYW1zL3BhcmFtIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6dGV4dD4pPC94c2w6dGV4dD4KLSAgICAgICAgIDwvY29kZT4KLSAgICAgIDwvcD4KLSAgICAgIDxwPgotICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8L3A+Ci0gICAgICA8eHNsOmlmIHRlc3Q9InBhcmFtcyI+Ci0gICAgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+Ci0gICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InBhcmFtcy9wYXJhbSIgbW9kZT0iZGV0YWlsIi8+Ci0gICAgICA8L3hzbDppZj4KLSAgICAgIDx4c2w6aWYgdGVzdD0iQHR5cGUgIT0gJ3ZvaWQnIj4KLSAgICAgICAgIDxoMz5SZXR1cm5zPC9oMz4KLSAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InN0cmluZy1sZW5ndGgoQHJldHVybmNvbW1lbnQpID4gMCI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IC0gPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmV0dXJuY29tbWVudCIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8L3A+Ci0gICAgICA8L3hzbDppZj4KLSAgICAgIDx4c2w6aWYgdGVzdD0iZXhjZXB0aW9ucyI+Ci0gICAgICAgICA8aDM+VGhyb3dzOjwvaDM+Ci0gICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImV4Y2VwdGlvbnMvZXhjZXB0aW9uIiBtb2RlPSJkZXRhaWwiLz4KLSAgICAgIDwveHNsOmlmPgotICAgICAgPGhyLz4KLSAgICAgIAotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InBhcmFtIiBtb2RlPSJkZXRhaWwiPgotICAgICAgICAgPHA+Ci0gICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKEBjb21tZW50KSA+IDAiPgotICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiAtIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvbW1lbnQiIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgPC9wPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImV4Y2VwdGlvbiIgbW9kZT0iZGV0YWlsIj4KLSAgICAgIDxwPgotICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InN0cmluZy1sZW5ndGgoQGNvbW1lbnQpID4gMCI+Ci0gICAgICAgICAgICAgICA8eHNsOnRleHQ+IC0gPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAY29tbWVudCIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgICAgCi08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2plbHRvdG9jLnhzbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2plbHRvdG9jLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmNTA4Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWx0b3RvYy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjMxNDcyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAtLT4KLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgeG1sbnM6c2V0PSJodHRwOi8vZXhzbHQub3JnL3NldHMiCi0gICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuIgotICAgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJzZXQgeGFsYW4iCi0+Ci0gICA8eHNsOnBhcmFtIG5hbWU9InNka25hbWUiPlNvbWUgTmFtZTwveHNsOnBhcmFtPgotICAgPHhzbDpwYXJhbSBuYW1lPSJkaXIiPmRvYy9odG1sPC94c2w6cGFyYW0+ICAgCi0gICA8eHNsOm91dHB1dCBpbmRlbnQ9InllcyIgZW5jb2Rpbmc9IlVURi04IiB4YWxhbjppbmRlbnQtYW1vdW50PSIzIi8+Ci0gICA8eHNsOmtleSBuYW1lPSJhbGxQYWNrYWdlcyIgbWF0Y2g9ImplbGNsYXNzIiB1c2U9IkBwYWNrYWdlIi8+Ci0gICAgIAotICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2plbCI+Ci0gICAgICA8dG9jIGxhYmVsPSJ7JHNka25hbWV9Ij4KLSAgICAgICAgIDx0b3BpYyBsYWJlbD0iUmVmZXJlbmNlIj4KLSAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJzZXQ6ZGlzdGluY3QoamVsY2xhc3MvQHBhY2thZ2UpIj4KLSAgICAgICAgICAgICAgIDx0b3BpYyBsYWJlbD0iey59Ij4KLSAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ia2V5KCdhbGxQYWNrYWdlcycsIC4pIi8+Ci0gICAgICAgICAgICAgICA8L3RvcGljPgotICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+Ci0gICAgICAgICA8L3RvcGljPgotICAgICAgPC90b2M+Ci0gICA8L3hzbDp0ZW1wbGF0ZT4KLSAgIAotICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iamVsY2xhc3MiPgotICAgICAgPHRvcGljIGxhYmVsPSJ7QGZ1bGx0eXBlfSIgaHJlZj0ieyRkaXJ9L3tAZnVsbHR5cGV9Lmh0bWwiLz4KLSAgIDwveHNsOnRlbXBsYXRlPgotICAgCi08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL3NjaGVtYS5jc3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9zY2hlbWEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjIwMjhkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL3NjaGVtYS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1INi5TY2hlbWFIZWFkZXIgewotCWZvbnQtc2l6ZToxNnB4OyAKLQlkaXNwbGF5OmlubGluZQotfQotCi1QLlNjaGVtYUNvcHlyaWdodCB7Ci0JZm9udC1zaXplOiBzbWFsbGVyOyAKLQlmb250LXN0eWxlOiBub3JtYWw7Ci0JY29sb3I6ICMzMzY2OTk7IAotCWRpc3BsYXk6aW5saW5lOwotCW1hcmdpbi10b3A6IDMuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMTEuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAwLjAwMDAwMHB0OwotfQotCi1QLlNjaGVtYUR0ZCB7Ci0JY29sb3I6ICM4MDAwMDA7IAotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDEwLjAwMDAwMHB0OwotfQotCi1QLlNjaGVtYUR0ZEF0dGxpc3QgewotCWNvbG9yOiAjODAwMDAwOyAKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAyMC4wMDAwMDBwdDsKLX0KLQotc3Bhbi5TY2hlbWFUYWcgewotCWNvbG9yOiAjMDAwMDgwOwotfQotCi1zcGFuLlNjaGVtYUNzdHJpbmcgewotCWNvbG9yOiAjMDA4MDAwOwotfQotCi1wcmUuRXhhbXBsZSB7Ci0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLX0KLQotLkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIHsKLQljb2xvcjogYmxhY2s7Ci0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLQltYXJnaW4tYm90dG9tOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMTAuMDAwMDAwcHQ7Ci19Ci0KLS5Db25maWdNYXJrdXBBdHRsaXN0RGVzYyB7Ci0JY29sb3I6IGJsYWNrOwotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDMyLjAwMDAwMHB0OwotfQotCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2xpYi8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9saWIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlkYWZjNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2xpYi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotamVsZG9jbGV0LmphcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZDAzOGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTUxMjYsIDIxMzg1MwotIyAgICAgCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scwotcGx1Z2luTmFtZT1YUGF0aCAyLjAgUHJvY2Vzc29yIFNESyBEb2N1bWVudGF0aW9uCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NWI0MmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KLTxwbHVnaW4+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgICA8dG9jCi0gICAgICAgICAgICBmaWxlPSJ0b2MueG1sIgotICAgICAgICAgICAgcHJpbWFyeT0idHJ1ZSI+Ci0gICAgICA8L3RvYz4KLSAgIDwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2Mvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9zZGsvZG9jL0FjdGl2YXRvci5qYXZhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL3Nkay9kb2MvQWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlM2NiZDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL3Nkay9kb2MvQWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYyI7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWN0aXZhdG9yKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I4ZWE5Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjx0b2MgbGFiZWw9IlhQYXRoIDIuMCBQcm9jZXNzb3IgU0RLIERvY3VtZW50YWl0b24iPgotICAgPHRvcGljIGxhYmVsPSJSZWZlcmVuY2UiPgotICAgICAgPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01CdWlsZGVyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NQnVpbGRlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5FdmFsdWF0b3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5FdmFsdWF0b3IiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuSkZsZXhDdXBQYXJzZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5KRmxleEN1cFBhcnNlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDaGVja2VyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ2hlY2tlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNFcnJvci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY05hbWVSZXNvbHZlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY05hbWVSZXNvbHZlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aEV4Y2VwdGlvbi5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXJFeGNlcHRpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlckV4Y2VwdGlvbiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YZXJjZXNMb2FkZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YZXJjZXNMb2FkZXIiLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QiPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGguaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGgiLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbiI+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLkZuRnVuY3Rpb25MaWJyYXJ5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uRm5GdW5jdGlvbkxpYnJhcnkiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uWFNDdHJMaWJyYXJ5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uWFNDdHJMaWJyYXJ5Ii8+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlTaW1wbGVUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BdHRyVHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkF0dHJUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Db21tZW50VHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNvbW1lbnRUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkRvY1R5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkVsZW1lbnRUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRWxlbWVudFR5cGUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlBJVHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlBJVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlRleHRUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuVGV4dFR5cGUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFBhdGhEZWNpbWFsRm9ybWF0Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFBhdGhEZWNpbWFsRm9ybWF0Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkkiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCYXNlNjRCaW5hcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jhc2U2NEJpbmFyeSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW4uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW4iLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCeXRlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCeXRlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RheVRpbWVEdXJhdGlvbi5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRW50aXR5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNFbnRpdHkiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGgiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGhEYXkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aERheSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHWWVhciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGguaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGgiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNIZXhCaW5hcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0hleEJpbmFyeSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0lELmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0lEUkVGLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRFJFRiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmcuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmciLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05DTmFtZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05lZ2F0aXZlSW50ZWdlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTmVnYXRpdmVJbnRlZ2VyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25OZWdhdGl2ZUludGVnZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vdGF0aW9uLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb3RhdGlvbiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Bvc2l0aXZlSW50ZWdlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTUG9zaXRpdmVJbnRlZ2VyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU2hvcnQuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Nob3J0Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmciLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRCeXRlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEJ5dGUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEludC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRJbnQiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZExvbmcuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkTG9uZyIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkU2hvcnQuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkU2hvcnQiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTWWVhck1vbnRoRHVyYXRpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1llYXJNb250aER1cmF0aW9uIi8+Ci0gICAgICA8L3RvcGljPgotICAgPC90b3BpYz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVjYTI3Zi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzAwMDMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkF1Z3VzdCwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNhNjExYi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDYxOGViLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9UHNjeWhvUGF0aCBYUGF0aCAyLjAgUHJvY2Vzc29yIEZlYXR1cmUKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1YUGF0aCAyLjAgUHJvY2Vzc29yCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwOSBBbmRyZWEgQml0dGF1LCBEYXZpZCBDYXJ2ZXIsIE11a3VsIEdhbmRoaSwgYW5kIG90aGVycyAyMDA4LlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrKVxuXAotICAgIERhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIC0gaHR0cDovL3d3dy5zdGFyc3RhbmRhcmQub3JnKVxuXAotICAgIEplc3BlciBNb2xsZXIgKE5pbmVDb25zdWx0IC0gaHR0cDovL3d3dy5uaW5lY29uc3VsdC5kaylcblwKLSAgICBNdWt1bCBHYW5kaGlcbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNWEzNWIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIxLjEuMDAzLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlciIKLSAgICAgIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2U+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YV9jdXAucnVudGltZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUueGVyY2VzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwM2U2NjUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikKLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLSAgCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgPC9MST4KLSAgCi0gIDxsaT5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk5YmRiLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmMWJhNy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9V1RQIFhTTCBTb3VyY2VcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi0oYykgQ29weXJpZ2h0IERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCksIERhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKVxuXAotYW5kIG90aGVycyAyMDA4LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsIGFib3V0LmluaSwgYWJvdXQubWFwcGluZ3MsIGFib3V0LnByb3BlcnRpZXMsIHd0cF9wcm9kMzIucG5nLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTUxNzMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXBsdWdpbk5hbWU9V1RQIFBzeWNob1BhdGggWFBhdGggMi4wIFByb2Nlc3NvcgotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWZiNDRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjZWFiMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNDllOWYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID1cCi1lcGwtdjEwLmh0bWwsXAotZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi1mZWF0dXJlLnhtbCxcCi1mZWF0dXJlLnByb3BlcnRpZXMsXAotbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmFkMjkuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM5YWRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVBzeWNob1BhdGggWFBhdGggMi4wIFByb2Nlc3NvciBGZWF0dXJlCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgV1RQIFBzeWNob1BhdGggWFBhdGggMi4wIHByb2Nlc3Nvci4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA5IEFuZHJlYSBCaXR0YXUsXG5cCi1EYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCksIE11a3VsIEdhbmRoaSBhbmQgb3RoZXJzIDIwMDkuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgY29kZSBhbmQgaW1wbGVtZW50YXRpb25cblwKLSAgICBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCAtIGh0dHA6Ly93d3cuc3RhcnN0YW5kYXJkLm9yZylcblwKLSAgICBNdWt1bCBHYW5kaGlcbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUsIDIwMDhcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM0YTQ4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkp1bmUgMDYsIDIwMDc8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotICAgCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCi0gICAKLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUwotICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0gICAKLTx1bD4KLQk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLQk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4gICAKLSAKLTxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCi1JbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgotCi08dWw+Ci0JPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+Ci0JPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KLQk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+Ci0JPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KLQk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Ci08L3VsPgotCQkKLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKLWluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgotdGhhdCBkaXJlY3RvcnkuPC9wPgotCi08cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+Ci0KLTx1bD4KLQk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgotCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKLQk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdjOThiMS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdUUCBYU0wgU291cmNlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLCBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbClcblwKLWFuZCBvdGhlcnMgMjAwOC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYTU3NWMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjM0MWNhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1wbHVnaW5OYW1lPVdUUCBYU0wgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZmI0NGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmNlYWIzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWEyNzBhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9hYm91dC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzAwMDMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5BdWd1c3QsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkNTc2OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQyYmVhMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1Qc2N5aG9QYXRoIFhQYXRoIDIuMCBQcm9jZXNzb3IgU0RLIEZlYXR1cmUKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1YUGF0aCAyLjAgUHJvY2Vzc29yIFNESwotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDkgQW5kcmVhIEJpdHRhdSwgRGF2aWQgQ2FydmVyLCBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMgMjAwOC5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51aylcblwKLSAgICBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCAtIGh0dHA6Ly93d3cuc3RhcnN0YW5kYXJkLm9yZylcblwKLSAgICBKZXNwZXIgTW9sbGVyIChOaW5lQ29uc3VsdCAtIGh0dHA6Ly93d3cubmluZWNvbnN1bHQuZGspXG5cCi0gICAgTXVrdWwgR2FuZGhpXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZWU3OTcuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjEuMS4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiCi0gICAgICBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyIj4KLQotICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9kZXNjcmlwdGlvbiI+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2NvcHlyaWdodCI+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2xpY2Vuc2UiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzZTY2NS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikKLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLSAgCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgPC9MST4KLSAgCi0gIDxsaT5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTliZGIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE1YTQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5tYXBwaW5ncyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4MzkwYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmYxYmE3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9V1RQIFhTTCBTb3VyY2VcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi0oYykgQ29weXJpZ2h0IERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCksIERhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKVxuXAotYW5kIG90aGVycyAyMDA4LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGE1NzVjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsIGFib3V0LmluaSwgYWJvdXQubWFwcGluZ3MsIGFib3V0LnByb3BlcnRpZXMsIHd0cF9wcm9kMzIucG5nLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9wbHVnaW4ucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhNTE3My4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXBsdWdpbk5hbWU9V1RQIFBzeWNob1BhdGggWFBhdGggMi4wIFByb2Nlc3NvcgotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5naWYgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZmI0NGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIucG5nIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmNlYWIzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0OWU5Zi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID1cCi1lcGwtdjEwLmh0bWwsXAotZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi1mZWF0dXJlLnhtbCxcCi1mZWF0dXJlLnByb3BlcnRpZXMsXAotbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyYWQyOS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMzlhZGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVBzeWNob1BhdGggWFBhdGggMi4wIFByb2Nlc3NvciBGZWF0dXJlCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgV1RQIFBzeWNob1BhdGggWFBhdGggMi4wIHByb2Nlc3Nvci4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA5IEFuZHJlYSBCaXR0YXUsXG5cCi1EYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCksIE11a3VsIEdhbmRoaSBhbmQgb3RoZXJzIDIwMDkuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgY29kZSBhbmQgaW1wbGVtZW50YXRpb25cblwKLSAgICBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCAtIGh0dHA6Ly93d3cuc3RhcnN0YW5kYXJkLm9yZylcblwKLSAgICBNdWt1bCBHYW5kaGlcbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUsIDIwMDhcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzRhNDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkp1bmUgMDYsIDIwMDc8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotICAgCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCi0gICAKLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUwotICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0gICAKLTx1bD4KLQk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLQk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4gICAKLSAKLTxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCi1JbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgotCi08dWw+Ci0JPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+Ci0JPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KLQk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+Ci0JPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KLQk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Ci08L3VsPgotCQkKLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKLWluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgotdGhhdCBkaXJlY3RvcnkuPC9wPgotCi08cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+Ci0KLTx1bD4KLQk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgotCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKLQk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE1YTQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4MzkwYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2M5OGIxLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdUUCBYU0wgU291cmNlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLCBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbClcblwKLWFuZCBvdGhlcnMgMjAwOC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzQxY2EuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1wbHVnaW5OYW1lPVdUUCBYU0wgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgo=